diff --git a/src/openrct2-ui/WindowManager.cpp b/src/openrct2-ui/WindowManager.cpp index ffd4713e52..f5b24d03ae 100644 --- a/src/openrct2-ui/WindowManager.cpp +++ b/src/openrct2-ui/WindowManager.cpp @@ -25,6 +25,11 @@ using namespace OpenRCT2::Ui; class WindowManager final : public IWindowManager { public: + void Init() override + { + window_guest_list_init_vars(); + } + rct_window * OpenWindow(rct_windowclass wc) override { switch (wc) { @@ -147,6 +152,21 @@ public: return window_error_open(title, message); } + rct_window * OpenIntent(Intent * intent) override + { + switch(intent->GetWindowClass()) { + case WC_FIRE_PROMPT: + return window_staff_fire_prompt_open((rct_peep*)intent->GetPointerExtra(INTENT_EXTRA_3)); + case WC_INSTALL_TRACK: + return window_install_track_open(intent->GetStringExtra(INTENT_EXTRA_2)); + case WC_GUEST_LIST: + return window_guest_list_open_with_filter(intent->GetSIntExtra(INTENT_EXTRA_0), intent->GetSIntExtra(INTENT_EXTRA_1)); + + default: + return nullptr; + } + } + 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 0aa27ddfae..8f37bfbdfd 100644 --- a/src/openrct2-ui/input/keyboard_shortcut.c +++ b/src/openrct2-ui/input/keyboard_shortcut.c @@ -427,7 +427,7 @@ static void shortcut_show_guest_list() return; if (!(gScreenFlags & (SCREEN_FLAGS_SCENARIO_EDITOR | SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER))) { - window_guest_list_open(); + context_open_window(WC_GUEST_LIST); } } diff --git a/src/openrct2/windows/GuestList.cpp b/src/openrct2-ui/windows/GuestList.cpp similarity index 98% rename from src/openrct2/windows/GuestList.cpp rename to src/openrct2-ui/windows/GuestList.cpp index 164620e3d0..ad37b5ef4f 100644 --- a/src/openrct2/windows/GuestList.cpp +++ b/src/openrct2-ui/windows/GuestList.cpp @@ -14,13 +14,13 @@ *****************************************************************************/ #pragma endregion -#include "../config/Config.h" +#include -#include "../game.h" -#include "../interface/widget.h" -#include "../localisation/localisation.h" -#include "../sprites.h" -#include "dropdown.h" +#include +#include +#include +#include +#include enum { PAGE_INDIVIDUAL, @@ -156,12 +156,6 @@ static void get_arguments_from_peep(rct_peep *peep, uint32 *argument_1, uint32* void window_guest_list_init_vars() { - // rct2: 0x0068F083 - gNextGuestNumber = 1; - _window_guest_list_last_find_groups_tick = 0xFFFFFFFF; - _window_guest_list_selected_filter = 0xFF; - - // rct2: 0x0068F050 _window_guest_list_selected_tab = 0; _window_guest_list_selected_view = 0; _window_guest_list_last_find_groups_tick = 0xFFFFFFFF; @@ -173,14 +167,14 @@ void window_guest_list_init_vars() * * rct2: 0x006992E3 */ -void window_guest_list_open() +rct_window * window_guest_list_open() { rct_window* window; // Check if window is already open window = window_bring_to_front_by_class(WC_GUEST_LIST); if (window != nullptr) - return; + return window; window = window_create_auto_pos(350, 330, &window_guest_list_events, WC_GUEST_LIST, WF_10 | WF_RESIZABLE); window->widgets = window_guest_list_widgets; @@ -210,6 +204,8 @@ void window_guest_list_open() window->min_height = 330; window->max_width = 500; window->max_height = 450; + + return window; } /** @@ -218,9 +214,9 @@ void window_guest_list_open() * * @param index The number of the ride or index of the thought */ -void window_guest_list_open_with_filter(sint32 type, sint32 index) +rct_window * window_guest_list_open_with_filter(sint32 type, sint32 index) { - window_guest_list_open(); + rct_window * w = window_guest_list_open(); _window_guest_list_selected_page = 0; _window_guest_list_num_pages = 1; @@ -286,6 +282,8 @@ void window_guest_list_open_with_filter(sint32 type, sint32 index) break; } } + + return w; } /** diff --git a/src/openrct2/windows/InstallTrack.cpp b/src/openrct2-ui/windows/InstallTrack.cpp similarity index 96% rename from src/openrct2/windows/InstallTrack.cpp rename to src/openrct2-ui/windows/InstallTrack.cpp index d33bf82da5..6f0c337801 100644 --- a/src/openrct2/windows/InstallTrack.cpp +++ b/src/openrct2-ui/windows/InstallTrack.cpp @@ -14,18 +14,18 @@ *****************************************************************************/ #pragma endregion -#include "../Context.h" -#include "../object/ObjectManager.h" -#include "../ride/TrackDesignRepository.h" -#include "../core/Math.hpp" -#include "../core/Memory.hpp" +#include +#include +#include +#include +#include -#include "../audio/audio.h" -#include "../interface/widget.h" -#include "../localisation/localisation.h" -#include "../platform/platform.h" -#include "../sprites.h" -#include "../util/util.h" +#include +#include +#include +#include +#include +#include enum { WIDX_BACKGROUND, @@ -105,22 +105,22 @@ static void window_install_track_design(rct_window *w); * * rct2: 0x006D386D */ -void window_install_track_open(const utf8 *path) +rct_window * window_install_track_open(const utf8 *path) { _trackDesign = track_design_open(path); if (_trackDesign == nullptr) { context_show_error(STR_UNABLE_TO_LOAD_FILE, STR_NONE); - return; + return nullptr; } object_manager_unload_all_objects(); if (_trackDesign->type == RIDE_TYPE_NULL){ log_error("Failed to load track (ride type null): %s", path); - return; + return nullptr; } if (object_manager_load_object(&_trackDesign->vehicle_object) == nullptr) { log_error("Failed to load track (vehicle load fail): %s", path); - return; + return nullptr; } window_close_by_class(WC_EDITOR_OBJECT_SELECTION); @@ -147,6 +147,8 @@ void window_install_track_open(const utf8 *path) window_install_track_update_preview(); window_invalidate(w); + + return w; } /** diff --git a/src/openrct2/windows/StaffFirePrompt.cpp b/src/openrct2-ui/windows/StaffFirePrompt.cpp similarity index 88% rename from src/openrct2/windows/StaffFirePrompt.cpp rename to src/openrct2-ui/windows/StaffFirePrompt.cpp index 14ffb73393..8d727373af 100644 --- a/src/openrct2/windows/StaffFirePrompt.cpp +++ b/src/openrct2-ui/windows/StaffFirePrompt.cpp @@ -14,9 +14,9 @@ *****************************************************************************/ #pragma endregion -#include "../game.h" -#include "../interface/widget.h" -#include "../localisation/localisation.h" +#include +#include +#include #define WW 200 #define WH 100 @@ -74,20 +74,25 @@ static rct_window_event_list window_staff_fire_events = { nullptr }; /** Based off of rct2: 0x6C0A77 */ -void window_staff_fire_prompt_open(rct_peep* peep) +rct_window* window_staff_fire_prompt_open(rct_peep* peep) { + rct_window * w; + // Check if the confirm window already exists. - if (window_bring_to_front_by_number(WC_FIRE_PROMPT, peep->sprite_index)) { - return; + w = window_bring_to_front_by_number(WC_FIRE_PROMPT, peep->sprite_index); + if (w != nullptr) { + return w; } - rct_window* w = window_create_centred(WW, WH, &window_staff_fire_events, WC_FIRE_PROMPT, WF_TRANSPARENT); + w = window_create_centred(WW, WH, &window_staff_fire_events, WC_FIRE_PROMPT, WF_TRANSPARENT); w->widgets = window_staff_fire_widgets; w->enabled_widgets |= (1 << WIDX_CLOSE) | (1 << WIDX_YES) | (1 << WIDX_CANCEL); window_init_scroll_widgets(w); w->number = peep->sprite_index; + + return w; } diff --git a/src/openrct2/windows/TitleCommandEditor.cpp b/src/openrct2-ui/windows/TitleCommandEditor.cpp similarity index 97% rename from src/openrct2/windows/TitleCommandEditor.cpp rename to src/openrct2-ui/windows/TitleCommandEditor.cpp index 245c36e1e4..cc3ea46957 100644 --- a/src/openrct2/windows/TitleCommandEditor.cpp +++ b/src/openrct2-ui/windows/TitleCommandEditor.cpp @@ -14,18 +14,19 @@ *****************************************************************************/ #pragma endregion -#include "../OpenRCT2.h" -#include "../title/TitleSequence.h" -#include "../core/Memory.hpp" +#include +#include +#include +#include -#include "../game.h" -#include "../input.h" -#include "../interface/themes.h" -#include "../interface/viewport.h" -#include "../interface/widget.h" -#include "../localisation/localisation.h" -#include "../util/util.h" -#include "dropdown.h" +#include +#include +#include +#include +#include +#include +#include +#include typedef struct TITLE_COMMAND_ORDER { // originally a uint8, but the new millisecond wait times require a uint16. @@ -191,7 +192,7 @@ static uint8 get_zoom() return zoom; } -static void _window_title_command_editor_open(TitleSequence * sequence, sint32 index, bool insert) +void window_title_command_editor_open(TitleSequence * sequence, sint32 index, bool insert) { _sequence = sequence; @@ -593,11 +594,3 @@ static void window_title_command_editor_paint(rct_window *w, rct_drawpixelinfo * } } } - -extern "C" -{ - void window_title_command_editor_open(TitleSequence * sequence, sint32 index, bool insert) - { - _window_title_command_editor_open(sequence, index, insert); - } -} diff --git a/src/openrct2/windows/TitleEditor.cpp b/src/openrct2-ui/windows/TitleEditor.cpp similarity index 98% rename from src/openrct2/windows/TitleEditor.cpp rename to src/openrct2-ui/windows/TitleEditor.cpp index ee99ab60cd..adcc1d33cb 100644 --- a/src/openrct2/windows/TitleEditor.cpp +++ b/src/openrct2-ui/windows/TitleEditor.cpp @@ -14,24 +14,25 @@ *****************************************************************************/ #pragma endregion -#include "../config/Config.h" -#include "../FileClassifier.h" -#include "../OpenRCT2.h" -#include "../ParkImporter.h" -#include "../scenario/ScenarioSources.h" -#include "../title/TitleScreen.h" -#include "../title/TitleSequence.h" -#include "../title/TitleSequenceManager.h" -#include "../title/TitleSequencePlayer.h" -#include "../Context.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include -#include "../game.h" -#include "../input.h" -#include "../interface/widget.h" -#include "../localisation/localisation.h" -#include "../sprites.h" -#include "../util/util.h" -#include "dropdown.h" +#include +#include +#include +#include +#include +#include +#include enum WINDOW_TITLE_EDITOR_TAB { WINDOW_TITLE_EDITOR_TAB_PRESETS, @@ -215,7 +216,7 @@ static sint32 window_title_editor_tab_sprites[] = { SPR_TAB_STATS_0 }; -static void _window_title_editor_open(sint32 tab) +void window_title_editor_open(sint32 tab) { rct_window* window; @@ -1037,11 +1038,3 @@ static void window_title_editor_rename_park(size_t index, const utf8 * name) TileSequenceSave(_editingTitleSequence); } } - -extern "C" -{ - void window_title_editor_open(sint32 tab) - { - _window_title_editor_open(tab); - } -} diff --git a/src/openrct2/windows/TitleScenarioSelect.cpp b/src/openrct2-ui/windows/TitleScenarioSelect.cpp similarity index 98% rename from src/openrct2/windows/TitleScenarioSelect.cpp rename to src/openrct2-ui/windows/TitleScenarioSelect.cpp index cbb36f6bd8..52c6e9e3e1 100644 --- a/src/openrct2/windows/TitleScenarioSelect.cpp +++ b/src/openrct2-ui/windows/TitleScenarioSelect.cpp @@ -14,18 +14,18 @@ *****************************************************************************/ #pragma endregion -#include "../config/Config.h" -#include "../scenario/ScenarioRepository.h" -#include "../scenario/ScenarioSources.h" -#include "../core/Memory.hpp" +#include +#include +#include +#include -#include "../audio/audio.h" -#include "../localisation/date.h" -#include "../localisation/localisation.h" -#include "../sprites.h" -#include "../interface/widget.h" -#include "../interface/themes.h" -#include "../util/util.h" +#include +#include +#include +#include +#include +#include +#include #define INITIAL_NUM_UNLOCKED_SCENARIOS 5 diff --git a/src/openrct2-ui/windows/Window.h b/src/openrct2-ui/windows/Window.h index df57870494..3d771f504a 100644 --- a/src/openrct2-ui/windows/Window.h +++ b/src/openrct2-ui/windows/Window.h @@ -72,4 +72,13 @@ rct_window * window_sign_small_open(rct_windownumber number); rct_window * window_player_open(uint8 id); rct_window * window_new_campaign_open(sint16 campaignType); +rct_window * window_install_track_open(const char* path); +void window_guest_list_init_vars(); +rct_window * window_guest_list_open(); +rct_window * window_guest_list_open_with_filter(sint32 type, sint32 index); +rct_window * window_staff_fire_prompt_open(rct_peep* peep); +void window_title_editor_open(sint32 tab); +void window_title_command_editor_open(struct TitleSequence * sequence, sint32 command, bool insert); +void window_scenarioselect_open(scenarioselect_callback callback); + rct_window * window_error_open(rct_string_id title, rct_string_id message); diff --git a/src/openrct2/Context.cpp b/src/openrct2/Context.cpp index acf8bf9636..2f92977300 100644 --- a/src/openrct2/Context.cpp +++ b/src/openrct2/Context.cpp @@ -864,6 +864,11 @@ namespace OpenRCT2 extern "C" { + void context_init() + { + GetContext()->GetUiContext()->GetWindowManager()->Init(); + } + bool context_load_park_from_file(const utf8 * path) { return GetContext()->LoadParkFromFile(path); @@ -1005,6 +1010,12 @@ extern "C" return windowManager->OpenDetails(type, id); } + rct_window * context_open_intent(Intent * intent) + { + auto windowManager = GetContext()->GetUiContext()->GetWindowManager(); + return windowManager->OpenIntent(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 89c6e180f2..505b0e1498 100644 --- a/src/openrct2/Context.h +++ b/src/openrct2/Context.h @@ -17,9 +17,7 @@ #pragma once #include "common.h" - -#include "interface/window.h" - +#include "windows/Intent.h" typedef struct CursorState { @@ -182,6 +180,7 @@ enum extern "C" { #endif + void context_init(); void context_setcurrentcursor(sint32 cursor); void context_hide_cursor(); void context_show_cursor(); @@ -206,6 +205,7 @@ extern "C" rct_window * context_open_detail_window(uint8 type, sint32 id); 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_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/game.c b/src/openrct2/game.c index 8b4ebffc33..7b126ebbe4 100644 --- a/src/openrct2/game.c +++ b/src/openrct2/game.c @@ -1438,8 +1438,10 @@ void game_init_all(sint32 mapSize) gInMapInitCode = false; + gNextGuestNumber = 1; + + context_init(); window_new_ride_init_vars(); - window_guest_list_init_vars(); scenery_set_default_placement_configuration(); window_tile_inspector_clear_clipboard(); load_palette(); diff --git a/src/openrct2/interface/console.c b/src/openrct2/interface/console.c index 3f834584c1..29b2d5c872 100644 --- a/src/openrct2/interface/console.c +++ b/src/openrct2/interface/console.c @@ -1196,7 +1196,7 @@ static sint32 cc_open(const utf8 **argv, sint32 argc) { } else if (strcmp(argv[0], "themes") == 0) { context_open_window(WC_THEMES); } else if (strcmp(argv[0], "title_sequences") == 0) { - window_title_editor_open(0); + context_open_window(WC_TITLE_EDITOR); } else if (invalidTitle) { console_writeline_error("Cannot open this window in the title screen."); } else { diff --git a/src/openrct2/interface/window.h b/src/openrct2/interface/window.h index 4168310323..d64dbed7a9 100644 --- a/src/openrct2/interface/window.h +++ b/src/openrct2/interface/window.h @@ -709,14 +709,10 @@ void window_resize_gui_scenario_editor(sint32 width, sint32 height); void window_top_toolbar_open(); void window_game_bottom_toolbar_open(); void window_game_bottom_toolbar_invalidate_news_item(); -void window_scenarioselect_open(scenarioselect_callback callback); void window_track_list_open(ride_list_item item); -void window_guest_list_open(); -void window_guest_list_open_with_filter(sint32 type, sint32 index); void window_map_open(); void window_guest_open(rct_peep* peep); rct_window *window_staff_open(rct_peep* peep); -void window_staff_fire_prompt_open(rct_peep* peep); rct_window *window_ride_main_open(sint32 rideIndex); rct_window *window_ride_open_station(sint32 rideIndex, sint32 stationIndex); rct_window *window_ride_open_track(rct_map_element *mapElement); @@ -735,7 +731,6 @@ void window_maze_construction_update_pressed_widgets(); void window_track_place_open(const struct track_design_file_ref *tdFileRef); rct_window *window_new_ride_open(); rct_window *window_new_ride_open_research(); -void window_install_track_open(const char* path); void window_network_status_open(const char* text, close_callback onClose); void window_network_status_close(); void window_network_status_open_password(); @@ -746,8 +741,6 @@ void window_research_funding_page_paint(rct_window *w, rct_drawpixelinfo *dpi, r void window_scenery_open(); void window_track_manage_open(struct track_design_file_ref *tdFileRef); -void window_title_editor_open(sint32 tab); -void window_title_command_editor_open(struct TitleSequence * sequence, sint32 command, bool insert); void window_tile_inspector_open(); void window_tile_inspector_clear_clipboard(); void window_text_input_open(rct_window* call_w, rct_widgetindex call_widget, rct_string_id title, rct_string_id description, rct_string_id existing_text, uintptr_t existing_args, sint32 maxLength); @@ -761,7 +754,6 @@ rct_window * window_editor_main_open(); void window_editor_bottom_toolbar_open(); void window_editor_object_selection_open(); -void window_guest_list_init_vars(); void window_bubble_list_item(rct_window* w, sint32 item_position); void window_align_tabs( rct_window *w, rct_widgetindex start_tab_id, rct_widgetindex end_tab_id ); diff --git a/src/openrct2/management/news_item.c b/src/openrct2/management/news_item.c index 7db587a3b4..cf705507d9 100644 --- a/src/openrct2/management/news_item.c +++ b/src/openrct2/management/news_item.c @@ -369,8 +369,14 @@ void news_item_open_subject(sint32 type, sint32 subject) window_event_mouse_down_call(window, WC_SCENERY__WIDX_SCENERY_TAB_1 + subject); break; case NEWS_ITEM_PEEPS: - window_guest_list_open_with_filter(GLFT_GUESTS_THINKING_X, subject);; + { + Intent *intent = intent_create(WC_GUEST_LIST); + intent_set_sint(intent, INTENT_EXTRA_0, GLFT_GUESTS_THINKING_X); + intent_set_sint(intent, INTENT_EXTRA_1, subject); + context_open_intent(intent); + intent_release(intent); break; + } case NEWS_ITEM_AWARD: context_open_window_view(WV_PARK_AWARDS); break; diff --git a/src/openrct2/ui/DummyWindowManager.cpp b/src/openrct2/ui/DummyWindowManager.cpp index 7aa429cbcf..383c902513 100644 --- a/src/openrct2/ui/DummyWindowManager.cpp +++ b/src/openrct2/ui/DummyWindowManager.cpp @@ -20,10 +20,12 @@ namespace OpenRCT2 { namespace Ui { class DummyWindowManager final : public IWindowManager { + void Init() override {}; rct_window * OpenWindow(rct_windowclass wc) override { return nullptr; } rct_window * OpenView(uint8 view) override { return nullptr; } 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 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 7a47ffd9d5..212ab508c1 100644 --- a/src/openrct2/ui/WindowManager.h +++ b/src/openrct2/ui/WindowManager.h @@ -19,6 +19,7 @@ #ifdef __cplusplus #include +#include "../windows/Intent.h" #include "../common.h" #include "../interface/window.h" @@ -33,9 +34,11 @@ namespace OpenRCT2 interface IWindowManager { virtual ~IWindowManager() = default; + virtual void Init() abstract; virtual rct_window * OpenWindow(rct_windowclass wc) abstract; virtual rct_window * OpenView(uint8 view) abstract; virtual rct_window * OpenDetails(uint8 type, sint32 id) abstract; + virtual rct_window * OpenIntent(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/Intent.cpp b/src/openrct2/windows/Intent.cpp index 330161964d..74c48705c4 100644 --- a/src/openrct2/windows/Intent.cpp +++ b/src/openrct2/windows/Intent.cpp @@ -2,7 +2,7 @@ Intent::Intent(rct_windowclass windowclass) { -this->_Class = windowclass; + this->_Class = windowclass; } Intent * @@ -33,3 +33,46 @@ Intent::putExtra(uint32 key, utf8string value) return this; } +rct_windowclass +Intent::GetWindowClass() +{ + return this->_Class; +} +void * +Intent::GetPointerExtra(uint32 key) +{ + return (void *) _Pointers.at(key); +} +uint32 +Intent::GetUIntExtra(uint32 key) +{ + return _UInts.at(key); +} +sint32 +Intent::GetSIntExtra(uint32 key) +{ + return _SInts.at(key); +} +utf8string +Intent::GetStringExtra(uint32 key) +{ + return _Strings.at(key); +} + +extern "C" { + Intent *intent_create(rct_windowclass clss) + { + return new Intent(clss); + } + + void intent_release(Intent *intent) + { + delete intent; + } + + void intent_set_sint(Intent * intent, uint32 key, sint32 value) + { + intent->putExtra(key, value); + } +} + diff --git a/src/openrct2/windows/Intent.h b/src/openrct2/windows/Intent.h index 758165b3ff..b8d09a1bad 100644 --- a/src/openrct2/windows/Intent.h +++ b/src/openrct2/windows/Intent.h @@ -1,11 +1,20 @@ #ifndef OPENRCT2_INTENT_H #define OPENRCT2_INTENT_H -#include #include "../common.h" +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus #include "../interface/window.h" +#ifdef __cplusplus +} +#endif // __cplusplus + #ifdef __cplusplus + +#include + class Intent { private: @@ -16,6 +25,11 @@ private: std::map _Pointers; public: explicit Intent(rct_windowclass windowclass); + rct_windowclass GetWindowClass(); + void * GetPointerExtra(uint32 key); + utf8string GetStringExtra(uint32 key); + uint32 GetUIntExtra(uint32 key); + sint32 GetSIntExtra(uint32 key); Intent * putExtra(uint32 key, uint32 value); Intent * putExtra(uint32 key, uintptr_t value); Intent * putExtra(uint32 key, sint32 value); @@ -26,13 +40,26 @@ public: extern "C" { #endif // __cplusplus - typedef int intent; +#ifndef __cplusplus + typedef int Intent; +#endif // !__cplusplus - intent *intent_create(rct_windowclass clss); - void intent_set_string(intent *, uint32 key, utf8string value); - void intent_set_pointer(intent *, uint32 key, uintptr_t value); - void intent_set_sint(intent *, uint32 key, sint32 value); - void intent_set_uint(intent *, uint32 key, uint32 value); + enum + { + INTENT_EXTRA_0, + INTENT_EXTRA_1, + + INTENT_EXTRA_2, + + INTENT_EXTRA_3, + }; + + Intent *intent_create(rct_windowclass clss); + void intent_release(Intent * intent); + void intent_set_string(Intent *, uint32 key, utf8string value); + void intent_set_pointer(Intent *, uint32 key, uintptr_t value); + void intent_set_sint(Intent *, uint32 key, sint32 value); + void intent_set_uint(Intent *, uint32 key, uint32 value); #ifdef __cplusplus } #endif // __cplusplus diff --git a/src/openrct2/windows/LoadSave.cpp b/src/openrct2/windows/LoadSave.cpp index 1e42ab1950..9a1e5226d6 100644 --- a/src/openrct2/windows/LoadSave.cpp +++ b/src/openrct2/windows/LoadSave.cpp @@ -831,13 +831,15 @@ static void window_loadsave_select(rct_window *w, const char *path) break; } case (LOADSAVETYPE_LOAD | LOADSAVETYPE_TRACK) : + { save_path(&gConfigGeneral.last_save_track_directory, pathBuffer); - auto intent = new Intent(WC_INSTALL_TRACK); - intent->putExtra(2, pathBuffer); - context_open_intent(intent); + auto intent = Intent(WC_INSTALL_TRACK); + intent.putExtra(INTENT_EXTRA_2, pathBuffer); + context_open_intent(&intent); window_close_by_class(WC_LOADSAVE); window_loadsave_invoke_callback(MODAL_RESULT_OK, pathBuffer); break; + } case (LOADSAVETYPE_SAVE | LOADSAVETYPE_TRACK) : { path_set_extension(pathBuffer, "td6", sizeof(pathBuffer)); diff --git a/src/openrct2/windows/Ride.cpp b/src/openrct2/windows/Ride.cpp index f34eb824f7..2e40920cb8 100644 --- a/src/openrct2/windows/Ride.cpp +++ b/src/openrct2/windows/Ride.cpp @@ -6222,9 +6222,8 @@ static void window_ride_income_paint(rct_window *w, rct_drawpixelinfo *dpi) */ static void window_ride_customer_mouseup(rct_window *w, rct_widgetindex widgetIndex) { - auto intent; - - switch (widgetIndex) { + switch (widgetIndex) + { case WIDX_CLOSE: window_close(w); break; @@ -6241,24 +6240,30 @@ static void window_ride_customer_mouseup(rct_window *w, rct_widgetindex widgetIn window_ride_set_page(w, widgetIndex - WIDX_TAB_1); break; case WIDX_SHOW_GUESTS_THOUGHTS: - intent = new Intent(WC_GUEST_LIST); - intent->putExtra(0, GLFT_GUESTS_THINKING_ABOUT_RIDE); - intent->putExtra(1, w->number); - context_open_intent(intent); + { + auto intent = Intent(WC_GUEST_LIST); + intent.putExtra(INTENT_EXTRA_0, GLFT_GUESTS_THINKING_ABOUT_RIDE); + intent.putExtra(INTENT_EXTRA_1, w->number); + context_open_intent(&intent); break; + } case WIDX_SHOW_GUESTS_ON_RIDE: - intent = new Intent(WC_GUEST_LIST); - intent->putExtra(0, GLFT_GUESTS_ON_RIDE); - intent->putExtra(1, w->number); - context_open_intent(intent); + { + auto intent = Intent(WC_GUEST_LIST); + intent.putExtra(INTENT_EXTRA_0, GLFT_GUESTS_ON_RIDE); + intent.putExtra(INTENT_EXTRA_1, w->number); + context_open_intent(&intent); break; + } case WIDX_SHOW_GUESTS_QUEUING: - intent = new Intent(WC_GUEST_LIST); - intent->putExtra(0, GLFT_GUESTS_IN_QUEUE); - intent->putExtra(1, w->number); - context_open_intent(intent); + { + auto intent = Intent(WC_GUEST_LIST); + intent.putExtra(INTENT_EXTRA_0, GLFT_GUESTS_IN_QUEUE); + intent.putExtra(INTENT_EXTRA_1, w->number); + context_open_intent(&intent); break; } + } } /** diff --git a/src/openrct2/windows/Staff.cpp b/src/openrct2/windows/Staff.cpp index 679cbbc0e5..67a529a78d 100644 --- a/src/openrct2/windows/Staff.cpp +++ b/src/openrct2/windows/Staff.cpp @@ -16,6 +16,7 @@ #include "../config/Config.h" #include "Intent.h" +#include "../Context.h" #include "../game.h" #include "../interface/viewport.h" @@ -469,10 +470,12 @@ void window_staff_overview_mouseup(rct_window *w, rct_widgetindex widgetIndex) } break; case WIDX_FIRE: - auto intent = new Intent(WC_FIRE_PROMPT); - intent->putExtra(4, (uintptr_t)peep); - context_open_intent(intent); + { + auto intent = Intent(WC_FIRE_PROMPT); + intent.putExtra(INTENT_EXTRA_3, (uintptr_t) peep); + context_open_intent(&intent); break; + } case WIDX_RENAME: window_text_input_open(w, widgetIndex, STR_STAFF_TITLE_STAFF_MEMBER_NAME, STR_STAFF_PROMPT_ENTER_NAME, peep->name_string_idx, peep->id, 32); break; diff --git a/src/openrct2/windows/TopToolbar.cpp b/src/openrct2/windows/TopToolbar.cpp index 147311d8db..9de9f632fc 100644 --- a/src/openrct2/windows/TopToolbar.cpp +++ b/src/openrct2/windows/TopToolbar.cpp @@ -355,7 +355,7 @@ static void window_top_toolbar_mouseup(rct_window *w, rct_widgetindex widgetInde context_open_window(WC_STAFF_LIST); break; case WIDX_GUESTS: - window_guest_list_open(); + context_open_window(WC_GUEST_LIST); break; case WIDX_FINANCES: context_open_window(WC_FINANCES);