From 2053ecb68824a9c494794a8b5a2c792b5027d2ee Mon Sep 17 00:00:00 2001 From: Matt Date: Sat, 15 Jun 2019 17:12:14 +0200 Subject: [PATCH] Refactor window_scroll_to_viewport to use rct_window::ScrollToViewport --- src/openrct2-ui/windows/Guest.cpp | 2 +- src/openrct2-ui/windows/Park.cpp | 2 +- src/openrct2-ui/windows/Ride.cpp | 2 +- src/openrct2-ui/windows/Staff.cpp | 2 +- src/openrct2/interface/Window.cpp | 32 ---------------------- src/openrct2/interface/Window.h | 1 - src/openrct2/interface/Window_internal.cpp | 30 ++++++++++++++++++++ src/openrct2/interface/Window_internal.h | 1 + 8 files changed, 35 insertions(+), 37 deletions(-) diff --git a/src/openrct2-ui/windows/Guest.cpp b/src/openrct2-ui/windows/Guest.cpp index cf92eb438f..74b446fcb0 100644 --- a/src/openrct2-ui/windows/Guest.cpp +++ b/src/openrct2-ui/windows/Guest.cpp @@ -719,7 +719,7 @@ void window_guest_overview_mouse_up(rct_window* w, rct_widgetindex widgetIndex) break; } case WIDX_LOCATE: - window_scroll_to_viewport(w); + w->ScrollToViewport(); break; case WIDX_TRACK: { diff --git a/src/openrct2-ui/windows/Park.cpp b/src/openrct2-ui/windows/Park.cpp index 79e4e5e909..666819d2d8 100644 --- a/src/openrct2-ui/windows/Park.cpp +++ b/src/openrct2-ui/windows/Park.cpp @@ -655,7 +655,7 @@ static void window_park_entrance_mouseup(rct_window* w, rct_widgetindex widgetIn context_open_window(WC_LAND_RIGHTS); break; case WIDX_LOCATE: - window_scroll_to_viewport(w); + w->ScrollToViewport(); break; case WIDX_RENAME: { diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index c45f226791..f0e1acce67 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -2047,7 +2047,7 @@ static void window_ride_main_mouseup(rct_window* w, rct_widgetindex widgetIndex) window_ride_rename(w); break; case WIDX_LOCATE: - window_scroll_to_viewport(w); + w->ScrollToViewport(); break; case WIDX_DEMOLISH: context_open_detail_window(WD_DEMOLISH_RIDE, w->number); diff --git a/src/openrct2-ui/windows/Staff.cpp b/src/openrct2-ui/windows/Staff.cpp index 91d15c58ab..dec6d228e2 100644 --- a/src/openrct2-ui/windows/Staff.cpp +++ b/src/openrct2-ui/windows/Staff.cpp @@ -459,7 +459,7 @@ void window_staff_overview_mouseup(rct_window* w, rct_widgetindex widgetIndex) window_staff_set_page(w, widgetIndex - WIDX_TAB_1); break; case WIDX_LOCATE: - window_scroll_to_viewport(w); + w->ScrollToViewport(); break; case WIDX_PICKUP: { diff --git a/src/openrct2/interface/Window.cpp b/src/openrct2/interface/Window.cpp index b8f7ff24e3..5a138b3692 100644 --- a/src/openrct2/interface/Window.cpp +++ b/src/openrct2/interface/Window.cpp @@ -804,38 +804,6 @@ rct_window* window_get_main() return nullptr; } -/** - * Based on - * rct2: 0x696ee9, 0x66842F, 0x006AF3B3 - */ -void window_scroll_to_viewport(rct_window* w) -{ - int32_t x, y, z; - rct_window* mainWindow; - assert(w != nullptr); - // In original checked to make sure x and y were not -1 as well. - if (w->viewport == nullptr || w->viewport_focus_coordinates.y == -1) - return; - - if (w->viewport_focus_sprite.type & VIEWPORT_FOCUS_TYPE_SPRITE) - { - rct_sprite* sprite = get_sprite(w->viewport_focus_sprite.sprite_id); - x = sprite->generic.x; - y = sprite->generic.y; - z = sprite->generic.z; - } - else - { - x = w->viewport_focus_coordinates.x; - y = w->viewport_focus_coordinates.y & VIEWPORT_FOCUS_Y_MASK; - z = w->viewport_focus_coordinates.z; - } - - mainWindow = window_get_main(); - if (mainWindow != nullptr) - window_scroll_to_location(mainWindow, x, y, z); -} - /** * * rct2: 0x006E7C9C diff --git a/src/openrct2/interface/Window.h b/src/openrct2/interface/Window.h index ad366dbf4e..4d3f455da3 100644 --- a/src/openrct2/interface/Window.h +++ b/src/openrct2/interface/Window.h @@ -631,7 +631,6 @@ void window_push_others_below(rct_window* w1); rct_window* window_get_main(); -void window_scroll_to_viewport(rct_window* w); void window_scroll_to_location(rct_window* w, int32_t x, int32_t y, int32_t z); void window_rotate_camera(rct_window* w, int32_t direction); void window_viewport_get_map_coords_by_cursor( diff --git a/src/openrct2/interface/Window_internal.cpp b/src/openrct2/interface/Window_internal.cpp index 244ff56e1f..bb55b8a8b8 100644 --- a/src/openrct2/interface/Window_internal.cpp +++ b/src/openrct2/interface/Window_internal.cpp @@ -1,7 +1,37 @@ #include "Window_internal.h" +#include "../world/Sprite.h" + void rct_window::SetLocation(int32_t newX, int32_t newY, int32_t newZ) { window_scroll_to_location(this, newX, newY, newZ); flags &= ~WF_SCROLLING_TO_LOCATION; } + +void rct_window::ScrollToViewport() +{ + int32_t newX, newY, newZ; + rct_window* mainWindow; + + // In original checked to make sure x and y were not -1 as well. + if (viewport == nullptr || viewport_focus_coordinates.y == -1) + return; + + if (viewport_focus_sprite.type & VIEWPORT_FOCUS_TYPE_SPRITE) + { + rct_sprite* sprite = get_sprite(viewport_focus_sprite.sprite_id); + newX = sprite->generic.x; + newY = sprite->generic.y; + newZ = sprite->generic.z; + } + else + { + newX = viewport_focus_coordinates.x; + newY = viewport_focus_coordinates.y & VIEWPORT_FOCUS_Y_MASK; + newZ = viewport_focus_coordinates.z; + } + + mainWindow = window_get_main(); + if (mainWindow != nullptr) + window_scroll_to_location(mainWindow, newX, newY, newZ); +} diff --git a/src/openrct2/interface/Window_internal.h b/src/openrct2/interface/Window_internal.h index 5337e03d1c..af70b943d6 100644 --- a/src/openrct2/interface/Window_internal.h +++ b/src/openrct2/interface/Window_internal.h @@ -103,6 +103,7 @@ struct rct_window uint16_t viewport_smart_follow_sprite; // Smart following of sprites. Handles setting viewport target sprite etc void SetLocation(int32_t x, int32_t y, int32_t z); + void ScrollToViewport(); }; // rct2: 0x01420078