1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-19 13:52:54 +01:00

Split paint item into element and entity

This commit is contained in:
Ted John
2022-03-04 01:33:08 +00:00
parent 79989a5e84
commit 8aafab2a70
26 changed files with 98 additions and 153 deletions

View File

@@ -65,6 +65,7 @@ static uint32_t _currentImageType;
InteractionInfo::InteractionInfo(const paint_struct* ps) InteractionInfo::InteractionInfo(const paint_struct* ps)
: Loc(ps->map_x, ps->map_y) : Loc(ps->map_x, ps->map_y)
, Element(ps->tileElement) , Element(ps->tileElement)
, Entity(ps->entity)
, SpriteType(ps->sprite_type) , SpriteType(ps->sprite_type)
{ {
} }

View File

@@ -84,11 +84,8 @@ struct InteractionInfo
InteractionInfo() = default; InteractionInfo() = default;
InteractionInfo(const paint_struct* ps); InteractionInfo(const paint_struct* ps);
CoordsXY Loc; CoordsXY Loc;
union TileElement* Element{};
{ EntityBase* Entity{};
TileElement* Element = nullptr;
EntityBase* Entity;
};
ViewportInteractionItem SpriteType = ViewportInteractionItem::None; ViewportInteractionItem SpriteType = ViewportInteractionItem::None;
}; };

View File

@@ -55,7 +55,7 @@ void EntityPaintSetup(paint_session& session, const CoordsXY& pos)
const bool highlightPathIssues = (session.ViewFlags & VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES); const bool highlightPathIssues = (session.ViewFlags & VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES);
for (const auto* spr : EntityTileList(pos)) for (auto* spr : EntityTileList(pos))
{ {
if (highlightPathIssues) if (highlightPathIssues)
{ {
@@ -73,17 +73,6 @@ void EntityPaintSetup(paint_session& session, const CoordsXY& pos)
} }
} }
if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_VEHICLES) && spr->Type == EntityType::Vehicle)
{
const auto veh = spr->As<Vehicle>();
if (veh != nullptr)
{
auto ride = get_ride(veh->ride);
if (ride != nullptr)
return;
}
}
const auto entityPos = spr->GetLocation(); const auto entityPos = spr->GetLocation();
// Only paint sprites that are below the clip height and inside the clip selection. // Only paint sprites that are below the clip height and inside the clip selection.
@@ -119,7 +108,7 @@ void EntityPaintSetup(paint_session& session, const CoordsXY& pos)
image_direction += spr->sprite_direction; image_direction += spr->sprite_direction;
image_direction &= 0x1F; image_direction &= 0x1F;
session.CurrentlyDrawnItem = spr; session.CurrentlyDrawnEntity = spr;
session.SpritePosition.x = entityPos.x; session.SpritePosition.x = entityPos.x;
session.SpritePosition.y = entityPos.y; session.SpritePosition.y = entityPos.y;
session.InteractionType = ViewportInteractionItem::Entity; session.InteractionType = ViewportInteractionItem::Entity;

View File

