mirror of
https://github.com/Relintai/pandemonium_engine_minimal.git
synced 2024-11-17 22:17:19 +01:00
81 lines
2.5 KiB
C++
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() {
|
|
}
|