feat: deleting primitives at runtime
This commit is contained in:
parent
5f7e0853b1
commit
5953ff49a1
|
|
@ -24,6 +24,9 @@ void TerrainMeshGenerator::_bind_methods() {
|
||||||
ADD_SIGNAL(MethodInfo(sig_primitives_changed));
|
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))));
|
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("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() {
|
void TerrainMeshGenerator::enter_tree() {
|
||||||
|
|
@ -263,6 +266,12 @@ void TerrainMeshGenerator::add_primitive(Ref<TerrainPrimitive> primitive) {
|
||||||
set_primitives(list);
|
set_primitives(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TerrainMeshGenerator::insert_primitive(Ref<TerrainPrimitive> primitive, int idx) {
|
||||||
|
Array list = get_primitives();
|
||||||
|
list.insert(idx, primitive);
|
||||||
|
set_primitives(list);
|
||||||
|
}
|
||||||
|
|
||||||
void TerrainMeshGenerator::remove_primitive(Ref<TerrainPrimitive> primitive) {
|
void TerrainMeshGenerator::remove_primitive(Ref<TerrainPrimitive> primitive) {
|
||||||
Array list = get_primitives();
|
Array list = get_primitives();
|
||||||
int idx{ list.find(primitive) };
|
int idx{ list.find(primitive) };
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
void push_task(Rect2 area, Ref<ArrayMesh> mesh, size_t side_points, Callable callback = Callable());
|
void push_task(Rect2 area, Ref<ArrayMesh> mesh, size_t side_points, Callable callback = Callable());
|
||||||
void add_primitive(Ref<TerrainPrimitive> primitive);
|
void add_primitive(Ref<TerrainPrimitive> primitive);
|
||||||
|
void insert_primitive(Ref<TerrainPrimitive> primitive, int idx);
|
||||||
void remove_primitive(Ref<TerrainPrimitive> primitive);
|
void remove_primitive(Ref<TerrainPrimitive> primitive);
|
||||||
void set_primitives(Array array);
|
void set_primitives(Array array);
|
||||||
Array get_primitives() const;
|
Array get_primitives() const;
|
||||||
|
|
|
||||||
|
|
@ -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))
|
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]
|
[node name="Primitive" type="MarginContainer" unique_id=905749607]
|
||||||
offset_right = 302.0
|
offset_right = 302.0
|
||||||
offset_bottom = 230.0
|
offset_bottom = 230.0
|
||||||
|
|
@ -76,6 +89,7 @@ layout_mode = 2
|
||||||
icon = ExtResource("1_h3glg")
|
icon = ExtResource("1_h3glg")
|
||||||
icon_alignment = 1
|
icon_alignment = 1
|
||||||
expand_icon = true
|
expand_icon = true
|
||||||
|
script = SubResource("GDScript_ivj30")
|
||||||
|
|
||||||
[connection signal="item_selected" from="VBoxContainer/BlendModeSelector" to="VBoxContainer/BlendModeSelector" method="_on_item_selected"]
|
[connection signal="item_selected" from="VBoxContainer/BlendModeSelector" to="VBoxContainer/BlendModeSelector" method="_on_item_selected"]
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue