undo/redo for scenario event timers

This commit is contained in:
2025-06-19 15:51:55 -05:00
parent d161252514
commit f0590563e1
3 changed files with 33 additions and 2 deletions

View File

@@ -3442,13 +3442,24 @@ static bool save_scenario_events(cDialog& me, std::string, eKeyMod) {
if(!me.toast(true)) return true;
cStack& stk = dynamic_cast<cStack&>(me["list"]);
auto old_timers = scenario.scenario_timers;
auto& new_timers = scenario.scenario_timers;
for(short i = 0; i < scenario.scenario_timers.size(); i++) {
stk.setPage(i / 10);
short fieldId = i % 10;
std::string id = std::to_string(fieldId + 1);
scenario.scenario_timers[i].time = stk["time" + id].getTextAsNum();
scenario.scenario_timers[i].node = stk["node" + id].getTextAsNum();
new_timers[i].time = stk["time" + id].getTextAsNum();
new_timers[i].node = stk["node" + id].getTextAsNum();
}
for(int i = 0; i < new_timers.size(); ++i){
if(old_timers[i].time != new_timers[i].time || old_timers[i].node != new_timers[i].node){
undo_list.add(action_ptr(new aEditScenTimers(old_timers, new_timers)));
update_edit_menu();
break;
}
}
return true;
}

View File

@@ -908,4 +908,14 @@ bool aEditTownVarying::undo_me() {
bool aEditTownVarying::redo_me() {
scenario.town_mods = new_varying;
return true;
}
bool aEditScenTimers::undo_me() {
scenario.scenario_timers = old_timers;
return true;
}
bool aEditScenTimers::redo_me() {
scenario.scenario_timers = new_timers;
return true;
}

View File

@@ -562,4 +562,14 @@ public:
cAction("Edit Town Varying Entrances"), old_varying(old_varying), new_varying(new_varying) {}
};
class aEditScenTimers : public cAction {
std::array<cTimer,20> old_timers;
std::array<cTimer,20> new_timers;
bool undo_me() override;
bool redo_me() override;
public:
aEditScenTimers(std::array<cTimer,20> old_timers, std::array<cTimer,20> new_timers) :
cAction("Edit Scenario Event Timers"), old_timers(old_timers), new_timers(new_timers) {}
};
#endif