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:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user