diff --git a/modules/terrain_editor/terrain_mesh_generator.cpp b/modules/terrain_editor/terrain_mesh_generator.cpp index fcf07482..d1a9ad54 100644 --- a/modules/terrain_editor/terrain_mesh_generator.cpp +++ b/modules/terrain_editor/terrain_mesh_generator.cpp @@ -24,6 +24,9 @@ void TerrainMeshGenerator::_bind_methods() { ADD_SIGNAL(MethodInfo(sig_primitives_changed)); ADD_SIGNAL(MethodInfo(sig_primitive_list_changed, PropertyInfo(Variant::ARRAY, "array", PROPERTY_HINT_ARRAY_TYPE, vformat("%s/%s:TerrainPrimitive", Variant::OBJECT, PROPERTY_HINT_RESOURCE_TYPE)))); ClassDB::bind_method(D_METHOD("push_task", "area", "out_mesh", "side_points"), &self_type::push_task); + ClassDB::bind_method(D_METHOD("add_primitive", "primitive"), &self_type::add_primitive); + ClassDB::bind_method(D_METHOD("insert_primitive", "primitive", "idx"), &self_type::insert_primitive); + ClassDB::bind_method(D_METHOD("remove_primitive", "primitive"), &self_type::remove_primitive); } void TerrainMeshGenerator::enter_tree() { @@ -263,6 +266,12 @@ void TerrainMeshGenerator::add_primitive(Ref primitive) { set_primitives(list); } +void TerrainMeshGenerator::insert_primitive(Ref primitive, int idx) { + Array list = get_primitives(); + list.insert(idx, primitive); + set_primitives(list); +} + void TerrainMeshGenerator::remove_primitive(Ref primitive) { Array list = get_primitives(); int idx{ list.find(primitive) }; diff --git a/modules/terrain_editor/terrain_mesh_generator.h b/modules/terrain_editor/terrain_mesh_generator.h index 9cb9141e..80b5e3bf 100644 --- a/modules/terrain_editor/terrain_mesh_generator.h +++ b/modules/terrain_editor/terrain_mesh_generator.h @@ -38,6 +38,7 @@ protected: public: void push_task(Rect2 area, Ref mesh, size_t side_points, Callable callback = Callable()); void add_primitive(Ref primitive); + void insert_primitive(Ref primitive, int idx); void remove_primitive(Ref primitive); void set_primitives(Array array); Array get_primitives() const; diff --git a/project/ui/primitive_inspectors/base_primitive_inspector.tscn b/project/ui/primitive_inspectors/base_primitive_inspector.tscn index 036195fc..c4307c02 100644 --- a/project/ui/primitive_inspectors/base_primitive_inspector.tscn +++ b/project/ui/primitive_inspectors/base_primitive_inspector.tscn @@ -22,6 +22,19 @@ func _on_item_selected(index: int) -> void: EditHistory.push_action(primitive.set_blend_mode.bind(index), primitive.set_blend_mode.bind(before)) " +[sub_resource type="GDScript" id="GDScript_ivj30"] +resource_name = "DeletePrimitive" +script/source = "extends Button + +@onready var terrain : TerrainMeshEditor = ($\"../../../..\" as LayerEditor).terrain +@onready var primitive : TerrainPrimitive = terrain.current_selected + +func _pressed() -> void: + var idx : int = terrain.primitives.find(primitive) + EditHistory.push_action(terrain.remove_primitive.bind(primitive), terrain.insert_primitive.bind(primitive, idx)) + terrain.current_selected = null +" + [node name="Primitive" type="MarginContainer" unique_id=905749607] offset_right = 302.0 offset_bottom = 230.0 @@ -76,6 +89,7 @@ layout_mode = 2 icon = ExtResource("1_h3glg") icon_alignment = 1 expand_icon = true +script = SubResource("GDScript_ivj30") [connection signal="item_selected" from="VBoxContainer/BlendModeSelector" to="VBoxContainer/BlendModeSelector" method="_on_item_selected"]