@@ -57,7 +57,8 @@ static void PaintAttachedPS(rct_drawpixelinfo* dpi, paint_struct* ps, uint32_t v
static void PaintPSImageWithBoundingBoxes(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId imageId, int32_t x, int32_t y); static void PaintPSImageWithBoundingBoxes(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId imageId, int32_t x, int32_t y);
static void PaintPSImage(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId imageId, int32_t x, int32_t y); static void PaintPSImage(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId imageId, int32_t x, int32_t y);
static ImageId PaintPSColourifyImage( static ImageId PaintPSColourifyImage(
ImageId imageId, ViewportInteractionItem spriteType, EntityType entityType, uint32_t viewFlags); ImageId imageId, ViewportInteractionItem spriteType, uint32_t viewFlags, const TileElement* tileElement,
const EntityBase* entity);
static int32_t RemapPositionToQuadrant(const paint_struct& ps, uint8_t rotation) static int32_t RemapPositionToQuadrant(const paint_struct& ps, uint8_t rotation)
{ {
@@ -193,7 +194,8 @@ static paint_struct* CreateNormalPaintStruct(
ps->sprite_type = session.InteractionType; ps->sprite_type = session.InteractionType;
ps->map_x = session.MapPosition.x; ps->map_x = session.MapPosition.x;
ps->map_y = session.MapPosition.y; ps->map_y = session.MapPosition.y;
ps->tileElement = reinterpret_cast<TileElement*>(const_cast<void*>(session.CurrentlyDrawnItem)); ps->tileElement = session.CurrentlyDrawnTileElement;
ps->entity = session.CurrentlyDrawnEntity;
return ps; return ps;
} }
@@ -483,17 +485,6 @@ void PaintSessionArrange(PaintSessionCore& session)
Guard::Assert(false); Guard::Assert(false);
} }
static EntityType GetEntityTypeFromPaintSession(const paint_struct* ps)
{
auto entityType = EntityType::Null;
auto* entity = reinterpret_cast<const EntityBase*>(ps->tileElement);
if (entity != nullptr)
{
entityType = entity->Type;
}
return entityType;
}
static void PaintDrawStruct(paint_session& session, paint_struct* ps) static void PaintDrawStruct(paint_session& session, paint_struct* ps)
{ {
rct_drawpixelinfo* dpi = &session.DPI; rct_drawpixelinfo* dpi = &session.DPI;
@@ -515,8 +506,7 @@ static void PaintDrawStruct(paint_session& session, paint_struct* ps)
} }
} }
auto entityType = GetEntityTypeFromPaintSession(ps); auto imageId = PaintPSColourifyImage(ps->image_id, ps->sprite_type, session.ViewFlags, ps->tileElement, ps->entity);
auto imageId = PaintPSColourifyImage(ps->image_id, ps->sprite_type, entityType, session.ViewFlags);
if (gPaintBoundingBoxes && dpi->zoom_level == ZoomLevel{ 0 }) if (gPaintBoundingBoxes && dpi->zoom_level == ZoomLevel{ 0 })
{ {
PaintPSImageWithBoundingBoxes(dpi, ps, imageId, x, y); PaintPSImageWithBoundingBoxes(dpi, ps, imageId, x, y);
@@ -566,8 +556,7 @@ static void PaintAttachedPS(rct_drawpixelinfo* dpi, paint_struct* ps, uint32_t v
{ {
auto screenCoords = ScreenCoordsXY{ attached_ps->x + ps->x, attached_ps->y + ps->y }; auto screenCoords = ScreenCoordsXY{ attached_ps->x + ps->x, attached_ps->y + ps->y };
auto entityType = GetEntityTypeFromPaintSession(ps); auto imageId = PaintPSColourifyImage(attached_ps->image_id, ps->sprite_type, viewFlags, ps->tileElement, ps->entity);
auto imageId = PaintPSColourifyImage(attached_ps->image_id, ps->sprite_type, entityType, viewFlags);
if (attached_ps->flags & PAINT_STRUCT_FLAG_IS_MASKED) if (attached_ps->flags & PAINT_STRUCT_FLAG_IS_MASKED)
{ {
gfx_draw_sprite_raw_masked(dpi, screenCoords, imageId, attached_ps->colour_image_id); gfx_draw_sprite_raw_masked(dpi, screenCoords, imageId, attached_ps->colour_image_id);
@@ -676,19 +665,20 @@ static void PaintPSImage(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId image
} }
static ImageId PaintPSColourifyImage( static ImageId PaintPSColourifyImage(
ImageId imageId, ViewportInteractionItem spriteType, EntityType entityType, uint32_t viewFlags) ImageId imageId, ViewportInteractionItem spriteType, uint32_t viewFlags, const TileElement* tileElement,
const EntityBase* entity)
{ {
auto seeThrough = imageId.WithTransparancy(FilterPaletteID::PaletteDarken1); auto seeThrough = imageId.WithTransparancy(FilterPaletteID::PaletteDarken1);
if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES)
{ {
if (spriteType == ViewportInteractionItem::Ride) if (spriteType == ViewportInteractionItem::Ride)
{ {
return seeThrough; return (viewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) ? ImageId() : seeThrough;
} }
} }
if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES) if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES)
{ {
if (spriteType == ViewportInteractionItem::Entity && entityType == EntityType::Vehicle) if (spriteType == ViewportInteractionItem::Entity && (entity != nullptr && entity->Type == EntityType::Vehicle))
{ {
return (viewFlags & VIEWPORT_FLAG_INVISIBLE_VEHICLES) ? ImageId() : seeThrough; return (viewFlags & VIEWPORT_FLAG_INVISIBLE_VEHICLES) ? ImageId() : seeThrough;
} }

View File

@@ -19,6 +19,7 @@
#include <mutex> #include <mutex>
#include <thread> #include <thread>
struct EntityBase;
struct TileElement; struct TileElement;
enum class RailingEntrySupportType : uint8_t; enum class RailingEntrySupportType : uint8_t;
enum class ViewportInteractionItem : uint8_t; enum class ViewportInteractionItem : uint8_t;
@@ -50,6 +51,7 @@ struct paint_struct
paint_struct* children; paint_struct* children;
paint_struct* next_quadrant_ps; paint_struct* next_quadrant_ps;
TileElement* tileElement; TileElement* tileElement;
EntityBase* entity;
ImageId image_id; ImageId image_id;
ImageId colour_image_id; ImageId colour_image_id;
int32_t x; int32_t x;
@@ -192,7 +194,8 @@ struct PaintSessionCore
paint_string_struct* LastPSString; paint_string_struct* LastPSString;
attached_paint_struct* LastAttachedPS; attached_paint_struct* LastAttachedPS;
const TileElement* SurfaceElement; const TileElement* SurfaceElement;
const void* CurrentlyDrawnItem; EntityBase* CurrentlyDrawnEntity;
TileElement* CurrentlyDrawnTileElement;
const TileElement* PathElementOnSameHeight; const TileElement* PathElementOnSameHeight;
const TileElement* TrackElementOnSameHeight; const TileElement* TrackElementOnSameHeight;
paint_struct* WoodenSupportsPrependTo; paint_struct* WoodenSupportsPrependTo;

View File

@@ -165,7 +165,8 @@ paint_session* Painter::CreateSession(rct_drawpixelinfo* dpi, uint32_t viewFlags
session->PSStringHead = nullptr; session->PSStringHead = nullptr;
session->LastPSString = nullptr; session->LastPSString = nullptr;
session->WoodenSupportsPrependTo = nullptr; session->WoodenSupportsPrependTo = nullptr;
session->CurrentlyDrawnItem = nullptr; session->CurrentlyDrawnEntity = nullptr;
session->CurrentlyDrawnTileElement = nullptr;
session->SurfaceElement = nullptr; session->SurfaceElement = nullptr;
return session; return session;

View File

@@ -481,13 +481,12 @@ bool wooden_a_supports_paint_setup(
return false; return false;
} }
if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)
{
return false;
}
if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS)
{ {
if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)
{
return false;
}
imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1);
} }
@@ -643,13 +642,12 @@ bool wooden_b_supports_paint_setup(
return false; return false;
} }
if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)
{
return false;
}
if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS)
{ {
if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)
{
return false;
}
imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1);
} }
@@ -818,13 +816,12 @@ bool metal_a_supports_paint_setup(
return false; return false;
} }
if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)
{
return false;
}
if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS)
{ {
if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)
{
return false;
}
imageColourFlags = ImageId(0).WithTransparancy(FilterPaletteID::PaletteDarken1).ToUInt32(); imageColourFlags = ImageId(0).WithTransparancy(FilterPaletteID::PaletteDarken1).ToUInt32();
} }
@@ -1022,13 +1019,12 @@ bool metal_b_supports_paint_setup(
return false; // AND return false; // AND
} }
if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)
{
return false;
}
if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS)
{ {
if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)
{
return false;
}
imageColourFlags = ImageId(0).WithTransparancy(FilterPaletteID::PaletteDarken1).ToUInt32(); imageColourFlags = ImageId(0).WithTransparancy(FilterPaletteID::PaletteDarken1).ToUInt32();
} }
@@ -1207,13 +1203,12 @@ bool path_a_supports_paint_setup(
return false; return false;
} }
if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)
{
return false;
}
if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS)
{ {
if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)
{
return false;
}
imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1);
} }
@@ -1362,13 +1357,12 @@ bool path_b_supports_paint_setup(
return false; return false;
} }
if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)
{
return false;
}
if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS)
{ {
if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)
{
return false;
}
imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1);
} }

