undo/redo for scenario event timers
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
}
|
@@ -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
|
Reference in New Issue
Block a user