pandemonium_engine_minimal/scene/2d/multimesh_instance_2d.cpp

81 lines
2.5 KiB
C++

/* multimesh_instance_2d.cpp */
#include "multimesh_instance_2d.h"
#include "core/core_string_names.h"
#include "scene/resources/mesh/multimesh.h"
void MultiMeshInstance2D::_notification(int p_what) {
if (p_what == NOTIFICATION_DRAW) {
if (multimesh.is_valid()) {
draw_multimesh(multimesh, texture, normal_map);
}
}
}
void MultiMeshInstance2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_multimesh", "multimesh"), &MultiMeshInstance2D::set_multimesh);
ClassDB::bind_method(D_METHOD("get_multimesh"), &MultiMeshInstance2D::get_multimesh);
ClassDB::bind_method(D_METHOD("set_texture", "texture"), &MultiMeshInstance2D::set_texture);
ClassDB::bind_method(D_METHOD("get_texture"), &MultiMeshInstance2D::get_texture);
ClassDB::bind_method(D_METHOD("set_normal_map", "normal_map"), &MultiMeshInstance2D::set_normal_map);
ClassDB::bind_method(D_METHOD("get_normal_map"), &MultiMeshInstance2D::get_normal_map);
ADD_SIGNAL(MethodInfo("texture_changed"));
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "multimesh", PROPERTY_HINT_RESOURCE_TYPE, "MultiMesh"), "set_multimesh", "get_multimesh");
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture");
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "normal_map", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_normal_map", "get_normal_map");
}
void MultiMeshInstance2D::set_multimesh(const Ref<MultiMesh> &p_multimesh) {
// Cleanup previous connection if any.
if (multimesh.is_valid()) {
multimesh->disconnect(CoreStringNames::get_singleton()->changed, this, "update");
}
multimesh = p_multimesh;
// Connect to the multimesh so the AABB can update when instance transforms are changed.
if (multimesh.is_valid()) {
multimesh->connect(CoreStringNames::get_singleton()->changed, this, "update");
}
update();
}
Ref<MultiMesh> MultiMeshInstance2D::get_multimesh() const {
return multimesh;
}
void MultiMeshInstance2D::set_texture(const Ref<Texture> &p_texture) {
if (p_texture == texture) {
return;
}
texture = p_texture;
update();
emit_signal("texture_changed");
_change_notify("texture");
}
Ref<Texture> MultiMeshInstance2D::get_texture() const {
return texture;
}
void MultiMeshInstance2D::set_normal_map(const Ref<Texture> &p_texture) {
normal_map = p_texture;
update();
}
Ref<Texture> MultiMeshInstance2D::get_normal_map() const {
return normal_map;
}
MultiMeshInstance2D::MultiMeshInstance2D() {
}
MultiMeshInstance2D::~MultiMeshInstance2D() {
}