1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-18 12:33:17 +01:00

Get sprites and ride overall view working in large maps

This commit is contained in:
Ted John
2021-04-10 18:57:59 +01:00
parent a0a0703055
commit 036244b9f0
7 changed files with 18 additions and 26 deletions

View File

@@ -686,8 +686,7 @@ void window_guest_viewport_init(rct_window* w)
if (w->viewport != nullptr)
{
// Check all combos, for now skipping y and rot
if (focus.coordinate.x == w->viewport_focus_coordinates.x
&& (focus.coordinate.y & VIEWPORT_FOCUS_Y_MASK) == w->viewport_focus_coordinates.y
if (focus.coordinate.x == w->viewport_focus_coordinates.x && focus.coordinate.y == w->viewport_focus_coordinates.y
&& focus.coordinate.z == w->viewport_focus_coordinates.z
&& focus.coordinate.rotation == w->viewport_focus_coordinates.rotation)
return;
@@ -713,8 +712,7 @@ void window_guest_viewport_init(rct_window* w)
int32_t height = view_widget->height() - 1;
viewport_create(
w, screenPos, width, height, 0,
{ focus.coordinate.x, focus.coordinate.y & VIEWPORT_FOCUS_Y_MASK, focus.coordinate.z },
w, screenPos, width, height, 0, { focus.coordinate.x, focus.coordinate.y, focus.coordinate.z },
focus.sprite.type & VIEWPORT_FOCUS_TYPE_MASK, focus.sprite.sprite_id);
if (w->viewport != nullptr && reCreateViewport)
{

View File

@@ -778,7 +778,7 @@ static std::unique_ptr<TrackDesign> _trackDesign;
// Cached overall view for each ride
// (Re)calculated when the ride window is opened
struct ride_overall_view {
int16_t x, y, z;
int32_t x, y, z;
uint8_t zoom;
};
@@ -1641,7 +1641,7 @@ static void window_ride_init_viewport(rct_window* w)
if (w->viewport != nullptr)
{
if (focus.coordinate.x == w->viewport_focus_coordinates.x
&& (focus.coordinate.y & VIEWPORT_FOCUS_Y_MASK) == w->viewport_focus_coordinates.y
&& focus.coordinate.y == w->viewport_focus_coordinates.y
&& focus.coordinate.z == w->viewport_focus_coordinates.z
&& focus.coordinate.rotation == w->viewport_focus_coordinates.rotation
&& focus.coordinate.zoom == w->viewport_focus_coordinates.zoom && focus.coordinate.width == w->width
@@ -1677,7 +1677,7 @@ static void window_ride_init_viewport(rct_window* w)
int32_t height = view_widget->height() - 1;
viewport_create(
w, screenPos, width, height, focus.coordinate.zoom,
{ focus.coordinate.x, focus.coordinate.y & VIEWPORT_FOCUS_Y_MASK, focus.coordinate.z },
{ focus.coordinate.x, focus.coordinate.y, focus.coordinate.z },
focus.sprite.type & VIEWPORT_FOCUS_TYPE_MASK, focus.sprite.sprite_id);
w->flags |= WF_NO_SCROLLING;

View File

@@ -203,9 +203,9 @@ constexpr auto WINDOW_SCROLL_UNDEFINED = std::numeric_limits<uint16_t>::max();
struct coordinate_focus
{
int16_t var_480;
int16_t x; // 0x482
int16_t y; // 0x484 & VIEWPORT_FOCUS_Y_MASK
int16_t z; // 0x486
int32_t x; // 0x482
int32_t y; // 0x484
int32_t z; // 0x486
uint8_t rotation; // 0x488
uint8_t zoom; // 0x489
int16_t width;
@@ -230,7 +230,6 @@ enum VIEWPORT_FOCUS_TYPE : uint8_t
VIEWPORT_FOCUS_TYPE_COORDINATE = (1 << 6),
VIEWPORT_FOCUS_TYPE_SPRITE = (1 << 7)
};
#define VIEWPORT_FOCUS_Y_MASK 0x3FFF
struct viewport_focus
{

View File

@@ -30,7 +30,7 @@ void rct_window::ScrollToViewport()
else
{
newCoords.x = viewport_focus_coordinates.x;
newCoords.y = viewport_focus_coordinates.y & VIEWPORT_FOCUS_Y_MASK;
newCoords.y = viewport_focus_coordinates.y;
newCoords.z = viewport_focus_coordinates.z;
}

View File

@@ -24,13 +24,8 @@
* Paint Quadrant
* rct2: 0x0069E8B0
*/
void sprite_paint_setup(paint_session* session, const uint16_t x, const uint16_t y)
void sprite_paint_setup(paint_session* session, int32_t x, int32_t y)
{
if ((x & 0xe000) | (y & 0xe000))
{
return;
}
if (gTrackDesignSaveMode || (session->ViewFlags & VIEWPORT_FLAG_INVISIBLE_SPRITES))
{
return;

View File

@@ -14,7 +14,7 @@
struct paint_session;
void sprite_paint_setup(paint_session* session, const uint16_t x, const uint16_t y);
void sprite_paint_setup(paint_session* session, int32_t x, int32_t y);
template<typename T> void PaintEntity(paint_session* session, const T* entity, int32_t imageDirection);

View File

@@ -30,18 +30,18 @@ struct SpriteBase
uint8_t sprite_height_negative;
uint16_t sprite_index;
uint16_t flags;
int16_t x;
int16_t y;
int16_t z;
int32_t x;
int32_t y;
int32_t z;
// Width from centre of sprite to edge
uint8_t sprite_width;
// Height from centre of sprite to top
uint8_t sprite_height_positive;
// Screen Coordinates of sprite
int16_t sprite_left;
int16_t sprite_top;
int16_t sprite_right;
int16_t sprite_bottom;
int32_t sprite_left;
int32_t sprite_top;
int32_t sprite_right;
int32_t sprite_bottom;
uint8_t sprite_direction;