Merge pull request #10273 from tupaschoal/with_z_coords

Use CoordsXY/ScreenCoordsXY for viewport*_with_z
This commit is contained in:
Duncan 2019-11-21 17:06:49 +00:00 committed by GitHub
commit dfe8335e91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 21 deletions

View File

@ -1377,8 +1377,14 @@ 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)
{
*grid_x = LOCATION_NULL;
return;
}
*grid_x = mapCoords->x;
*grid_y = mapCoords->y;
// If SHIFT pressed
if (gSceneryShiftPressed)
{
@ -1556,7 +1562,14 @@ 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)
{
*grid_x = LOCATION_NULL;
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();