1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-20 21:43:06 +01:00

Refactor get_map_coordinates_from_pos_window (#10109)

* Refactor get_map_coordinates_from_pos_window

This changes get_map_coordinates_from_pos_window to use the
ScreenCoordsXY and CoordsXY structs instead of bare ints as suggested
in #10065

* Use default constructor.

The default constructor initializes the coordinates to (0, 0) anyway so
doing that explicitly is redundant.

* Fix parentheses

* Fix formatting issues

* Manually fix clang formatting

Apparently my version of clang-format doesn't behave properly so I am
manually making the changes that CI suggests.
This commit is contained in:
Alan Berndt
2019-11-01 13:57:44 -07:00
committed by Duncan
parent 834e8da379
commit a4181d10f4
2 changed files with 34 additions and 15 deletions

View File

@@ -1624,25 +1624,41 @@ void get_map_coordinates_from_pos(
void get_map_coordinates_from_pos_window(
rct_window* window, int32_t screenX, int32_t screenY, int32_t flags, int16_t* x, int16_t* y, int32_t* interactionType,
TileElement** tileElement, rct_viewport** viewport)
{
ScreenCoordsXY screenCoords(screenX, screenY);
CoordsXY mapCoords;
get_map_coordinates_from_pos_window(window, screenCoords, flags, mapCoords, interactionType, tileElement, viewport);
if (x != nullptr)
*x = mapCoords.x;
if (y != nullptr)
*y = mapCoords.y;
}
void get_map_coordinates_from_pos_window(
rct_window* window, ScreenCoordsXY screenCoords, int32_t flags, CoordsXY& mapCoords, int32_t* interactionType,
TileElement** tileElement, rct_viewport** viewport)
{
_interactionFlags = flags & 0xFFFF;
_interactionSpriteType = 0;
if (window != nullptr && window->viewport != nullptr)
{
rct_viewport* myviewport = window->viewport;
screenX -= (int32_t)myviewport->x;
screenY -= (int32_t)myviewport->y;
if (screenX >= 0 && screenX < (int32_t)myviewport->width && screenY >= 0 && screenY < (int32_t)myviewport->height)
screenCoords.x -= (int32_t)myviewport->x;
screenCoords.y -= (int32_t)myviewport->y;
if (screenCoords.x >= 0 && screenCoords.x < (int32_t)myviewport->width && screenCoords.y >= 0
&& screenCoords.y < (int32_t)myviewport->height)
{
screenX <<= myviewport->zoom;
screenY <<= myviewport->zoom;
screenX += (int32_t)myviewport->view_x;
screenY += (int32_t)myviewport->view_y;
screenCoords.x <<= myviewport->zoom;
screenCoords.y <<= myviewport->zoom;
screenCoords.x += (int32_t)myviewport->view_x;
screenCoords.y += (int32_t)myviewport->view_y;
_viewportDpi1.zoom_level = myviewport->zoom;
screenX &= (0xFFFF << myviewport->zoom) & 0xFFFF;
screenY &= (0xFFFF << myviewport->zoom) & 0xFFFF;
_viewportDpi1.x = screenX;
_viewportDpi1.y = screenY;
screenCoords.x &= (0xFFFF << myviewport->zoom) & 0xFFFF;
screenCoords.y &= (0xFFFF << myviewport->zoom) & 0xFFFF;
_viewportDpi1.x = screenCoords.x;
_viewportDpi1.y = screenCoords.y;
rct_drawpixelinfo* dpi = &_viewportDpi2;
dpi->y = _viewportDpi1.y;
dpi->height = 1;
@@ -1661,10 +1677,10 @@ void get_map_coordinates_from_pos_window(
}
if (interactionType != nullptr)
*interactionType = _interactionSpriteType;
if (x != nullptr)
*x = _interactionMapX;
if (y != nullptr)
*y = _interactionMapY;
mapCoords.x = _interactionMapX;
mapCoords.y = _interactionMapY;
if (tileElement != nullptr)
*tileElement = _interaction_element;
}

View File

@@ -157,6 +157,9 @@ void get_map_coordinates_from_pos(
void get_map_coordinates_from_pos_window(
rct_window* window, int32_t screenX, int32_t screenY, int32_t flags, int16_t* x, int16_t* y, int32_t* interactionType,
TileElement** tileElement, rct_viewport** viewport);
void get_map_coordinates_from_pos_window(
rct_window* window, ScreenCoordsXY screenCoords, int32_t flags, CoordsXY& mapCoords, int32_t* interactionType,
TileElement** tileElement, rct_viewport** viewport);
int32_t viewport_interaction_get_item_left(int32_t x, int32_t y, viewport_interaction_info* info);
int32_t viewport_interaction_left_over(int32_t x, int32_t y);