From 430bf482f29c1f4c514a905c364a597fc15ae9e2 Mon Sep 17 00:00:00 2001 From: Marijn van der Werf Date: Fri, 5 Jan 2018 23:31:56 +0100 Subject: [PATCH] Add viewport getter --- src/openrct2/Editor.cpp | 2 +- src/openrct2/Game.cpp | 13 +++++++------ src/openrct2/drawing/LightFX.cpp | 7 ++++--- src/openrct2/interface/Console.cpp | 5 +++-- src/openrct2/interface/Screenshot.cpp | 5 +++-- src/openrct2/interface/Window.cpp | 10 ++++++++++ src/openrct2/ride/Ride.cpp | 5 +++-- src/openrct2/world/MoneyEffect.cpp | 2 +- 8 files changed, 32 insertions(+), 17 deletions(-) diff --git a/src/openrct2/Editor.cpp b/src/openrct2/Editor.cpp index 615cd93576..c226834fb0 100644 --- a/src/openrct2/Editor.cpp +++ b/src/openrct2/Editor.cpp @@ -441,7 +441,7 @@ namespace Editor static void FinaliseMainView() { rct_window * w = window_get_main(); - rct_viewport * viewport = w->viewport; + rct_viewport * viewport = window_get_viewport(w); w->viewport_target_sprite = SPRITE_INDEX_NULL; w->saved_view_x = gSavedViewX; diff --git a/src/openrct2/Game.cpp b/src/openrct2/Game.cpp index 63080b2f1c..2869636ac0 100644 --- a/src/openrct2/Game.cpp +++ b/src/openrct2/Game.cpp @@ -1320,19 +1320,20 @@ void game_load_init() if (mainWindow != nullptr) { + rct_viewport * viewport = window_get_viewport(mainWindow); mainWindow->viewport_target_sprite = SPRITE_INDEX_NULL; mainWindow->saved_view_x = gSavedViewX; mainWindow->saved_view_y = gSavedViewY; - uint8 zoomDifference = gSavedViewZoom - mainWindow->viewport->zoom; - mainWindow->viewport->zoom = gSavedViewZoom; + uint8 zoomDifference = gSavedViewZoom - viewport->zoom; + viewport->zoom = gSavedViewZoom; gCurrentRotation = gSavedViewRotation; if (zoomDifference != 0) { - mainWindow->viewport->view_width <<= zoomDifference; - mainWindow->viewport->view_height <<= zoomDifference; + viewport->view_width <<= zoomDifference; + viewport->view_height <<= zoomDifference; } - mainWindow->saved_view_x -= mainWindow->viewport->view_width >> 1; - mainWindow->saved_view_y -= mainWindow->viewport->view_height >> 1; + mainWindow->saved_view_x -= viewport->view_width >> 1; + mainWindow->saved_view_y -= viewport->view_height >> 1; // Make sure the viewport has correct coordinates set. viewport_update_position(mainWindow); diff --git a/src/openrct2/drawing/LightFX.cpp b/src/openrct2/drawing/LightFX.cpp index 5591dc8a16..64f39b8902 100644 --- a/src/openrct2/drawing/LightFX.cpp +++ b/src/openrct2/drawing/LightFX.cpp @@ -456,10 +456,11 @@ void lightfx_update_viewport_settings() { rct_window *mainWindow = window_get_main(); if (mainWindow) { - _current_view_x_back = mainWindow->viewport->view_x; - _current_view_y_back = mainWindow->viewport->view_y; + rct_viewport * viewport = window_get_viewport(mainWindow); + _current_view_x_back = viewport->view_x; + _current_view_y_back = viewport->view_y; _current_view_rotation_back = get_current_rotation(); - _current_view_zoom_back = mainWindow->viewport->zoom; + _current_view_zoom_back = viewport->zoom; } } diff --git a/src/openrct2/interface/Console.cpp b/src/openrct2/interface/Console.cpp index 4c7a6a69e7..849c7bd1ba 100644 --- a/src/openrct2/interface/Console.cpp +++ b/src/openrct2/interface/Console.cpp @@ -147,7 +147,7 @@ void console_update() // When scrolling the map, the console pixels get copied... therefore invalidate the screen rct_window *mainWindow = window_get_main(); if (mainWindow != nullptr) { - rct_viewport *mainViewport = mainWindow->viewport; + rct_viewport *mainViewport = window_get_viewport(mainWindow); if (mainViewport != nullptr) { if (_lastMainViewportX != mainViewport->view_x || _lastMainViewportY != mainViewport->view_y) { _lastMainViewportX = mainViewport->view_x; @@ -834,7 +834,8 @@ static sint32 cc_get(const utf8 **argv, sint32 argc) sint32 interactionType; rct_tile_element *tileElement; LocationXY16 mapCoord = { 0 }; - get_map_coordinates_from_pos(w->viewport->view_width / 2, w->viewport->view_height / 2, VIEWPORT_INTERACTION_MASK_TERRAIN, &mapCoord.x, &mapCoord.y, &interactionType, &tileElement, nullptr); + rct_viewport * viewport = window_get_viewport(w); + get_map_coordinates_from_pos(viewport->view_width / 2, viewport->view_height / 2, VIEWPORT_INTERACTION_MASK_TERRAIN, &mapCoord.x, &mapCoord.y, &interactionType, &tileElement, nullptr); mapCoord.x -= 16; mapCoord.x /= 32; mapCoord.y -= 16; diff --git a/src/openrct2/interface/Screenshot.cpp b/src/openrct2/interface/Screenshot.cpp index fa41f79a1a..5512e4716f 100644 --- a/src/openrct2/interface/Screenshot.cpp +++ b/src/openrct2/interface/Screenshot.cpp @@ -178,8 +178,9 @@ void screenshot_giant() sint32 originalZoom = 0; rct_window *mainWindow = window_get_main(); - if (mainWindow != nullptr && mainWindow->viewport != nullptr) - originalZoom = mainWindow->viewport->zoom; + rct_viewport * vp = window_get_viewport(mainWindow); + if (mainWindow != nullptr && vp != nullptr) + originalZoom = vp->zoom; sint32 rotation = originalRotation; sint32 zoom = originalZoom; diff --git a/src/openrct2/interface/Window.cpp b/src/openrct2/interface/Window.cpp index 3b9375f029..30f2818f3a 100644 --- a/src/openrct2/interface/Window.cpp +++ b/src/openrct2/interface/Window.cpp @@ -2693,4 +2693,14 @@ void window_unfollow_sprite(rct_window * w) w->viewport_target_sprite = SPRITE_INDEX_NULL; } +rct_viewport * window_get_viewport(rct_window * w) +{ + if (w == nullptr) + { + return nullptr; + } + + return w->viewport; +} + } diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index bd4621613d..f44637444e 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -7607,8 +7607,9 @@ void ride_crash(uint8 rideIndex, uint8 vehicleIndex) rct_window * w = context_open_intent(intent); intent_release(intent); - if (w != nullptr && w->viewport != nullptr) { - w->viewport->flags |= VIEWPORT_FLAG_SOUND_ON; + rct_viewport * viewport = window_get_viewport(w); + if (w != nullptr && viewport != nullptr) { + viewport->flags |= VIEWPORT_FLAG_SOUND_ON; } } diff --git a/src/openrct2/world/MoneyEffect.cpp b/src/openrct2/world/MoneyEffect.cpp index 74807ef868..b812461abf 100644 --- a/src/openrct2/world/MoneyEffect.cpp +++ b/src/openrct2/world/MoneyEffect.cpp @@ -84,7 +84,7 @@ void money_effect_create(money32 value) if (mainWindow == nullptr) return; - rct_viewport * mainViewport = mainWindow->viewport; + rct_viewport * mainViewport = window_get_viewport(mainWindow); screen_get_map_xy( mainViewport->x + (mainViewport->width / 2), mainViewport->y + (mainViewport->height / 2),