undo/redo for create/delete talk node
This commit is contained in:
@@ -534,6 +534,8 @@ static bool handle_rb_action(location the_point, bool option_hit) {
|
||||
if(option_hit) {
|
||||
if(j == size_before)
|
||||
break;
|
||||
undo_list.add(action_ptr(new aCreateDeleteTalkNode(false, cur_town, j, town->talking.talk_nodes[j])));
|
||||
update_edit_menu();
|
||||
town->talking.talk_nodes.erase(town->talking.talk_nodes.begin() + j);
|
||||
} else {
|
||||
bool is_new = false;
|
||||
@@ -541,8 +543,20 @@ static bool handle_rb_action(location the_point, bool option_hit) {
|
||||
is_new = true;
|
||||
town->talking.talk_nodes.emplace_back();
|
||||
}
|
||||
if((j = edit_talk_node(j)) >= 0 && is_new)
|
||||
town->talking.talk_nodes.erase(town->talking.talk_nodes.begin() + j);
|
||||
if((j = edit_talk_node(j)) >= 0){
|
||||
// Cancel create new
|
||||
if(is_new)
|
||||
town->talking.talk_nodes.erase(town->talking.talk_nodes.begin() + j);
|
||||
}
|
||||
// Create confirmed
|
||||
else if(is_new){
|
||||
undo_list.add(action_ptr(new aCreateDeleteTalkNode(true, cur_town, j, town->talking.talk_nodes[j])));
|
||||
update_edit_menu();
|
||||
}
|
||||
// Edit confirmed
|
||||
else{
|
||||
|
||||
}
|
||||
}
|
||||
start_dialogue_editing();
|
||||
if(size_before > town->talking.talk_nodes.size())
|
||||
|
@@ -1000,10 +1000,28 @@ bool aEditOutEncounter::redo_me() {
|
||||
|
||||
bool aEditPersonality::undo_me() {
|
||||
scenario.towns[town_num]->talking.people[which] = old_pers;
|
||||
// Show the change
|
||||
start_dialogue_editing();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool aEditPersonality::redo_me() {
|
||||
scenario.towns[town_num]->talking.people[which] = new_pers;
|
||||
// Show the change
|
||||
start_dialogue_editing();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool aCreateDeleteTalkNode::undo_me() {
|
||||
scenario.towns[town_num]->talking.talk_nodes.erase(scenario.towns[town_num]->talking.talk_nodes.begin() + which);
|
||||
// Show the change
|
||||
start_dialogue_editing();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool aCreateDeleteTalkNode::redo_me() {
|
||||
scenario.towns[town_num]->talking.talk_nodes.insert(scenario.towns[town_num]->talking.talk_nodes.begin() + which, node);
|
||||
// Show the change
|
||||
start_dialogue_editing();
|
||||
return true;
|
||||
}
|
@@ -674,4 +674,15 @@ public:
|
||||
cAction("Edit Personality"), town_num(town_num), which(which), old_pers(old_pers), new_pers(new_pers) {}
|
||||
};
|
||||
|
||||
class aCreateDeleteTalkNode : public cAction {
|
||||
size_t town_num;
|
||||
size_t which;
|
||||
cSpeech::cNode node;
|
||||
bool undo_me() override;
|
||||
bool redo_me() override;
|
||||
public:
|
||||
aCreateDeleteTalkNode(bool create, size_t town_num, size_t which, cSpeech::cNode node) :
|
||||
cAction(create ? "Create Talk Node" : "Delete Talk Node", !create), town_num(town_num), which(which), node(node) {}
|
||||
};
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user