From 7b92779e1348851e86936f067ff1df9280d1fe92 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Tue, 21 Jan 2025 14:35:31 -0600 Subject: [PATCH] make switching outdoor sections DRY --- src/scenedit/scen.actions.cpp | 9 ++------- src/scenedit/scen.appleevents.mm | 4 +--- src/scenedit/scen.main.cpp | 9 ++------- src/scenedit/scen.townout.cpp | 7 +++++++ src/scenedit/scen.townout.hpp | 1 + 5 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/scenedit/scen.actions.cpp b/src/scenedit/scen.actions.cpp index 052093b3..06888ff2 100644 --- a/src/scenedit/scen.actions.cpp +++ b/src/scenedit/scen.actions.cpp @@ -236,10 +236,7 @@ static bool handle_lb_action(location the_point) { file_to_load = nav_get_scenario(); if(!file_to_load.empty() && load_scenario(file_to_load, scenario)) { set_current_town(scenario.last_town_edited); - cur_out = scenario.last_out_edited; - current_terrain = scenario.outdoors[cur_out.x][cur_out.y]; - overall_mode = MODE_MAIN_SCREEN; - set_up_main_screen(); + set_current_out(scenario.last_out_edited); } else if(!file_to_load.empty()) // If we tried to load but failed, the scenario record is messed up, so boot to start screen. set_up_start_screen(); @@ -277,9 +274,7 @@ static bool handle_lb_action(location the_point) { case LB_LOAD_OUT: spot_hit = pick_out(cur_out, scenario); if(spot_hit != cur_out) { - cur_out = spot_hit; - current_terrain = scenario.outdoors[cur_out.x][cur_out.y]; - set_up_main_screen(); + set_current_out(spot_hit); } break; case LB_EDIT_OUT: diff --git a/src/scenedit/scen.appleevents.mm b/src/scenedit/scen.appleevents.mm index 3e089065..b1423ed8 100644 --- a/src/scenedit/scen.appleevents.mm +++ b/src/scenedit/scen.appleevents.mm @@ -52,11 +52,9 @@ void set_up_apple_events() { if(load_scenario(fileName, scenario)) { set_current_town(scenario.last_town_edited); - cur_out = scenario.last_out_edited; - current_terrain = scenario.outdoors[cur_out.x][cur_out.y]; change_made = false; ae_loading = true; - set_up_main_screen(); + set_current_out(scenario.last_out_edited); } return TRUE; } diff --git a/src/scenedit/scen.main.cpp b/src/scenedit/scen.main.cpp index bcfe1774..c9d2de1a 100644 --- a/src/scenedit/scen.main.cpp +++ b/src/scenedit/scen.main.cpp @@ -304,11 +304,9 @@ static void process_args(int argc, char* argv[]) { if(!file.empty()) { if(load_scenario(file, scenario)) { set_current_town(scenario.last_town_edited); - cur_out = scenario.last_out_edited; - current_terrain = scenario.outdoors[cur_out.x][cur_out.y]; change_made = false; ae_loading = true; - set_up_main_screen(); + set_current_out(scenario.last_out_edited); } else { std::cout << "Failed to load scenario: " << file << std::endl; } @@ -449,11 +447,8 @@ void handle_menu_choice(eMenu item_hit) { if(!file_to_load.empty() && load_scenario(file_to_load, scenario)) { cur_town = scenario.last_town_edited; town = scenario.towns[cur_town]; - cur_out = scenario.last_out_edited; - current_terrain = scenario.outdoors[cur_out.x][cur_out.y]; - overall_mode = MODE_MAIN_SCREEN; change_made = false; - set_up_main_screen(); + set_current_out(scenario.last_out_edited); } else if(!file_to_load.empty()) set_up_start_screen(); // Failed to load file, dump to start undo_list.clear(); diff --git a/src/scenedit/scen.townout.cpp b/src/scenedit/scen.townout.cpp index 58cd5dce..44439bfc 100644 --- a/src/scenedit/scen.townout.cpp +++ b/src/scenedit/scen.townout.cpp @@ -1296,6 +1296,13 @@ void set_current_town(int to) { scenario.last_town_edited = cur_town; } +void set_current_out(location out_sec) { + cur_out = out_sec; + scenario.last_out_edited = cur_out; + current_terrain = scenario.outdoors[cur_out.x][cur_out.y]; + set_up_main_screen(); +} + aNewTown::aNewTown(cTown* t) : cAction("add town") , theTown(t) diff --git a/src/scenedit/scen.townout.hpp b/src/scenedit/scen.townout.hpp index 64b64886..e3f89fce 100644 --- a/src/scenedit/scen.townout.hpp +++ b/src/scenedit/scen.townout.hpp @@ -23,3 +23,4 @@ void edit_placed_item(short which_i); void delete_last_town(); void edit_town_wand(); void set_current_town(int to); +void set_current_out(location out_sec);