diff --git a/src/openrct2-ui/input/MouseInput.cpp b/src/openrct2-ui/input/MouseInput.cpp index 1fb661c446..6c46c48cb0 100644 --- a/src/openrct2-ui/input/MouseInput.cpp +++ b/src/openrct2-ui/input/MouseInput.cpp @@ -1604,8 +1604,8 @@ void input_scroll_viewport(const ScreenCoordsXY& scrollScreenCoords) int32_t y = mainWindow->savedViewPos.y + viewport->view_height / 2; int32_t y_dy = mainWindow->savedViewPos.y + viewport->view_height / 2 + dy; - auto mapCoord = viewport_coord_to_map_coord(x, y, 0); - auto mapCoord_dy = viewport_coord_to_map_coord(x, y_dy, 0); + auto mapCoord = viewport_coord_to_map_coord({ x, y }, 0); + auto mapCoord_dy = viewport_coord_to_map_coord({ x, y_dy }, 0); // Check if we're crossing the boundary // Clamp to the map minimum value diff --git a/src/openrct2-ui/interface/ViewportInteraction.cpp b/src/openrct2-ui/interface/ViewportInteraction.cpp index 206d9783b6..da6c7bb0dd 100644 --- a/src/openrct2-ui/interface/ViewportInteraction.cpp +++ b/src/openrct2-ui/interface/ViewportInteraction.cpp @@ -694,7 +694,7 @@ CoordsXY sub_68A15E(const ScreenCoordsXY& screenCoords) { z = tile_element_height(mapPos); } - mapPos = viewport_coord_to_map_coord(initialVPPos.x, initialVPPos.y, z); + mapPos = viewport_coord_to_map_coord(initialVPPos, z); mapPos.x = std::clamp(mapPos.x, initialPos.x, initialPos.x + 31); mapPos.y = std::clamp(mapPos.y, initialPos.y, initialPos.y + 31); } diff --git a/src/openrct2-ui/scripting/ScViewport.hpp b/src/openrct2-ui/scripting/ScViewport.hpp index 2e85806a3d..850279d4d5 100644 --- a/src/openrct2-ui/scripting/ScViewport.hpp +++ b/src/openrct2-ui/scripting/ScViewport.hpp @@ -177,9 +177,8 @@ namespace OpenRCT2::Scripting auto viewport = GetViewport(); if (viewport != nullptr) { - auto centreX = viewport->viewPos.x + (viewport->view_width / 2); - auto centreY = viewport->viewPos.y + (viewport->view_height / 2); - auto coords = viewport_coord_to_map_coord(centreX, centreY, 24); + auto centre = viewport->viewPos + ScreenCoordsXY{ viewport->view_width / 2, viewport->view_height / 2 }; + auto coords = viewport_coord_to_map_coord(centre, 24); auto ctx = GetContext()->GetScriptEngine().GetContext(); auto obj = duk_push_object(ctx); diff --git a/src/openrct2/interface/Viewport.cpp b/src/openrct2/interface/Viewport.cpp index fec61b1b8d..e8b0a8b219 100644 --- a/src/openrct2/interface/Viewport.cpp +++ b/src/openrct2/interface/Viewport.cpp @@ -215,7 +215,7 @@ CoordsXYZ viewport_adjust_for_map_height(const ScreenCoordsXY& startCoords) CoordsXY pos{}; for (int32_t i = 0; i < 6; i++) { - pos = viewport_coord_to_map_coord(startCoords.x, startCoords.y, height); + pos = viewport_coord_to_map_coord(startCoords, height); height = tile_element_height(pos); // HACK: This is to prevent the x and y values being set to values outside @@ -547,7 +547,7 @@ void viewport_update_position(rct_window* window) auto viewportMidPoint = ScreenCoordsXY{ static_cast(window->savedViewPos.x + viewport->view_width / 2), static_cast(window->savedViewPos.y + viewport->view_height / 2) }; - auto mapCoord = viewport_coord_to_map_coord(viewportMidPoint.x, viewportMidPoint.y, 0); + auto mapCoord = viewport_coord_to_map_coord(viewportMidPoint, 0); // Clamp to the map minimum value int32_t at_map_edge = 0; @@ -1072,26 +1072,26 @@ ScreenCoordsXY screen_coord_to_viewport_coord(rct_viewport* viewport, const Scre return ret; } -CoordsXY viewport_coord_to_map_coord(int32_t x, int32_t y, int32_t z) +CoordsXY viewport_coord_to_map_coord(const ScreenCoordsXY& coords, int32_t z) { CoordsXY ret{}; switch (get_current_rotation()) { case 0: - ret.x = -x / 2 + y + z; - ret.y = x / 2 + y + z; + ret.x = -coords.x / 2 + coords.y + z; + ret.y = coords.x / 2 + coords.y + z; break; case 1: - ret.x = -x / 2 - y - z; - ret.y = -x / 2 + y + z; + ret.x = -coords.x / 2 - coords.y - z; + ret.y = -coords.x / 2 + coords.y + z; break; case 2: - ret.x = x / 2 - y - z; - ret.y = -x / 2 - y - z; + ret.x = coords.x / 2 - coords.y - z; + ret.y = -coords.x / 2 - coords.y - z; break; case 3: - ret.x = x / 2 + y + z; - ret.y = x / 2 - y - z; + ret.x = coords.x / 2 + coords.y + z; + ret.y = coords.x / 2 - coords.y - z; break; } return ret; @@ -1794,7 +1794,7 @@ std::optional screen_get_map_xy(const ScreenCoordsXY& screenCoords, rc for (int32_t i = 0; i < 5; i++) { int32_t z = tile_element_height(cursorMapPos); - cursorMapPos = viewport_coord_to_map_coord(start_vp_pos.x, start_vp_pos.y, z); + cursorMapPos = viewport_coord_to_map_coord(start_vp_pos, z); cursorMapPos.x = std::clamp(cursorMapPos.x, tileLoc.x, tileLoc.x + 31); cursorMapPos.y = std::clamp(cursorMapPos.y, tileLoc.y, tileLoc.y + 31); } @@ -1818,7 +1818,7 @@ std::optional screen_get_map_xy_with_z(const ScreenCoordsXY& screenCoo } auto vpCoords = screen_coord_to_viewport_coord(viewport, screenCoords); - auto mapPosition = viewport_coord_to_map_coord(vpCoords.x, vpCoords.y, z); + auto mapPosition = viewport_coord_to_map_coord(vpCoords, z); if (!map_is_location_valid(mapPosition)) { return std::nullopt; diff --git a/src/openrct2/interface/Viewport.h b/src/openrct2/interface/Viewport.h index 9d110852fe..1103bbaaa3 100644 --- a/src/openrct2/interface/Viewport.h +++ b/src/openrct2/interface/Viewport.h @@ -148,7 +148,7 @@ void viewport_paint( CoordsXYZ viewport_adjust_for_map_height(const ScreenCoordsXY& startCoords); ScreenCoordsXY screen_coord_to_viewport_coord(rct_viewport* viewport, const ScreenCoordsXY& screenCoords); -CoordsXY viewport_coord_to_map_coord(int32_t x, int32_t y, int32_t z); +CoordsXY viewport_coord_to_map_coord(const ScreenCoordsXY& coords, int32_t z); std::optional screen_pos_to_map_pos(const ScreenCoordsXY& screenCoords, int32_t* direction); void show_gridlines(); diff --git a/src/openrct2/world/Footpath.cpp b/src/openrct2/world/Footpath.cpp index 1bf7853bfc..42bdfced76 100644 --- a/src/openrct2/world/Footpath.cpp +++ b/src/openrct2/world/Footpath.cpp @@ -288,7 +288,7 @@ CoordsXY footpath_get_coordinates_from_pos(const ScreenCoordsXY& screenCoords, i { z = tile_element_height(position); } - position = viewport_coord_to_map_coord(start_vp_pos.x, start_vp_pos.y, z); + position = viewport_coord_to_map_coord(start_vp_pos, z); position.x = std::clamp(position.x, minPosition.x, maxPosition.x); position.y = std::clamp(position.y, minPosition.y, maxPosition.y); }