mirror of https://github.com/OpenRCT2/OpenRCT2.git
parent
98dbaae461
commit
805eec4153
|
@ -406,17 +406,17 @@ static void viewport_shift_pixels(
|
||||||
viewport_redraw_after_shift(dpi, window, viewport, x_diff, y_diff);
|
viewport_redraw_after_shift(dpi, window, viewport, x_diff, y_diff);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void viewport_move(int16_t x, int16_t y, rct_window* w, rct_viewport* viewport)
|
static void viewport_move(const ScreenCoordsXY& coords, rct_window* w, rct_viewport* viewport)
|
||||||
{
|
{
|
||||||
auto zoom = viewport->zoom;
|
auto zoom = viewport->zoom;
|
||||||
|
|
||||||
// Note: do not do the subtraction and then divide!
|
// Note: do not do the subtraction and then divide!
|
||||||
// Note: Due to arithmetic shift != /zoom a shift will have to be used
|
// Note: Due to arithmetic shift != /zoom a shift will have to be used
|
||||||
// hopefully when 0x006E7FF3 is finished this can be converted to /zoom.
|
// hopefully when 0x006E7FF3 is finished this can be converted to /zoom.
|
||||||
int16_t x_diff = (viewport->viewPos.x / viewport->zoom) - (x / viewport->zoom);
|
int16_t x_diff = (viewport->viewPos.x / viewport->zoom) - (coords.x / viewport->zoom);
|
||||||
int16_t y_diff = (viewport->viewPos.y / viewport->zoom) - (y / viewport->zoom);
|
int16_t y_diff = (viewport->viewPos.y / viewport->zoom) - (coords.y / viewport->zoom);
|
||||||
|
|
||||||
viewport->viewPos = { x, y };
|
viewport->viewPos = coords;
|
||||||
|
|
||||||
// If no change in viewing area
|
// If no change in viewing area
|
||||||
if ((!x_diff) && (!y_diff))
|
if ((!x_diff) && (!y_diff))
|
||||||
|
@ -543,10 +543,10 @@ void viewport_update_position(rct_window* window)
|
||||||
|
|
||||||
viewport_set_underground_flag(0, window, viewport);
|
viewport_set_underground_flag(0, window, viewport);
|
||||||
|
|
||||||
int16_t x = window->savedViewPos.x + viewport->view_width / 2;
|
auto viewportMidPoint = ScreenCoordsXY{ window->savedViewPos.x + viewport->view_width / 2,
|
||||||
int16_t y = window->savedViewPos.y + viewport->view_height / 2;
|
window->savedViewPos.y + viewport->view_height / 2 };
|
||||||
|
|
||||||
auto mapCoord = viewport_coord_to_map_coord(x, y, 0);
|
auto mapCoord = viewport_coord_to_map_coord(viewportMidPoint.x, viewportMidPoint.y, 0);
|
||||||
|
|
||||||
// Clamp to the map minimum value
|
// Clamp to the map minimum value
|
||||||
int32_t at_map_edge = 0;
|
int32_t at_map_edge = 0;
|
||||||
|
@ -582,45 +582,44 @@ void viewport_update_position(rct_window* window)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
x = window->savedViewPos.x;
|
auto windowCoords = window->savedViewPos;
|
||||||
y = window->savedViewPos.y;
|
|
||||||
if (window->flags & WF_SCROLLING_TO_LOCATION)
|
if (window->flags & WF_SCROLLING_TO_LOCATION)
|
||||||
{
|
{
|
||||||
// Moves the viewport if focusing in on an item
|
// Moves the viewport if focusing in on an item
|
||||||
uint8_t flags = 0;
|
uint8_t flags = 0;
|
||||||
x -= viewport->viewPos.x;
|
windowCoords.x -= viewport->viewPos.x;
|
||||||
if (x < 0)
|
if (windowCoords.x < 0)
|
||||||
{
|
{
|
||||||
x = -x;
|
windowCoords.x = -windowCoords.x;
|
||||||
flags |= 1;
|
flags |= 1;
|
||||||
}
|
}
|
||||||
y -= viewport->viewPos.y;
|
windowCoords.y -= viewport->viewPos.y;
|
||||||
if (y < 0)
|
if (windowCoords.y < 0)
|
||||||
{
|
{
|
||||||
y = -y;
|
windowCoords.y = -windowCoords.y;
|
||||||
flags |= 2;
|
flags |= 2;
|
||||||
}
|
}
|
||||||
x = (x + 7) / 8;
|
windowCoords.x = (windowCoords.x + 7) / 8;
|
||||||
y = (y + 7) / 8;
|
windowCoords.y = (windowCoords.y + 7) / 8;
|
||||||
|
|
||||||
// If we are at the final zoom position
|
// If we are at the final zoom position
|
||||||
if (!x && !y)
|
if (!windowCoords.x && !windowCoords.y)
|
||||||
{
|
{
|
||||||
window->flags &= ~WF_SCROLLING_TO_LOCATION;
|
window->flags &= ~WF_SCROLLING_TO_LOCATION;
|
||||||
}
|
}
|
||||||
if (flags & 1)
|
if (flags & 1)
|
||||||
{
|
{
|
||||||
x = -x;
|
windowCoords.x = -windowCoords.x;
|
||||||
}
|
}
|
||||||
if (flags & 2)
|
if (flags & 2)
|
||||||
{
|
{
|
||||||
y = -y;
|
windowCoords.y = -windowCoords.y;
|
||||||
}
|
}
|
||||||
x += viewport->viewPos.x;
|
windowCoords.x += viewport->viewPos.x;
|
||||||
y += viewport->viewPos.y;
|
windowCoords.y += viewport->viewPos.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
viewport_move(x, y, window, viewport);
|
viewport_move(windowCoords, window, viewport);
|
||||||
}
|
}
|
||||||
|
|
||||||
void viewport_update_sprite_follow(rct_window* window)
|
void viewport_update_sprite_follow(rct_window* window)
|
||||||
|
@ -641,7 +640,7 @@ void viewport_update_sprite_follow(rct_window* window)
|
||||||
if (centreLoc)
|
if (centreLoc)
|
||||||
{
|
{
|
||||||
window->savedViewPos = *centreLoc;
|
window->savedViewPos = *centreLoc;
|
||||||
viewport_move(centreLoc->x, centreLoc->y, window, window->viewport);
|
viewport_move(*centreLoc, window, window->viewport);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue