Use CoordsXY/ScreenCoordsXY for viewport*_with_z

Closes #10268
This commit is contained in:
Tulio Leao 2019-11-19 18:19:09 -03:00
parent 463ef9d218
commit f94970b059
3 changed files with 25 additions and 21 deletions

View File

@ -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)

View File

@ -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<CoordsXY> 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<CoordsXY> 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));
}
/**

View File

@ -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<CoordsXY> 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<CoordsXY> 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();