Merge pull request #71626 from groud/fix_add_tileset_layer_undo
Fixes TileSet layer addition not being undoable
This commit is contained in:
commit
35326d3dc5
1 changed files with 30 additions and 1 deletions
|
@ -462,6 +462,35 @@ void TileSetEditor::_move_tile_set_array_element(Object *p_undo_redo, Object *p_
|
|||
}
|
||||
|
||||
#define ADD_UNDO(obj, property) undo_redo_man->add_undo_property(obj, property, obj->get(property));
|
||||
|
||||
// Add undo method to adding array element.
|
||||
if (p_array_prefix == "occlusion_layer_") {
|
||||
if (p_from_index < 0) {
|
||||
undo_redo_man->add_undo_method(ed_tile_set, "remove_occlusion_layer", p_to_pos < 0 ? ed_tile_set->get_occlusion_layers_count() : p_to_pos);
|
||||
}
|
||||
} else if (p_array_prefix == "physics_layer_") {
|
||||
if (p_from_index < 0) {
|
||||
undo_redo_man->add_undo_method(ed_tile_set, "remove_physics_layer", p_to_pos < 0 ? ed_tile_set->get_physics_layers_count() : p_to_pos);
|
||||
}
|
||||
} else if (p_array_prefix == "terrain_set_") {
|
||||
if (p_from_index < 0) {
|
||||
undo_redo_man->add_undo_method(ed_tile_set, "remove_terrain_set", p_to_pos < 0 ? ed_tile_set->get_terrain_sets_count() : p_to_pos);
|
||||
}
|
||||
} else if (components.size() >= 2 && components[0].begins_with("terrain_set_") && components[0].trim_prefix("terrain_set_").is_valid_int() && components[1] == "terrain_") {
|
||||
int terrain_set = components[0].trim_prefix("terrain_set_").to_int();
|
||||
if (p_from_index < 0) {
|
||||
undo_redo_man->add_undo_method(ed_tile_set, "remove_terrain", terrain_set, p_to_pos < 0 ? ed_tile_set->get_terrains_count(terrain_set) : p_to_pos);
|
||||
}
|
||||
} else if (p_array_prefix == "navigation_layer_") {
|
||||
if (p_from_index < 0) {
|
||||
undo_redo_man->add_undo_method(ed_tile_set, "remove_navigation_layer", p_to_pos < 0 ? ed_tile_set->get_navigation_layers_count() : p_to_pos);
|
||||
}
|
||||
} else if (p_array_prefix == "custom_data_layer_") {
|
||||
if (p_from_index < 0) {
|
||||
undo_redo_man->add_undo_method(ed_tile_set, "remove_custom_data_layer", p_to_pos < 0 ? ed_tile_set->get_custom_data_layers_count() : p_to_pos);
|
||||
}
|
||||
}
|
||||
|
||||
// Save layers' properties.
|
||||
List<PropertyInfo> properties;
|
||||
ed_tile_set->get_property_list(&properties);
|
||||
|
@ -543,7 +572,7 @@ void TileSetEditor::_move_tile_set_array_element(Object *p_undo_redo, Object *p_
|
|||
}
|
||||
#undef ADD_UNDO
|
||||
|
||||
// Add do method.
|
||||
// Add do method to add/remove array element.
|
||||
if (p_array_prefix == "occlusion_layer_") {
|
||||
if (p_from_index < 0) {
|
||||
undo_redo_man->add_do_method(ed_tile_set, "add_occlusion_layer", p_to_pos);
|
||||
|
|
Loading…
Reference in a new issue