View File

@@ -125,9 +125,6 @@ static void PaintRideEntranceExit(paint_session& session, uint8_t direction, int
return; return;
} }
if ((session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) && (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES))
return;
auto stationObj = ride->GetStationObject(); auto stationObj = ride->GetStationObject();
if (stationObj == nullptr || stationObj->BaseImageId == ImageIndexUndefined) if (stationObj == nullptr || stationObj->BaseImageId == ImageIndexUndefined)
{ {

View File

@@ -140,7 +140,7 @@ static void PaintTileElementBase(paint_session& session, const CoordsXY& origCoo
session.MapPosition.x = coords.x; session.MapPosition.x = coords.x;
session.MapPosition.y = coords.y; session.MapPosition.y = coords.y;
const TileElement* tile_element = map_get_first_element_at(session.MapPosition); auto* tile_element = map_get_first_element_at(session.MapPosition);
if (tile_element == nullptr) if (tile_element == nullptr)
return; return;
uint8_t rotation = session.CurrentRotation; uint8_t rotation = session.CurrentRotation;
@@ -263,7 +263,7 @@ static void PaintTileElementBase(paint_session& session, const CoordsXY& origCoo
} }
CoordsXY mapPosition = session.MapPosition; CoordsXY mapPosition = session.MapPosition;
session.CurrentlyDrawnItem = tile_element; session.CurrentlyDrawnTileElement = tile_element;
// Setup the painting of for example: the underground, signs, rides, scenery, etc. // Setup the painting of for example: the underground, signs, rides, scenery, etc.
switch (tile_element->GetType()) switch (tile_element->GetType())
{ {

View File

@@ -2195,9 +2195,6 @@ void PaintTrack(paint_session& session, Direction direction, int32_t height, con
return; return;
} }
if ((session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) && (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES))
return;
if ((!gTrackDesignSaveMode || rideIndex == gTrackDesignSaveRideIndex) if ((!gTrackDesignSaveMode || rideIndex == gTrackDesignSaveRideIndex)
&& !(session.ViewFlags & VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES)) && !(session.ViewFlags & VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES))
{ {

View File

@@ -11,6 +11,7 @@
#include "../../interface/Viewport.h" #include "../../interface/Viewport.h"
#include "../../paint/Paint.h" #include "../../paint/Paint.h"
#include "../../paint/Supports.h" #include "../../paint/Supports.h"
#include "../../ride/Vehicle.h"
#include "../Ride.h" #include "../Ride.h"
#include "../RideEntry.h" #include "../RideEntry.h"
#include "../Track.h" #include "../Track.h"
@@ -18,8 +19,6 @@
static void PaintCircusTent(paint_session& session, const Ride& ride, uint8_t direction, int8_t al, int8_t cl, uint16_t height) static void PaintCircusTent(paint_session& session, const Ride& ride, uint8_t direction, int8_t al, int8_t cl, uint16_t height)
{ {
const TileElement* savedTileElement = static_cast<const TileElement*>(session.CurrentlyDrawnItem);
auto rideEntry = ride.GetRideEntry(); auto rideEntry = ride.GetRideEntry();
if (rideEntry == nullptr) if (rideEntry == nullptr)
return; return;
@@ -28,7 +27,7 @@ static void PaintCircusTent(paint_session& session, const Ride& ride, uint8_t di
if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr) if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr)
{ {
session.InteractionType = ViewportInteractionItem::Entity; session.InteractionType = ViewportInteractionItem::Entity;
session.CurrentlyDrawnItem = vehicle; session.CurrentlyDrawnEntity = vehicle;
} }
auto imageTemplate = ImageId(0, ride.vehicle_colours[0].Body, ride.vehicle_colours[0].Trim); auto imageTemplate = ImageId(0, ride.vehicle_colours[0].Body, ride.vehicle_colours[0].Trim);
@@ -42,7 +41,7 @@ static void PaintCircusTent(paint_session& session, const Ride& ride, uint8_t di
PaintAddImageAsParent( PaintAddImageAsParent(
session, imageTemplate.WithIndex(imageIndex), { al, cl, height + 3 }, { 24, 24, 47 }, { al + 16, cl + 16, height + 3 }); session, imageTemplate.WithIndex(imageIndex), { al, cl, height + 3 }, { 24, 24, 47 }, { al + 16, cl + 16, height + 3 });
session.CurrentlyDrawnItem = savedTileElement; session.CurrentlyDrawnEntity = nullptr;
session.InteractionType = ViewportInteractionItem::Ride; session.InteractionType = ViewportInteractionItem::Ride;
} }

View File

@@ -11,6 +11,7 @@
#include "../../interface/Viewport.h" #include "../../interface/Viewport.h"
#include "../../paint/Paint.h" #include "../../paint/Paint.h"
#include "../../paint/Supports.h" #include "../../paint/Supports.h"
#include "../../ride/Vehicle.h"
#include "../Ride.h" #include "../Ride.h"
#include "../RideEntry.h" #include "../RideEntry.h"
#include "../Track.h" #include "../Track.h"
@@ -52,9 +53,11 @@ static constexpr const rct_crooked_house_bound_box crooked_house_data[] = {
static void PaintCrookedHouseStructure( static void PaintCrookedHouseStructure(
paint_session& session, uint8_t direction, int32_t x_offset, int32_t y_offset, uint32_t segment, int32_t height) paint_session& session, uint8_t direction, int32_t x_offset, int32_t y_offset, uint32_t segment, int32_t height)
{ {
const TileElement* original_tile_element = static_cast<const TileElement*>(session.CurrentlyDrawnItem); const auto* tileElement = session.CurrentlyDrawnTileElement;
if (tileElement == nullptr)
return;
auto ride = get_ride(original_tile_element->AsTrack()->GetRideIndex()); auto ride = get_ride(tileElement->AsTrack()->GetRideIndex());
if (ride == nullptr) if (ride == nullptr)
return; return;
@@ -68,7 +71,7 @@ static void PaintCrookedHouseStructure(
if (vehicle != nullptr) if (vehicle != nullptr)
{ {
session.InteractionType = ViewportInteractionItem::Entity; session.InteractionType = ViewportInteractionItem::Entity;
session.CurrentlyDrawnItem = vehicle; session.CurrentlyDrawnEntity = vehicle;
} }
} }
@@ -78,6 +81,8 @@ static void PaintCrookedHouseStructure(
PaintAddImageAsParent( PaintAddImageAsParent(
session, imageTemplate.WithIndex(imageIndex), { x_offset, y_offset, height + 3 }, { boundBox.length, 127 }, session, imageTemplate.WithIndex(imageIndex), { x_offset, y_offset, height + 3 }, { boundBox.length, 127 },
{ boundBox.offset, height + 3 }); { boundBox.offset, height + 3 });
session.CurrentlyDrawnEntity = nullptr;
} }
static void PaintCrookedHouse( static void PaintCrookedHouse(

View File

@@ -66,8 +66,6 @@ static void PaintFerrisWheelRiders(
static void PaintFerrisWheelStructure( static void PaintFerrisWheelStructure(
paint_session& session, const Ride& ride, uint8_t direction, int8_t axisOffset, uint16_t height) paint_session& session, const Ride& ride, uint8_t direction, int8_t axisOffset, uint16_t height)
{ {
const TileElement* savedTileElement = static_cast<const TileElement*>(session.CurrentlyDrawnItem);
auto rideEntry = ride.GetRideEntry(); auto rideEntry = ride.GetRideEntry();
if (rideEntry == nullptr) if (rideEntry == nullptr)
return; return;
@@ -76,7 +74,7 @@ static void PaintFerrisWheelStructure(
if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr) if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr)
{ {
session.InteractionType = ViewportInteractionItem::Entity; session.InteractionType = ViewportInteractionItem::Entity;
session.CurrentlyDrawnItem = vehicle; session.CurrentlyDrawnEntity = vehicle;
} }
const auto& boundBox = FerrisWheelData[direction]; const auto& boundBox = FerrisWheelData[direction];
@@ -105,7 +103,7 @@ static void PaintFerrisWheelStructure(
} }
PaintAddImageAsChild(session, rightSupportImageId, offset, bbLength, bbOffset); PaintAddImageAsChild(session, rightSupportImageId, offset, bbLength, bbOffset);
session.CurrentlyDrawnItem = savedTileElement; session.CurrentlyDrawnEntity = nullptr;
session.InteractionType = ViewportInteractionItem::Ride; session.InteractionType = ViewportInteractionItem::Ride;
} }

View File

@@ -31,8 +31,6 @@ static constexpr haunted_house_bound_box haunted_house_data[] = {
static void PaintHauntedHouseStructure( static void PaintHauntedHouseStructure(
paint_session& session, const Ride& ride, uint8_t direction, int8_t xOffset, int8_t yOffset, uint8_t part, uint16_t height) paint_session& session, const Ride& ride, uint8_t direction, int8_t xOffset, int8_t yOffset, uint8_t part, uint16_t height)
{ {
const TileElement* savedTileElement = static_cast<const TileElement*>(session.CurrentlyDrawnItem);
uint8_t frameNum = 0; uint8_t frameNum = 0;
auto rideEntry = ride.GetRideEntry(); auto rideEntry = ride.GetRideEntry();
@@ -43,7 +41,7 @@ static void PaintHauntedHouseStructure(
if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr) if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr)
{ {
session.InteractionType = ViewportInteractionItem::Entity; session.InteractionType = ViewportInteractionItem::Entity;
session.CurrentlyDrawnItem = vehicle; session.CurrentlyDrawnEntity = vehicle;
frameNum = vehicle->Pitch; frameNum = vehicle->Pitch;
} }
@@ -63,7 +61,7 @@ static void PaintHauntedHouseStructure(
{ boundBox.length.x, boundBox.length.y, 127 }, { boundBox.offset.x, boundBox.offset.y, height }); { boundBox.length.x, boundBox.length.y, 127 }, { boundBox.offset.x, boundBox.offset.y, height });
} }
session.CurrentlyDrawnItem = savedTileElement; session.CurrentlyDrawnEntity = nullptr;
session.InteractionType = ViewportInteractionItem::Ride; session.InteractionType = ViewportInteractionItem::Ride;
} }

View File

@@ -53,7 +53,6 @@ static void PaintRiders(
static void PaintCarousel( static void PaintCarousel(
paint_session& session, const Ride& ride, uint8_t direction, int8_t xOffset, int8_t yOffset, uint16_t height) paint_session& session, const Ride& ride, uint8_t direction, int8_t xOffset, int8_t yOffset, uint16_t height)
{ {
const TileElement* savedTileElement = static_cast<const TileElement*>(session.CurrentlyDrawnItem);
height += 7; height += 7;
auto rideEntry = ride.GetRideEntry(); auto rideEntry = ride.GetRideEntry();
@@ -64,7 +63,7 @@ static void PaintCarousel(
if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr) if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr)
{ {
session.InteractionType = ViewportInteractionItem::Entity; session.InteractionType = ViewportInteractionItem::Entity;
session.CurrentlyDrawnItem = vehicle; session.CurrentlyDrawnEntity = vehicle;
if (ride.lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN) if (ride.lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN)
&& ride.breakdown_reason_pending == BREAKDOWN_CONTROL_FAILURE && ride.breakdown_sound_modifier >= 128) && ride.breakdown_reason_pending == BREAKDOWN_CONTROL_FAILURE && ride.breakdown_sound_modifier >= 128)
@@ -96,7 +95,7 @@ static void PaintCarousel(
PaintRiders(session, ride, *rideEntry, *vehicle, rotationOffset, offset, bbLength, bbOffset); PaintRiders(session, ride, *rideEntry, *vehicle, rotationOffset, offset, bbLength, bbOffset);
session.CurrentlyDrawnItem = savedTileElement; session.CurrentlyDrawnEntity = nullptr;
session.InteractionType = ViewportInteractionItem::Ride; session.InteractionType = ViewportInteractionItem::Ride;
} }

View File

@@ -36,8 +36,6 @@ static constexpr const uint32_t space_rings_fence_sprites[] = {
static void paint_space_rings_structure( static void paint_space_rings_structure(
paint_session& session, const Ride& ride, uint8_t direction, uint32_t segment, int32_t height) paint_session& session, const Ride& ride, uint8_t direction, uint32_t segment, int32_t height)
{ {
const TileElement* savedTileElement = static_cast<const TileElement*>(session.CurrentlyDrawnItem);
uint32_t vehicleIndex = (segment - direction) & 0x3; uint32_t vehicleIndex = (segment - direction) & 0x3;
if (ride.num_stations == 0 || vehicleIndex < ride.num_vehicles) if (ride.num_stations == 0 || vehicleIndex < ride.num_vehicles)
@@ -51,7 +49,7 @@ static void paint_space_rings_structure(
if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr) if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr)
{ {
session.InteractionType = ViewportInteractionItem::Entity; session.InteractionType = ViewportInteractionItem::Entity;
session.CurrentlyDrawnItem = vehicle; session.CurrentlyDrawnEntity = vehicle;
frameNum += static_cast<int8_t>(vehicle->Pitch) * 4; frameNum += static_cast<int8_t>(vehicle->Pitch) * 4;
} }
@@ -82,7 +80,7 @@ static void paint_space_rings_structure(
} }
} }
session.CurrentlyDrawnItem = savedTileElement; session.CurrentlyDrawnEntity = nullptr;
session.InteractionType = ViewportInteractionItem::Ride; session.InteractionType = ViewportInteractionItem::Ride;
} }

View File

@@ -15,12 +15,11 @@
#include "../RideEntry.h" #include "../RideEntry.h"
#include "../Track.h" #include "../Track.h"
#include "../TrackPaint.h" #include "../TrackPaint.h"
#include "../Vehicle.h"
static void Paint3dCinemaDome( static void Paint3dCinemaDome(
paint_session& session, const Ride& ride, uint8_t direction, int8_t xOffset, int8_t yOffset, uint16_t height) paint_session& session, const Ride& ride, uint8_t direction, int8_t xOffset, int8_t yOffset, uint16_t height)
{ {
const TileElement* savedTileElement = static_cast<const TileElement*>(session.CurrentlyDrawnItem);
auto rideEntry = ride.GetRideEntry(); auto rideEntry = ride.GetRideEntry();
if (rideEntry == nullptr) if (rideEntry == nullptr)
return; return;
@@ -28,7 +27,7 @@ static void Paint3dCinemaDome(
if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && !ride.vehicles[0].IsNull()) if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && !ride.vehicles[0].IsNull())
{ {
session.InteractionType = ViewportInteractionItem::Entity; session.InteractionType = ViewportInteractionItem::Entity;
session.CurrentlyDrawnItem = GetEntity<Vehicle>(ride.vehicles[0]); session.CurrentlyDrawnEntity = GetEntity<Vehicle>(ride.vehicles[0]);
} }
auto imageTemplate = ImageId(0, ride.vehicle_colours[0].Body, ride.vehicle_colours[0].Trim); auto imageTemplate = ImageId(0, ride.vehicle_colours[0].Body, ride.vehicle_colours[0].Trim);
@@ -42,7 +41,7 @@ static void Paint3dCinemaDome(
PaintAddImageAsParent( PaintAddImageAsParent(
session, imageId, { xOffset, yOffset, height + 3 }, { 24, 24, 47 }, { xOffset + 16, yOffset + 16, height + 3 }); session, imageId, { xOffset, yOffset, height + 3 }, { 24, 24, 47 }, { xOffset + 16, yOffset + 16, height + 3 });
session.CurrentlyDrawnItem = savedTileElement; session.CurrentlyDrawnEntity = nullptr;
session.InteractionType = ViewportInteractionItem::Ride; session.InteractionType = ViewportInteractionItem::Ride;
} }

View File

@@ -44,7 +44,6 @@ static void PaintEnterpriseRiders(
static void PaintEnterpriseStructure( static void PaintEnterpriseStructure(
paint_session& session, const Ride& ride, int8_t xOffset, int8_t yOffset, uint16_t height, const TrackElement& trackElement) paint_session& session, const Ride& ride, int8_t xOffset, int8_t yOffset, uint16_t height, const TrackElement& trackElement)
{ {
const TileElement* savedTileElement = static_cast<const TileElement*>(session.CurrentlyDrawnItem);
const auto* rideEntry = get_ride_entry(ride.subtype); const auto* rideEntry = get_ride_entry(ride.subtype);
if (rideEntry == nullptr) if (rideEntry == nullptr)
return; return;
@@ -56,7 +55,7 @@ static void PaintEnterpriseStructure(
if (vehicle != nullptr) if (vehicle != nullptr)
{ {
session.InteractionType = ViewportInteractionItem::Entity; session.InteractionType = ViewportInteractionItem::Entity;
session.CurrentlyDrawnItem = vehicle; session.CurrentlyDrawnEntity = vehicle;
} }
} }
@@ -84,7 +83,7 @@ static void PaintEnterpriseStructure(
PaintEnterpriseRiders(session, *rideEntry, *vehicle, imageOffset, offset, bbLength, bbOffset); PaintEnterpriseRiders(session, *rideEntry, *vehicle, imageOffset, offset, bbLength, bbOffset);
} }
session.CurrentlyDrawnItem = savedTileElement; session.CurrentlyDrawnEntity = nullptr;
session.InteractionType = ViewportInteractionItem::Ride; session.InteractionType = ViewportInteractionItem::Ride;
} }

View File

@@ -94,7 +94,7 @@ static ImageIndex GetMagicCarpetPendulumImage(Plane plane, Direction direction,
return imageIndex; return imageIndex;
} }
static const Vehicle* GetFirstVehicle(const Ride& ride) static Vehicle* GetFirstVehicle(const Ride& ride)
{ {
if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK) if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)
{ {
@@ -193,15 +193,13 @@ static void PaintMagicCarpetVehicle(
static void PaintMagicCarpetStructure( static void PaintMagicCarpetStructure(
paint_session& session, const Ride& ride, uint8_t direction, int8_t axisOffset, uint16_t height) paint_session& session, const Ride& ride, uint8_t direction, int8_t axisOffset, uint16_t height)
{ {
const TileElement* savedTileElement = static_cast<const TileElement*>(session.CurrentlyDrawnItem);
auto swing = 0; auto swing = 0;
auto* vehicle = GetFirstVehicle(ride); auto* vehicle = GetFirstVehicle(ride);
if (vehicle != nullptr) if (vehicle != nullptr)
{ {
swing = vehicle->Pitch; swing = vehicle->Pitch;
session.InteractionType = ViewportInteractionItem::Entity; session.InteractionType = ViewportInteractionItem::Entity;
session.CurrentlyDrawnItem = vehicle; session.CurrentlyDrawnEntity = vehicle;
} }
bound_box bb = MagicCarpetBounds[direction]; bound_box bb = MagicCarpetBounds[direction];
@@ -222,8 +220,8 @@ static void PaintMagicCarpetStructure(
PaintMagicCarpetPendulum(session, Plane::Front, swing, direction, offset, bbOffset, bbSize); PaintMagicCarpetPendulum(session, Plane::Front, swing, direction, offset, bbOffset, bbSize);
PaintMagicCarpetFrame(session, Plane::Front, direction, offset, bbOffset, bbSize); PaintMagicCarpetFrame(session, Plane::Front, direction, offset, bbOffset, bbSize);
session.CurrentlyDrawnEntity = nullptr;
session.InteractionType = ViewportInteractionItem::Ride; session.InteractionType = ViewportInteractionItem::Ride;
session.CurrentlyDrawnItem = savedTileElement;
} }
static void PaintMagicCarpet( static void PaintMagicCarpet(

View File

@@ -37,7 +37,6 @@ static void PaintMotionSimulatorVehicle(
if (rideEntry == nullptr) if (rideEntry == nullptr)
return; return;
const TileElement* savedTileElement = static_cast<const TileElement*>(session.CurrentlyDrawnItem);
CoordsXYZ offset(offsetX, offsetY, height + 2); CoordsXYZ offset(offsetX, offsetY, height + 2);
Vehicle* vehicle = nullptr; Vehicle* vehicle = nullptr;
@@ -47,7 +46,7 @@ static void PaintMotionSimulatorVehicle(
if (vehicle != nullptr) if (vehicle != nullptr)
{ {
session.InteractionType = ViewportInteractionItem::Entity; session.InteractionType = ViewportInteractionItem::Entity;
session.CurrentlyDrawnItem = vehicle; session.CurrentlyDrawnEntity = vehicle;
} }
} }
@@ -97,7 +96,7 @@ static void PaintMotionSimulatorVehicle(
break; break;
} }
session.CurrentlyDrawnItem = savedTileElement; session.CurrentlyDrawnEntity = nullptr;
session.InteractionType = ViewportInteractionItem::Ride; session.InteractionType = ViewportInteractionItem::Ride;
} }

View File

@@ -68,8 +68,6 @@ static constexpr const uint32_t SwingingInverterShipFrameSprites[] = {
static void PaintSwingingInverterShipStructure( static void PaintSwingingInverterShipStructure(
paint_session& session, const Ride& ride, uint8_t direction, int8_t axisOffset, uint16_t height) paint_session& session, const Ride& ride, uint8_t direction, int8_t axisOffset, uint16_t height)
{ {
const TileElement* savedTileElement = static_cast<const TileElement*>(session.CurrentlyDrawnItem);
rct_ride_entry* rideEntry = get_ride_entry(ride.subtype); rct_ride_entry* rideEntry = get_ride_entry(ride.subtype);
if (rideEntry == nullptr) if (rideEntry == nullptr)
return; return;
@@ -86,7 +84,7 @@ static void PaintSwingingInverterShipStructure(
if (vehicle != nullptr) if (vehicle != nullptr)
{ {
session.InteractionType = ViewportInteractionItem::Entity; session.InteractionType = ViewportInteractionItem::Entity;
session.CurrentlyDrawnItem = vehicle; session.CurrentlyDrawnEntity = vehicle;
} }
} }
@@ -130,7 +128,7 @@ static void PaintSwingingInverterShipStructure(
PaintAddImageAsChild(session, vehicleImageId, offset, bbLength, bbOffset); PaintAddImageAsChild(session, vehicleImageId, offset, bbLength, bbOffset);
} }
session.CurrentlyDrawnItem = savedTileElement; session.CurrentlyDrawnEntity = nullptr;
session.InteractionType = ViewportInteractionItem::Ride; session.InteractionType = ViewportInteractionItem::Ride;
} }

View File

@@ -94,8 +94,6 @@ static void PaintSwingingShipRiders(
static void PaintSwingingShipStructure( static void PaintSwingingShipStructure(
paint_session& session, const Ride& ride, uint8_t direction, int8_t axisOffset, uint16_t height) paint_session& session, const Ride& ride, uint8_t direction, int8_t axisOffset, uint16_t height)
{ {
const TileElement* savedTileElement = static_cast<const TileElement*>(session.CurrentlyDrawnItem);
rct_ride_entry* rideEntry = get_ride_entry(ride.subtype); rct_ride_entry* rideEntry = get_ride_entry(ride.subtype);
if (rideEntry == nullptr) if (rideEntry == nullptr)
return; return;
@@ -105,7 +103,7 @@ static void PaintSwingingShipStructure(
{ {
vehicle = GetEntity<Vehicle>(ride.vehicles[0]); vehicle = GetEntity<Vehicle>(ride.vehicles[0]);
session.InteractionType = ViewportInteractionItem::Entity; session.InteractionType = ViewportInteractionItem::Entity;
session.CurrentlyDrawnItem = vehicle; session.CurrentlyDrawnEntity = vehicle;
} }
const auto& bounds = SwingingShipData[direction]; const auto& bounds = SwingingShipData[direction];
@@ -157,7 +155,7 @@ static void PaintSwingingShipStructure(
imageId = supportsImageTemplate.WithIndex(SwingingShipFrameSprites[(direction & 1)][1]); imageId = supportsImageTemplate.WithIndex(SwingingShipFrameSprites[(direction & 1)][1]);
PaintAddImageAsChild(session, imageId, offset, bbLength, bbOffset); PaintAddImageAsChild(session, imageId, offset, bbLength, bbOffset);
session.CurrentlyDrawnItem = savedTileElement; session.CurrentlyDrawnEntity = nullptr;
session.InteractionType = ViewportInteractionItem::Ride; session.InteractionType = ViewportInteractionItem::Ride;
} }

View File

@@ -124,18 +124,14 @@ static void PaintTopSpinVehicle(
const auto& vehicleEntry = rideEntry->vehicles[0]; const auto& vehicleEntry = rideEntry->vehicles[0];
// As we will be drawing a vehicle we need to backup the trackElement that
// is assigned to the drawings.
const TileElement* curTileElement = static_cast<const TileElement*>(session.CurrentlyDrawnItem);
height += 3; height += 3;
uint8_t seatRotation = 0; uint8_t seatRotation = 0;
uint8_t armRotation = 0; uint8_t armRotation = 0;
const auto* vehicle = GetEntity<Vehicle>(ride.vehicles[0]); auto* vehicle = GetEntity<Vehicle>(ride.vehicles[0]);
if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr) if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr)
{ {
session.InteractionType = ViewportInteractionItem::Entity; session.InteractionType = ViewportInteractionItem::Entity;
session.CurrentlyDrawnItem = vehicle; session.CurrentlyDrawnEntity = vehicle;
armRotation = vehicle->Pitch; armRotation = vehicle->Pitch;
seatRotation = vehicle->bank_rotation; seatRotation = vehicle->bank_rotation;
@@ -181,7 +177,7 @@ static void PaintTopSpinVehicle(
imageIndex = vehicleEntry.base_image_id + 573 + ((direction & 1) << 1); imageIndex = vehicleEntry.base_image_id + 573 + ((direction & 1) << 1);
PaintAddImageAsChild(session, supportImageTemplate.WithIndex(imageIndex), offset, bbLength, bbOffset); PaintAddImageAsChild(session, supportImageTemplate.WithIndex(imageIndex), offset, bbLength, bbOffset);
session.CurrentlyDrawnItem = curTileElement; session.CurrentlyDrawnEntity = nullptr;
session.InteractionType = ViewportInteractionItem::Ride; session.InteractionType = ViewportInteractionItem::Ride;
} }

View File

@@ -22,8 +22,6 @@
static void paint_twist_structure( static void paint_twist_structure(
paint_session& session, const Ride& ride, uint8_t direction, int8_t xOffset, int8_t yOffset, uint16_t height) paint_session& session, const Ride& ride, uint8_t direction, int8_t xOffset, int8_t yOffset, uint16_t height)
{ {
const TileElement* savedTileElement = static_cast<const TileElement*>(session.CurrentlyDrawnItem);
rct_ride_entry* rideEntry = get_ride_entry(ride.subtype); rct_ride_entry* rideEntry = get_ride_entry(ride.subtype);
Vehicle* vehicle = nullptr; Vehicle* vehicle = nullptr;
@@ -39,7 +37,7 @@ static void paint_twist_structure(
vehicle = GetEntity<Vehicle>(ride.vehicles[0]); vehicle = GetEntity<Vehicle>(ride.vehicles[0]);
session.InteractionType = ViewportInteractionItem::Entity; session.InteractionType = ViewportInteractionItem::Entity;
session.CurrentlyDrawnItem = vehicle; session.CurrentlyDrawnEntity = vehicle;
} }
uint32_t frameNum = (direction * 88) % 216; uint32_t frameNum = (direction * 88) % 216;
@@ -75,7 +73,7 @@ static void paint_twist_structure(
} }
} }
session.CurrentlyDrawnItem = savedTileElement; session.CurrentlyDrawnEntity = nullptr;
session.InteractionType = ViewportInteractionItem::Ride; session.InteractionType = ViewportInteractionItem::Ride;
} }

View File

@@ -1268,23 +1268,17 @@ void vehicle_visual_splash_boats_or_water_coaster(
paint_session& session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const Vehicle* vehicle, paint_session& session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const Vehicle* vehicle,
const rct_ride_entry_vehicle* vehicleEntry) const rct_ride_entry_vehicle* vehicleEntry)
{ {
if (vehicle->IsHead()) auto* vehicleToPaint = vehicle->IsHead() ? GetEntity<Vehicle>(vehicle->next_vehicle_on_ride)
{ : GetEntity<Vehicle>(vehicle->prev_vehicle_on_ride);
vehicle = GetEntity<Vehicle>(vehicle->next_vehicle_on_ride); if (vehicleToPaint == nullptr)
}
else
{
vehicle = GetEntity<Vehicle>(vehicle->prev_vehicle_on_ride);
}
if (vehicle == nullptr)
{ {
return; return;
} }
session.CurrentlyDrawnItem = vehicle;
imageDirection = ((session.CurrentRotation * 8) + vehicle->sprite_direction) & 0x1F;
session.SpritePosition.x = vehicle->x;
session.SpritePosition.y = vehicle->y;
vehicle->Paint(session, imageDirection); session.CurrentlyDrawnEntity = vehicleToPaint;
imageDirection = ((session.CurrentRotation * 8) + vehicle->sprite_direction) & 0x1F;
session.SpritePosition.x = vehicleToPaint->x;
session.SpritePosition.y = vehicleToPaint->y;
vehicleToPaint->Paint(session, imageDirection);
} }
#endif #endif

