Added a method to MeshDataInstance that can return a substitute MeshInstance.

This commit is contained in:
Relintai 2021-08-13 22:56:05 +02:00
parent 4595d4abee
commit d1a5bbf2a0
2 changed files with 22 additions and 0 deletions

View File

@ -19,6 +19,8 @@
#include "../../texture_packer/texture_resource/packer_image_resource.h"
#endif
#include "scene/3d/mesh_instance.h"
bool MeshDataInstance::get_snap_to_mesh() const {
return _snap_to_mesh;
}
@ -168,6 +170,22 @@ void MeshDataInstance::free_meshes() {
}
}
Node *MeshDataInstance::get_substitute_for_room() {
if (!_mesh.is_valid()) {
return nullptr;
}
Ref<ArrayMesh> m;
m.instance();
m->add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, _mesh->get_array());
MeshInstance *mi = memnew(MeshInstance);
mi->set_mesh(m);
return mi;
}
MeshDataInstance::MeshDataInstance() {
_dirty = false;
_snap_to_mesh = false;
@ -226,4 +244,6 @@ void MeshDataInstance::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "Material"), "set_material", "get_material");
ClassDB::bind_method(D_METHOD("refresh"), &MeshDataInstance::refresh);
ClassDB::bind_method(D_METHOD("get_substitute_for_room"), &MeshDataInstance::get_substitute_for_room);
}

View File

@ -65,6 +65,8 @@ public:
void setup_material_texture();
void free_meshes();
Node *get_substitute_for_room();
MeshDataInstance();
~MeshDataInstance();