From fb946e5ef53adfa5f54dca855578e3053be11eaa Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Wed, 9 Apr 2025 12:24:37 -0500 Subject: [PATCH] scenedit don't repeat prompt about shifting to outdoor section --- src/scenedit/scen.actions.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/scenedit/scen.actions.cpp b/src/scenedit/scen.actions.cpp index 2bac405d..fc593985 100644 --- a/src/scenedit/scen.actions.cpp +++ b/src/scenedit/scen.actions.cpp @@ -1848,7 +1848,11 @@ void handle_keystroke(sf::Event event) { mouse_button_held = false; } +// Don't repeatedly prompt when the designer scrolls out of bounds and says no to shifting +bool did_out_of_bounds_prompt = false; + static bool handle_outdoor_sec_shift(int dx, int dy){ + if(did_out_of_bounds_prompt) return false; if(editing_town) return false; int new_x = cur_out.x + dx; int new_y = cur_out.y + dy; @@ -1857,11 +1861,13 @@ static bool handle_outdoor_sec_shift(int dx, int dy){ if(new_y < 0) return true; if(new_y >= scenario.outdoors.height()) return true; + did_out_of_bounds_prompt = true; cChoiceDlog shift_prompt("shift-outdoor-section", {"yes", "no"}); location new_out_sec = { new_x, new_y }; shift_prompt->getControl("out-sec").setText(boost::lexical_cast(new_out_sec)); if(shift_prompt.show() == "yes"){ + did_out_of_bounds_prompt = false; int last_cen_x = cen_x; int last_cen_y = cen_y; set_current_out(new_out_sec, true); @@ -1909,7 +1915,8 @@ void handle_editor_screen_shift(int dx, int dy) { out_of_bounds = true; } - if(out_of_bounds){ + if(out_of_bounds && !did_out_of_bounds_prompt){ + did_out_of_bounds_prompt = true; // In town, prompt whether to go back to outdoor entrance location std::vector town_entrances = scenario.find_town_entrances(cur_town); if(town_entrances.size() == 1){ @@ -1919,6 +1926,7 @@ void handle_editor_screen_shift(int dx, int dy) { if(shift_prompt.show() == "yes"){ set_current_out(only_entrance.out_sec, true); + did_out_of_bounds_prompt = false; start_out_edit(); cen_x = only_entrance.loc.x; cen_y = only_entrance.loc.y; @@ -1936,6 +1944,7 @@ void handle_editor_screen_shift(int dx, int dy) { cStringChoice dlog(entrance_strings, "Shift to one of this town's entrances in the outdoors?"); size_t choice = dlog.show(-1); if(choice >= 0 && choice < town_entrances.size()){ + did_out_of_bounds_prompt = false; town_entrance_t entrance = town_entrances[choice]; set_current_out(entrance.out_sec, true); start_out_edit(); @@ -1947,6 +1956,9 @@ void handle_editor_screen_shift(int dx, int dy) { } } + if(!out_of_bounds) + did_out_of_bounds_prompt = false; + cen_x = minmax(min, max, cen_x + dx); cen_y = minmax(min, max, cen_y + dy); }