View File

@@ -273,7 +273,7 @@ static uint8_t TestTrackElementPaintCalls(uint8_t rideType, uint8_t trackType, u
gSurfaceElement = &surfaceElement; gSurfaceElement = &surfaceElement;
gDidPassSurface = true; gDidPassSurface = true;
gPaintSession.CurrentlyDrawnItem = &tileElement; gPaintSession.CurrentlyDrawnTileElement = &tileElement;
gPaintSession.SurfaceElement = &surfaceElement; gPaintSession.SurfaceElement = &surfaceElement;
gPaintSession.DidPassSurface = true; gPaintSession.DidPassSurface = true;
@@ -436,7 +436,7 @@ static uint8_t TestTrackElementSegmentSupportHeight(
gSurfaceElement = &surfaceElement; gSurfaceElement = &surfaceElement;
gDidPassSurface = true; gDidPassSurface = true;
gPaintSession.CurrentlyDrawnItem = &tileElement; gPaintSession.CurrentlyDrawnTileElement = &tileElement;
gPaintSession.SurfaceElement = &surfaceElement; gPaintSession.SurfaceElement = &surfaceElement;
gPaintSession.DidPassSurface = true; gPaintSession.DidPassSurface = true;
@@ -523,7 +523,7 @@ static uint8_t TestTrackElementGeneralSupportHeight(
gSurfaceElement = &surfaceElement; gSurfaceElement = &surfaceElement;
gDidPassSurface = true; gDidPassSurface = true;
gPaintSession.CurrentlyDrawnItem = &tileElement; gPaintSession.CurrentlyDrawnTileElement = &tileElement;
gPaintSession.SurfaceElement = &surfaceElement; gPaintSession.SurfaceElement = &surfaceElement;
gPaintSession.DidPassSurface = true; gPaintSession.DidPassSurface = true;
@@ -624,7 +624,7 @@ static uint8_t TestTrackElementSideTunnels(uint8_t rideType, uint8_t trackType,
gSurfaceElement = &surfaceElement; gSurfaceElement = &surfaceElement;
gDidPassSurface = true; gDidPassSurface = true;
gPaintSession.CurrentlyDrawnItem = &tileElement; gPaintSession.CurrentlyDrawnTileElement = &tileElement;
gPaintSession.SurfaceElement = &surfaceElement; gPaintSession.SurfaceElement = &surfaceElement;
gPaintSession.DidPassSurface = true; gPaintSession.DidPassSurface = true;
@@ -752,7 +752,7 @@ static uint8_t TestTrackElementVerticalTunnels(uint8_t rideType, uint8_t trackTy
gSurfaceElement = &surfaceElement; gSurfaceElement = &surfaceElement;
gDidPassSurface = true; gDidPassSurface = true;
gPaintSession.CurrentlyDrawnItem = &tileElement; gPaintSession.CurrentlyDrawnTileElement = &tileElement;
gPaintSession.SurfaceElement = &surfaceElement; gPaintSession.SurfaceElement = &surfaceElement;
gPaintSession.DidPassSurface = true; gPaintSession.DidPassSurface = true;