diff --git a/src/openrct2-ui/WindowManager.cpp b/src/openrct2-ui/WindowManager.cpp index fffab4c6c1..31e96a91fb 100644 --- a/src/openrct2-ui/WindowManager.cpp +++ b/src/openrct2-ui/WindowManager.cpp @@ -64,6 +64,8 @@ public: return window_land_rights_open(); case WC_MAIN_WINDOW: return window_main_open(); + case WC_MAP: + return window_map_open(); case WC_MAPGEN: return window_mapgen_open(); case WC_MULTIPLAYER: @@ -187,6 +189,15 @@ public: } } + void BroadcastIntent(Intent * intent) override + { + switch (intent->GetWindowClass()) { + case INTENT_ACTION_MAP: + window_map_reset(); + break; + } + } + void HandleKeyboard(bool isTitle) override { input_handle_keyboard(isTitle); diff --git a/src/openrct2-ui/input/keyboard_shortcut.c b/src/openrct2-ui/input/keyboard_shortcut.c index 31d807410e..0c9b3ab05d 100644 --- a/src/openrct2-ui/input/keyboard_shortcut.c +++ b/src/openrct2-ui/input/keyboard_shortcut.c @@ -457,7 +457,7 @@ static void shortcut_show_map() if (!(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) || gS6Info.editor_step == EDITOR_STEP_LANDSCAPE_EDITOR) if (!(gScreenFlags & (SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER))) - window_map_open(); + context_open_window(WC_MAP); } static void shortcut_screenshot() diff --git a/src/openrct2-ui/windows/GuestList.cpp b/src/openrct2-ui/windows/GuestList.cpp index f45b915dca..87f5ebe579 100644 --- a/src/openrct2-ui/windows/GuestList.cpp +++ b/src/openrct2-ui/windows/GuestList.cpp @@ -22,6 +22,7 @@ #include #include #include +#include enum { PAGE_INDIVIDUAL, @@ -298,7 +299,7 @@ static void window_guest_list_mouseup(rct_window *w, rct_widgetindex widgetIndex window_close(w); break; case WIDX_MAP: - window_map_open(); + context_open_window(WC_MAP); break; case WIDX_TRACKING: _window_guest_list_tracking_only = !_window_guest_list_tracking_only; diff --git a/src/openrct2/windows/Map.cpp b/src/openrct2-ui/windows/Map.cpp similarity index 98% rename from src/openrct2/windows/Map.cpp rename to src/openrct2-ui/windows/Map.cpp index 61bb0b750a..ae5d046bb8 100644 --- a/src/openrct2/windows/Map.cpp +++ b/src/openrct2-ui/windows/Map.cpp @@ -14,23 +14,24 @@ *****************************************************************************/ #pragma endregion -#include "../OpenRCT2.h" -#include "../core/Math.hpp" -#include "../core/Util.hpp" -#include "../core/Memory.hpp" -#include "../Context.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include -#include "../audio/audio.h" -#include "../cheats.h" -#include "../game.h" -#include "../input.h" -#include "../interface/land_tool.h" -#include "../interface/viewport.h" -#include "../interface/widget.h" -#include "../localisation/localisation.h" -#include "../world/entrance.h" -#include "../world/footpath.h" -#include "../world/scenery.h" +#include #define MAP_COLOUR_2(colourA, colourB) ((colourA << 8) | colourB) #define MAP_COLOUR(colour) MAP_COLOUR_2(colour, colour) @@ -203,7 +204,7 @@ static void map_window_screen_to_map(sint32 screenX, sint32 screenY, sint32 *map * * rct2: 0x0068C88A */ -void window_map_open() +rct_window * window_map_open() { rct_window *w; @@ -212,12 +213,12 @@ void window_map_open() if (w != nullptr) { w->selected_tab = 0; w->list_information_type = 0; - return; + return w; } _mapImageData = Memory::Allocate(); if (_mapImageData == nullptr) { - return; + return nullptr; } w = window_create_auto_pos(245, 259, &window_map_events, WC_MAP, WF_10); @@ -258,6 +259,8 @@ void window_map_open() // Reset land tool size gLandToolSize = 1; + + return w; } void window_map_reset() diff --git a/src/openrct2-ui/windows/StaffList.cpp b/src/openrct2-ui/windows/StaffList.cpp index 1473b3970c..eb33ee53d7 100644 --- a/src/openrct2-ui/windows/StaffList.cpp +++ b/src/openrct2-ui/windows/StaffList.cpp @@ -229,7 +229,7 @@ static void window_staff_list_mouseup(rct_window *w, rct_widgetindex widgetIndex } break; case WIDX_STAFF_LIST_MAP: - window_map_open(); + context_open_window(WC_MAP); break; case WIDX_STAFF_LIST_QUICK_FIRE: _quick_fire_mode ^= 1; diff --git a/src/openrct2-ui/windows/Window.h b/src/openrct2-ui/windows/Window.h index 84455e1719..695e0e832f 100644 --- a/src/openrct2-ui/windows/Window.h +++ b/src/openrct2-ui/windows/Window.h @@ -90,3 +90,6 @@ rct_window * window_loadsave_open(sint32 type, const char *defaultName); void window_loadsave_set_loadsave_callback(loadsave_callback cb); rct_window * window_track_place_open(const struct track_design_file_ref *tdFileRef); rct_window * window_track_manage_open(struct track_design_file_ref *tdFileRef); + +rct_window * window_map_open(); +void window_map_reset(); diff --git a/src/openrct2/Context.cpp b/src/openrct2/Context.cpp index 852fa693dc..0348828978 100644 --- a/src/openrct2/Context.cpp +++ b/src/openrct2/Context.cpp @@ -1016,6 +1016,12 @@ extern "C" return windowManager->OpenIntent(intent); } + void context_broadcast_intent(Intent * intent) + { + auto windowManager = GetContext()->GetUiContext()->GetWindowManager(); + windowManager->BroadcastIntent(intent); + } + rct_window * context_show_error(rct_string_id title, rct_string_id message) { auto windowManager = GetContext()->GetUiContext()->GetWindowManager(); diff --git a/src/openrct2/Context.h b/src/openrct2/Context.h index 505b0e1498..61b7ebde8a 100644 --- a/src/openrct2/Context.h +++ b/src/openrct2/Context.h @@ -206,6 +206,7 @@ extern "C" rct_window * context_open_window_view(uint8 view); rct_window * context_show_error(rct_string_id title, rct_string_id message); rct_window * context_open_intent(Intent * intent); + void context_broadcast_intent(Intent * intent); void context_input_handle_keyboard(bool isTitle); bool context_read_bmp(void * * outPixels, uint32 * outWidth, uint32 * outHeight, const utf8 * path); void context_quit(); diff --git a/src/openrct2/interface/window.h b/src/openrct2/interface/window.h index 183c49f562..0f2085d716 100644 --- a/src/openrct2/interface/window.h +++ b/src/openrct2/interface/window.h @@ -708,7 +708,6 @@ void window_top_toolbar_open(); void window_game_bottom_toolbar_open(); void window_game_bottom_toolbar_invalidate_news_item(); void window_track_list_open(ride_list_item item); -void window_map_open(); void window_guest_open(rct_peep* peep); rct_window *window_staff_open(rct_peep* peep); rct_window *window_ride_main_open(sint32 rideIndex); @@ -755,7 +754,6 @@ void window_align_tabs( rct_window *w, rct_widgetindex start_tab_id, rct_widgeti void window_new_ride_init_vars(); void window_new_ride_focus(ride_list_item rideItem); -void window_map_reset(); void window_map_tooltip_update_visibility(); void window_staff_list_init_vars(); diff --git a/src/openrct2/ui/DummyWindowManager.cpp b/src/openrct2/ui/DummyWindowManager.cpp index 383c902513..09f3d42252 100644 --- a/src/openrct2/ui/DummyWindowManager.cpp +++ b/src/openrct2/ui/DummyWindowManager.cpp @@ -26,6 +26,7 @@ namespace OpenRCT2 { namespace Ui rct_window * OpenDetails(uint8 type, sint32 id) override { return nullptr; } rct_window * ShowError(rct_string_id title, rct_string_id message) override { return nullptr; } rct_window * OpenIntent(Intent * intent) override { return nullptr; }; + void BroadcastIntent(Intent * intent) override { } void HandleKeyboard(bool isTitle) override { } std::string GetKeyboardShortcutString(sint32 shortcut) override { return std::string(); } }; diff --git a/src/openrct2/ui/WindowManager.h b/src/openrct2/ui/WindowManager.h index 212ab508c1..86f070f9be 100644 --- a/src/openrct2/ui/WindowManager.h +++ b/src/openrct2/ui/WindowManager.h @@ -39,6 +39,7 @@ namespace OpenRCT2 virtual rct_window * OpenView(uint8 view) abstract; virtual rct_window * OpenDetails(uint8 type, sint32 id) abstract; virtual rct_window * OpenIntent(Intent * intent) abstract; + virtual void BroadcastIntent(Intent * intent) abstract; virtual rct_window * ShowError(rct_string_id title, rct_string_id message) abstract; virtual void HandleKeyboard(bool isTitle) abstract; diff --git a/src/openrct2/windows/EditorBottomToolbar.cpp b/src/openrct2/windows/EditorBottomToolbar.cpp index afbfc7a062..cba2977683 100644 --- a/src/openrct2/windows/EditorBottomToolbar.cpp +++ b/src/openrct2/windows/EditorBottomToolbar.cpp @@ -162,7 +162,7 @@ void window_editor_bottom_toolbar_jump_back_to_landscape_editor() { reset_researched_scenery_items(); scenery_set_default_placement_configuration(); gS6Info.editor_step = EDITOR_STEP_LANDSCAPE_EDITOR; - window_map_open(); + context_open_window(WC_MAP); gfx_invalidate_screen(); } @@ -229,7 +229,7 @@ void window_editor_bottom_toolbar_jump_forward_from_object_selection() reset_researched_scenery_items(); scenery_set_default_placement_configuration(); gS6Info.editor_step = EDITOR_STEP_LANDSCAPE_EDITOR; - window_map_open(); + context_open_window(WC_MAP); gfx_invalidate_screen(); } } diff --git a/src/openrct2/windows/Intent.h b/src/openrct2/windows/Intent.h index 5fa5f88b9e..df4a1b7daa 100644 --- a/src/openrct2/windows/Intent.h +++ b/src/openrct2/windows/Intent.h @@ -60,6 +60,10 @@ extern "C" { INTENT_EXTRA_TRACK_DESIGN, }; + enum { + INTENT_ACTION_MAP, + }; + Intent *intent_create(rct_windowclass clss); void intent_release(Intent * intent); void intent_set_string(Intent *, uint32 key, utf8string value); diff --git a/src/openrct2/windows/TopToolbar.cpp b/src/openrct2/windows/TopToolbar.cpp index a17269fbf9..6e3ce91fe4 100644 --- a/src/openrct2/windows/TopToolbar.cpp +++ b/src/openrct2/windows/TopToolbar.cpp @@ -617,7 +617,7 @@ static void window_top_toolbar_dropdown(rct_window *w, rct_widgetindex widgetInd case WIDX_MAP: switch (dropdownIndex) { case 0: - window_map_open(); + context_open_window(WC_MAP); break; case 1: context_open_window(WC_VIEWPORT); diff --git a/src/openrct2/world/map.c b/src/openrct2/world/map.c index 0b2b161f28..20fff5a4a6 100644 --- a/src/openrct2/world/map.c +++ b/src/openrct2/world/map.c @@ -420,7 +420,10 @@ void map_init(sint32 size) map_update_tile_pointers(); map_remove_out_of_range_elements(); - window_map_reset(); + + Intent * intent = intent_create(INTENT_ACTION_MAP); + context_broadcast_intent(intent); + intent_release(intent); } /**