feat: selection tracking

This commit is contained in:
Sara Gerretsen 2025-12-12 22:28:04 +01:00
parent 4aa1075fb6
commit cb43179770
15 changed files with 217 additions and 20 deletions

View file

@ -1,6 +1,5 @@
#include "terrain_mesh_editor.h"
#include "core/input/input_event.h"
#include "core/io/file_access.h"
#include "core/io/resource_loader.h"
#include "core/io/resource_saver.h"
#include "core/os/keyboard.h"
@ -36,9 +35,13 @@ Array SaveData::get_primitives() const {
return this->primitives;
}
String const TerrainMeshEditor::sig_selection_changed{ "selection_changed" };
void TerrainMeshEditor::_bind_methods() {
BIND_HPROPERTY(Variant::OBJECT, point_primitive_object, PROPERTY_HINT_RESOURCE_TYPE, "PackedScene");
ClassDB::bind_method(D_METHOD("save_data"), &self_type::save_data);
BIND_HPROPERTY(Variant::OBJECT, current_selected, PROPERTY_HINT_RESOURCE_TYPE, "TerrainPrimitive");
ADD_SIGNAL(MethodInfo(sig_selection_changed, PropertyInfo(Variant::OBJECT, "new_selection", PROPERTY_HINT_RESOURCE_TYPE, "TerrainPrimitive")));
}
void TerrainMeshEditor::ready() {
@ -54,7 +57,6 @@ void TerrainMeshEditor::ready() {
}
void TerrainMeshEditor::on_primitive_list_changed(Array primitives) {
this->out_of_date = true;
for (Node3D *existing : this->primitive_nodes) {
existing->queue_free();
}
@ -162,6 +164,15 @@ void TerrainMeshEditor::save_data() {
}
}
void TerrainMeshEditor::set_current_selected(Ref<TerrainPrimitive> primitive) {
this->current_selected = primitive;
emit_signal(sig_selection_changed, primitive);
}
Ref<TerrainPrimitive> TerrainMeshEditor::get_current_selected() const {
return this->current_selected;
}
void TerrainMeshEditor::set_point_primitive_object(Ref<PackedScene> scene) {
this->point_primitive_object = scene;
}