From f94970b05914f5560336d12444c1ad2c16cd7e0e Mon Sep 17 00:00:00 2001 From: Tulio Leao Date: Tue, 19 Nov 2019 18:19:09 -0300 Subject: [PATCH] Use CoordsXY/ScreenCoordsXY for viewport*_with_z Closes #10268 --- src/openrct2-ui/windows/TopToolbar.cpp | 13 ++++++++++--- src/openrct2/interface/Viewport.cpp | 27 ++++++++++++-------------- src/openrct2/interface/Viewport.h | 6 +++--- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index 55a5e3dc5a..49337fc216 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -1377,8 +1377,11 @@ static void sub_6E1F34( { int16_t z = gSceneryCtrlPressZ; - screen_get_map_xy_quadrant_with_z(x, y, z, grid_x, grid_y, &cl); - + auto mapCoords = screen_get_map_xy_quadrant_with_z({ x, y }, z, &cl); + if (!mapCoords) + return; + *grid_x = mapCoords->x; + *grid_y = mapCoords->y; // If SHIFT pressed if (gSceneryShiftPressed) { @@ -1556,7 +1559,11 @@ static void sub_6E1F34( else { int16_t z = gSceneryCtrlPressZ; - screen_get_map_xy_side_with_z(x, y, z, grid_x, grid_y, &cl); + auto mapCoords = screen_get_map_xy_side_with_z({ x, y }, z, &cl); + if (!mapCoords) + return; + *grid_x = mapCoords->x; + *grid_y = mapCoords->y; // If SHIFT pressed if (gSceneryShiftPressed) diff --git a/src/openrct2/interface/Viewport.cpp b/src/openrct2/interface/Viewport.cpp index 06f28f32e4..5d5fd1110b 100644 --- a/src/openrct2/interface/Viewport.cpp +++ b/src/openrct2/interface/Viewport.cpp @@ -1843,16 +1843,14 @@ CoordsXY screen_get_map_xy_quadrant(ScreenCoordsXY screenCoords, uint8_t* quadra * * rct2: 0x0068964B */ -void screen_get_map_xy_quadrant_with_z( - int16_t screenX, int16_t screenY, int16_t z, int16_t* mapX, int16_t* mapY, uint8_t* quadrant) +std::optional screen_get_map_xy_quadrant_with_z(ScreenCoordsXY screenCoords, int16_t z, uint8_t* quadrant) { - auto coords = screen_get_map_xy_with_z({ screenX, screenY }, z); - if (coords.x == LOCATION_NULL) - return; + auto mapCoords = screen_get_map_xy_with_z(screenCoords, z); + if (mapCoords.x == LOCATION_NULL) + return std::nullopt; - *quadrant = map_get_tile_quadrant(coords.x, coords.y); - *mapX = floor2(coords.x, 32); - *mapY = floor2(coords.y, 32); + *quadrant = map_get_tile_quadrant(mapCoords.x, mapCoords.y); + return CoordsXY(floor2(mapCoords.x, 32), floor2(mapCoords.y, 32)); } /** @@ -1873,15 +1871,14 @@ CoordsXY screen_get_map_xy_side(ScreenCoordsXY screenCoords, uint8_t* side) * * rct2: 0x006896DC */ -void screen_get_map_xy_side_with_z(int16_t screenX, int16_t screenY, int16_t z, int16_t* mapX, int16_t* mapY, uint8_t* side) +std::optional screen_get_map_xy_side_with_z(ScreenCoordsXY screenCoords, int16_t z, uint8_t* side) { - auto coords = screen_get_map_xy_with_z({ screenX, screenY }, z); - if (coords.x == LOCATION_NULL) - return; + auto mapCoords = screen_get_map_xy_with_z(screenCoords, z); + if (mapCoords.x == LOCATION_NULL) + return std::nullopt; - *side = map_get_tile_side(coords.x, coords.y); - *mapX = floor2(coords.x, 32); - *mapY = floor2(coords.y, 32); + *side = map_get_tile_side(mapCoords.x, mapCoords.y); + return CoordsXY(floor2(mapCoords.x, 32), floor2(mapCoords.y, 32)); } /** diff --git a/src/openrct2/interface/Viewport.h b/src/openrct2/interface/Viewport.h index 02ed412c7f..62f85c2b6a 100644 --- a/src/openrct2/interface/Viewport.h +++ b/src/openrct2/interface/Viewport.h @@ -10,6 +10,7 @@ #ifndef _VIEWPORT_H_ #define _VIEWPORT_H_ +#include "../core/Optional.hpp" #include "../world/Location.hpp" #include "Window.h" @@ -176,10 +177,9 @@ void viewport_invalidate(rct_viewport* viewport, int32_t left, int32_t top, int3 CoordsXY screen_get_map_xy(ScreenCoordsXY screenCoords, rct_viewport** viewport); CoordsXY screen_get_map_xy_with_z(ScreenCoordsXY screenCoords, int16_t z); CoordsXY screen_get_map_xy_quadrant(ScreenCoordsXY screenCoords, uint8_t* quadrant); -void screen_get_map_xy_quadrant_with_z( - int16_t screenX, int16_t screenY, int16_t z, int16_t* mapX, int16_t* mapY, uint8_t* quadrant); +std::optional screen_get_map_xy_quadrant_with_z(ScreenCoordsXY screenCoords, int16_t z, uint8_t* quadrant); CoordsXY screen_get_map_xy_side(ScreenCoordsXY screenCoords, uint8_t* side); -void screen_get_map_xy_side_with_z(int16_t screenX, int16_t screenY, int16_t z, int16_t* mapX, int16_t* mapY, uint8_t* side); +std::optional screen_get_map_xy_side_with_z(ScreenCoordsXY screenCoords, int16_t z, uint8_t* side); uint8_t get_current_rotation(); int16_t get_height_marker_offset();