undo/redo for clearing special nodes

This commit is contained in:
2025-06-21 16:59:06 -05:00
parent 4dbec05b3c
commit c1b8ab90a0
2 changed files with 18 additions and 5 deletions

View File

@@ -425,7 +425,11 @@ static bool handle_rb_action(location the_point, bool option_hit) {
}
else if(j == size_before)
break;
else scenario.scen_specials[j] = cSpecial();
else{
undo_list.add(action_ptr(new aEditSpecial(0, j, scenario.scen_specials[j])));
update_edit_menu();
scenario.scen_specials[j] = cSpecial();
}
} else {
bool is_new = false;
if(j == size_before){
@@ -449,7 +453,11 @@ static bool handle_rb_action(location the_point, bool option_hit) {
}
else if(j == size_before)
break;
else current_terrain->specials[j] = cSpecial();
else{
undo_list.add(action_ptr(new aEditSpecial(1, j, current_terrain->specials[j])));
update_edit_menu();
current_terrain->specials[j] = cSpecial();
}
} else {
bool is_new = false;
if(j == size_before){
@@ -473,7 +481,11 @@ static bool handle_rb_action(location the_point, bool option_hit) {
}
else if(j == size_before)
break;
else town->specials[j] = cSpecial();
else{
undo_list.add(action_ptr(new aEditSpecial(2, j, town->specials[j])));
update_edit_menu();
town->specials[j] = cSpecial();
}
} else {
bool is_new = false;
if(j == size_before){

View File

@@ -808,8 +808,9 @@ class aEditSpecial : public cAction {
bool redo_me() override;
public:
aEditSpecial(short mode, size_t which, cSpecial old_spec, cSpecial new_spec) :
cAction("Edit Special Node"), mode(mode), which(which), old_spec(old_spec), new_spec(new_spec), which_town(cur_town), which_out(cur_out) {
}
cAction("Edit Special Node"), mode(mode), which(which), old_spec(old_spec), new_spec(new_spec), which_town(cur_town), which_out(cur_out) {}
aEditSpecial(short mode, size_t which, cSpecial old_spec) :
cAction("Clear Special Node"), mode(mode), which(which), old_spec(old_spec), new_spec(cSpecial()), which_town(cur_town), which_out(cur_out) {}
};
#endif