Clean up more diagonal track drawing

This consists mostly of using `TrackPaintUtilDiagTilesPaint()` where appropriate, as well as cleaning up some duplicate constants in the monorail/miniature railway paint code.
This commit is contained in:
Michael Steenbeek 2024-05-13 14:37:35 +02:00 committed by GitHub
parent 7239810d39
commit 6979e88b9e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
17 changed files with 237 additions and 1419 deletions

View File

@ -1160,19 +1160,12 @@ constexpr CoordsXY defaultDiagBoundLengths[4] = {
{ 32, 32 },
};
static constexpr int8_t diag_sprite_map[4][4] = {
{ -1, 0, -1, -1 },
{ -1, -1, -1, 0 },
{ -1, -1, 0, -1 },
{ 0, -1, -1, -1 },
};
void TrackPaintUtilDiagTilesPaint(
PaintSession& session, int8_t thickness, int16_t height, Direction direction, uint8_t trackSequence,
const uint32_t sprites[4], const CoordsXY offsets[4], const CoordsXY boundsLengths[4], const CoordsXYZ boundsOffsets[4])
{
int32_t index = diag_sprite_map[direction][trackSequence];
if (index < 0)
auto shouldDraw = kDiagSpriteMap[direction][trackSequence];
if (!shouldDraw)
{
return;
}

View File

@ -391,6 +391,13 @@ extern const int8_t defaultEighthToDiagThickness[4][4];
extern const CoordsXY defaultDiagBoundLengths[4];
extern const CoordsXY defaultDiagTileOffsets[4];
constexpr bool kDiagSpriteMap[NumOrthogonalDirections][4] = {
{ false, true, false, false },
{ false, false, false, true },
{ false, false, true, false },
{ true, false, false, false },
};
extern const uint8_t mapLeftEighthTurnToOrthogonal[5];
extern const size_t MiniGolfPeepAnimationLengths[];

View File

@ -6395,133 +6395,18 @@ static void CorkscrewRCTrackDiagFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (trackElement.HasChain())
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(16699), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(16637), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
break;
case 1:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(16696), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(16634), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
break;
case 2:
if (trackElement.HasChain())
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(16698), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(16636), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
break;
case 3:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(16697), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
MetalASupportsPaintSetup(
session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
break;
}
}
else
{
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(16635), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
MetalASupportsPaintSetup(
session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
break;
}
}
break;
}
constexpr ImageIndex images[2][NumOrthogonalDirections] = {
{ 16634, 16635, 16636, 16637 },
{ 16696, 16697, 16698, 16699 },
};
TrackPaintUtilDiagTilesPaint(
session, 3, height, direction, trackSequence, images[trackElement.HasChain()], defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
if (trackSequence == 3)
MetalASupportsPaintSetupRotated(
session, supportType, MetalSupportPlace::LeftCorner, direction, 0, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(
session, PaintUtilRotateSegments(BlockedSegments::kDiagStraightFlat[trackSequence], direction), 0xFFFF, 0);

View File

@ -5943,137 +5943,18 @@ static void GigaRCTrackDiagFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (trackElement.HasChain())
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(18527), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(18465), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
constexpr ImageIndex images[2][NumOrthogonalDirections] = {
{ 18462, 18463, 18464, 18465 },
{ 18524, 18525, 18526, 18527 },
};
break;
case 1:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(18524), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(18462), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
TrackPaintUtilDiagTilesPaint(
session, 3, height, direction, trackSequence, images[trackElement.HasChain()], defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
break;
case 2:
if (trackElement.HasChain())
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(18526), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(18464), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
break;
case 3:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(18525), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
break;
}
}
else
{
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(18463), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
break;
}
}
break;
}
if (trackSequence == 3)
MetalASupportsPaintSetupRotated(
session, kSupportType, MetalSupportPlace::LeftCorner, direction, 0, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(
session, PaintUtilRotateSegments(BlockedSegments::kDiagStraightFlat[trackSequence], direction), 0xFFFF, 0);

View File

@ -1379,32 +1379,20 @@ namespace HybridRC
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
constexpr ImageIndex images[2][NumOrthogonalDirections] = {
{ SPR_G2_HYBRID_TRACK_FLAT_DIAGONAL + 0, SPR_G2_HYBRID_TRACK_FLAT_DIAGONAL + 1,
SPR_G2_HYBRID_TRACK_FLAT_DIAGONAL + 0, SPR_G2_HYBRID_TRACK_FLAT_DIAGONAL + 1 },
{ SPR_G2_HYBRID_LIFT_TRACK_FLAT_DIAGONAL + 0, SPR_G2_HYBRID_LIFT_TRACK_FLAT_DIAGONAL + 1,
SPR_G2_HYBRID_LIFT_TRACK_FLAT_DIAGONAL + 2, SPR_G2_HYBRID_LIFT_TRACK_FLAT_DIAGONAL + 3 },
};
TrackPaintUtilDiagTilesPaint(
session, 3, height, direction, trackSequence, images[trackElement.HasChain()], defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
switch (trackSequence)
{
case 0:
if (trackElement.HasChain())
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction,
GetTrackColour(session).WithIndex(SPR_G2_HYBRID_LIFT_TRACK_FLAT_DIAGONAL + 3),
{ -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, GetTrackColour(session).WithIndex(SPR_G2_HYBRID_TRACK_FLAT_DIAGONAL + 1),
{ -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
@ -1413,128 +1401,27 @@ namespace HybridRC
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
break;
case 1:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction,
GetTrackColour(session).WithIndex(SPR_G2_HYBRID_LIFT_TRACK_FLAT_DIAGONAL + 0),
{ -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } });
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, GetTrackColour(session).WithIndex(SPR_G2_HYBRID_TRACK_FLAT_DIAGONAL + 0),
{ -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
switch (direction)
{
case 0:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 1:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 2:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 3:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
}
WoodenASupportsPaintSetupRotated(
session, kSupportType, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(kSegmentsAll, direction), 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
break;
case 2:
if (trackElement.HasChain())
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction,
GetTrackColour(session).WithIndex(SPR_G2_HYBRID_LIFT_TRACK_FLAT_DIAGONAL + 2),
{ -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, GetTrackColour(session).WithIndex(SPR_G2_HYBRID_TRACK_FLAT_DIAGONAL + 0),
{ -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
switch (direction)
{
case 0:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
}
WoodenASupportsPaintSetupRotated(
session, kSupportType, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(kSegmentsAll, direction), 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
break;
case 3:
if (trackElement.HasChain())
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction,
GetTrackColour(session).WithIndex(SPR_G2_HYBRID_LIFT_TRACK_FLAT_DIAGONAL + 1),
{ -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, GetTrackColour(session).WithIndex(SPR_G2_HYBRID_TRACK_FLAT_DIAGONAL + 1),
{ -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(kSegmentsAll, direction), 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
break;
}
}

View File

@ -4282,8 +4282,7 @@ static void JuniorRCLeftEighthToOrthogonalPaintSetup(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
const uint8_t map[] = { 4, 2, 3, 1, 0 };
trackSequence = map[trackSequence];
trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
JuniorRCRightEighthToDiagPaintSetup(session, ride, trackSequence, (direction + 2) % 4, height, trackElement);
}
@ -4292,8 +4291,7 @@ static void JuniorRCRightEighthToOrthogonalPaintSetup(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
const uint8_t map[] = { 4, 2, 3, 1, 0 };
trackSequence = map[trackSequence];
trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
JuniorRCLeftEighthToDiagPaintSetup(session, ride, trackSequence, (direction + 3) % 4, height, trackElement);
}
@ -4610,8 +4608,7 @@ static void JuniorRCLeftEighthToOrthogonalBankPaintSetup(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
static constexpr uint8_t map[] = { 4, 2, 3, 1, 0 };
trackSequence = map[trackSequence];
trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
JuniorRCRightEighthToDiagBankPaintSetup(session, ride, trackSequence, (direction + 2) % 4, height, trackElement);
}
@ -4620,8 +4617,7 @@ static void JuniorRCRightEighthToOrthogonalBankPaintSetup(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
static constexpr uint8_t map[] = { 4, 2, 3, 1, 0 };
trackSequence = map[trackSequence];
trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
JuniorRCLeftEighthToDiagBankPaintSetup(session, ride, trackSequence, (direction + 3) % 4, height, trackElement);
}
@ -4637,9 +4633,8 @@ static void JuniorRCPaintTrackDiagFlat(
if (trackSequence == 3)
{
MetalASupportsPaintSetup(
session, (direction & 1) ? MetalSupportType::ForkAlt : kSupportType, kDiagSupportPlacement[direction], 0, height,
session.SupportColours);
MetalASupportsPaintSetupRotated(
session, kSupportType, MetalSupportPlace::LeftCorner, direction, 0, height, session.SupportColours);
}
int32_t blockedSegments = BlockedSegments::kDiagStraightFlat[trackSequence];

View File

@ -5714,137 +5714,18 @@ static void LoopingRCTrackDiagFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (trackElement.HasChain())
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(15451), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(15423), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
constexpr ImageIndex images[2][NumOrthogonalDirections] = {
{ 15420, 15421, 15422, 15423 },
{ 15448, 15449, 15450, 15451 },
};
break;
case 1:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(15448), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(15420), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
TrackPaintUtilDiagTilesPaint(
session, 3, height, direction, trackSequence, images[trackElement.HasChain()], defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
break;
case 2:
if (trackElement.HasChain())
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(15450), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(15422), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
break;
case 3:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(15449), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
break;
}
}
else
{
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(15421), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
break;
}
}
break;
}
if (trackSequence == 3)
MetalASupportsPaintSetupRotated(
session, kSupportType, MetalSupportPlace::LeftCorner, direction, 0, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(
session, PaintUtilRotateSegments(BlockedSegments::kDiagStraightFlat[trackSequence], direction), 0xFFFF, 0);

View File

@ -4240,55 +4240,14 @@ static void MineRideTrackDiagFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(19615), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
constexpr ImageIndex images[NumOrthogonalDirections] = { 19612, 19613, 19614, 19615 };
break;
case 1:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(19612), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
TrackPaintUtilDiagTilesPaint(
session, 3, height, direction, trackSequence, images, defaultDiagTileOffsets, defaultDiagBoundLengths, nullptr);
break;
case 2:
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(19614), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
break;
case 3:
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(19613), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
MetalASupportsPaintSetupRotated(
session, kSupportType, MetalSupportPlace::LeftCorner, direction, 6, height, session.SupportColours);
break;
}
if (trackSequence == 3)
MetalASupportsPaintSetupRotated(
session, kSupportType, MetalSupportPlace::LeftCorner, direction, 6, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(
session, PaintUtilRotateSegments(BlockedSegments::kDiagStraightFlat[trackSequence], direction), 0xFFFF, 0);

View File

@ -5416,63 +5416,29 @@ static void MineTrainRCTrackDiagFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
constexpr ImageIndex images[2][NumOrthogonalDirections] = {
{ 20386, 20387, 20388, 20389 },
{ 20358, 20359, 20360, 20361 },
};
TrackPaintUtilDiagTilesPaint(
session, 1, height, direction, trackSequence, images[trackElement.HasChain()], defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
switch (trackSequence)
{
case 0:
if (direction == 3)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20389 : 20361;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
break;
case 1:
if (direction == 0)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20386 : 20358;
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenASupportsPaintSetupRotated(
session, kSupportType, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
break;
case 2:
if (direction == 2)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20388 : 20360;
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenASupportsPaintSetupRotated(
session, kSupportType, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
break;
case 3:
if (direction == 1)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20387 : 20359;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
}
static void MineTrainRCTrackDiagBrakes(

View File

@ -5612,112 +5612,18 @@ static void MiniRCTrackDiagFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (trackElement.HasChain())
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(19189), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(19127), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
constexpr ImageIndex images[2][NumOrthogonalDirections] = {
{ 19124, 19125, 19126, 19127 },
{ 19186, 19187, 19188, 19189 },
};
break;
case 1:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(19186), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(19124), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
TrackPaintUtilDiagTilesPaint(
session, 3, height, direction, trackSequence, images[trackElement.HasChain()], defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
break;
case 2:
if (trackElement.HasChain())
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(19188), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(19126), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
break;
case 3:
if (trackElement.HasChain())
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(19187), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(19125), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
MetalASupportsPaintSetupRotated(
session, kSupportType, MetalSupportPlace::LeftCorner, direction, 6, height, session.SupportColours);
break;
}
if (trackSequence == 3)
MetalASupportsPaintSetupRotated(
session, kSupportType, MetalSupportPlace::LeftCorner, direction, 6, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(
session, PaintUtilRotateSegments(BlockedSegments::kDiagStraightFlat[trackSequence], direction), 0xFFFF, 0);

View File

@ -1947,181 +1947,41 @@ static void SideFrictionRCTrackDiagFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
constexpr ImageIndex images[2][NumOrthogonalDirections] = {
{ 21822, 21823, 21824, 21825 },
{ 21846, 21847, 21848, 21849 },
};
const ImageIndex additionalImages[2][NumOrthogonalDirections] = {
{ 21826, ImageIndexUndefined, 21827, ImageIndexUndefined },
{ 21850, ImageIndexUndefined, 21851, ImageIndexUndefined },
};
TrackPaintUtilDiagTilesPaint(
session, 2, height, direction, trackSequence, images[trackElement.HasChain()], defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
switch (trackSequence)
{
case 0:
if (trackElement.HasChain())
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(21849), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 2 } });
break;
}
}
else
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(21825), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 2 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
break;
case 1:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(21846), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 2 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(21850), { -16, -16, height },
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 1:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 2:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 3:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(21822), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 2 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(21826), { -16, -16, height },
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 1:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 2:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 3:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
}
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(additionalImages[trackElement.HasChain()][direction]),
{ -16, -16, height }, { { -16, -16, height + 27 }, { 32, 32, 0 } });
WoodenASupportsPaintSetupRotated(
session, kSupportType, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
break;
case 2:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(21848), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 2 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(21851), { -16, -16, height },
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
}
}
else
{
switch (direction)
{
case 0:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(21824), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 2 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(21827), { -16, -16, height },
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
}
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
break;
case 3:
if (trackElement.HasChain())
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(21847), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 2 } });
break;
}
}
else
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(21823), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 2 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(additionalImages[trackElement.HasChain()][direction]),
{ -16, -16, height }, { { -16, -16, height + 27 }, { 32, 32, 0 } });
WoodenASupportsPaintSetupRotated(
session, kSupportType, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
}
/** rct2: 0x0077853C */

View File

@ -1531,177 +1531,24 @@ namespace SingleRailRC
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (trackElement.HasChain())
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction,
session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT_DIAGONAL + 3)),
{ -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction,
session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_DIAGONAL + 1)),
{ -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
break;
case 1:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction,
session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT_DIAGONAL + 0)),
{ -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction,
session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_DIAGONAL + 0)),
{ -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
break;
case 2:
if (trackElement.HasChain())
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction,
session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT_DIAGONAL + 2)),
{ -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction,
session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_DIAGONAL + 0)),
{ -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
break;
case 3:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction,
session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT_DIAGONAL + 1)),
{ -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } });
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
break;
}
}
else
{
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction,
session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_DIAGONAL + 1)),
{ -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } });
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, kSupportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
break;
}
constexpr ImageIndex images[2][NumOrthogonalDirections] = {
{ SPR_G2_SINGLE_RAIL_TRACK_FLAT_DIAGONAL + 0, SPR_G2_SINGLE_RAIL_TRACK_FLAT_DIAGONAL + 1,
SPR_G2_SINGLE_RAIL_TRACK_FLAT_DIAGONAL + 0, SPR_G2_SINGLE_RAIL_TRACK_FLAT_DIAGONAL + 1 },
{ SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT_DIAGONAL + 0, SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT_DIAGONAL + 1,
SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT_DIAGONAL + 2, SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT_DIAGONAL + 3 },
};
TrackPaintUtilDiagTilesPaint(
session, 3, height, direction, trackSequence, images[trackElement.HasChain()], defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
if (trackSequence == 3)
MetalASupportsPaintSetupRotated(
session, kSupportType, MetalSupportPlace::LeftCorner, direction, 0, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(
session, PaintUtilRotateSegments(BlockedSegments::kDiagStraightFlat[trackSequence], direction), 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
}
static void TrackDiagBrakes(

View File

@ -5996,112 +5996,17 @@ static void StandUpRCTrackDiagFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (trackElement.HasChain())
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25756), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25694), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
constexpr ImageIndex images[2][NumOrthogonalDirections] = {
{ 25691, 25692, 25693, 25694 },
{ 25753, 25754, 25755, 25756 },
};
TrackPaintUtilDiagTilesPaint(
session, 3, height, direction, trackSequence, images[trackElement.HasChain()], defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
break;
case 1:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25753), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25691), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
break;
case 2:
if (trackElement.HasChain())
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25755), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25693), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
break;
case 3:
if (trackElement.HasChain())
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25754), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25692), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
MetalASupportsPaintSetupRotated(
session, kSupportType, MetalSupportPlace::LeftCorner, direction, 0, height, session.SupportColours);
break;
}
if (trackSequence == 3)
MetalASupportsPaintSetupRotated(
session, kSupportType, MetalSupportPlace::LeftCorner, direction, 0, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(
session, PaintUtilRotateSegments(BlockedSegments::kDiagStraightFlat[trackSequence], direction), 0xFFFF, 0);

View File

@ -1419,111 +1419,17 @@ static void SteeplechaseTrackDiagFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (trackElement.HasChain())
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(28760), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(28744), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
constexpr ImageIndex images[2][NumOrthogonalDirections] = {
{ 28741, 28742, 28743, 28744 },
{ 28757, 28758, 28759, 28760 },
};
TrackPaintUtilDiagTilesPaint(
session, 3, height, direction, trackSequence, images[trackElement.HasChain()], defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
break;
case 1:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(28757), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(28741), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
break;
case 2:
if (trackElement.HasChain())
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(28759), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(28743), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
break;
case 3:
if (trackElement.HasChain())
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(28758), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(28742), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
break;
}
}
MetalASupportsPaintSetupRotated(
session, kSupportType, MetalSupportPlace::LeftCorner, direction, 0, height, session.SupportColours);
break;
}
if (trackSequence == 3)
MetalASupportsPaintSetupRotated(
session, kSupportType, MetalSupportPlace::LeftCorner, direction, 0, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(
session, PaintUtilRotateSegments(BlockedSegments::kDiagStraightFlat[trackSequence], direction), 0xFFFF, 0);

View File

@ -10047,8 +10047,7 @@ static void WoodenRCTrackDiagFlat(
break;
}
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
break;
case 1:
if (trackElement.HasChain())
@ -10068,20 +10067,6 @@ static void WoodenRCTrackDiagFlat(
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24917), { -16, -16, height },
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 1:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 2:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 3:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
}
}
@ -10102,39 +10087,19 @@ static void WoodenRCTrackDiagFlat(
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24875), { -16, -16, height },
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 1:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 2:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 3:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
}
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
WoodenASupportsPaintSetupRotated(
session, kSupportType, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
break;
case 2:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(24049),
@ -10148,12 +10113,6 @@ static void WoodenRCTrackDiagFlat(
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24918), { -16, -16, height },
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
}
}
@ -10161,14 +10120,6 @@ static void WoodenRCTrackDiagFlat(
{
switch (direction)
{
case 0:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(24007),
@ -10182,17 +10133,13 @@ static void WoodenRCTrackDiagFlat(
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24876), { -16, -16, height },
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
WoodenASupportsPaintSetup(
session, kSupportType, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
}
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
WoodenASupportsPaintSetupRotated(
session, kSupportType, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
break;
case 3:
if (trackElement.HasChain())
@ -10223,10 +10170,12 @@ static void WoodenRCTrackDiagFlat(
break;
}
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32);
}
/** rct2: 0x008AC8B8 */

View File

@ -1791,13 +1791,6 @@ static void PaintMiniatureRailwayTrackRightEighthToOrthogonal(
PaintMiniatureRailwayTrackLeftEighthToDiag(session, ride, trackSequence, (direction + 3) % 4, height, trackElement);
}
static constexpr bool miniature_railway_diag_image_segment[][4] = {
{ false, true, false, false },
{ false, false, false, true },
{ false, false, true, false },
{ true, false, false, false },
};
static constexpr WoodenSupportSubType _diagSupportTypes[NumOrthogonalDirections][4] = {
{ WoodenSupportSubType::Null, WoodenSupportSubType::Corner0, WoodenSupportSubType::Corner2, WoodenSupportSubType::NeSw },
{ WoodenSupportSubType::Null, WoodenSupportSubType::Corner1, WoodenSupportSubType::Corner3, WoodenSupportSubType::NwSe },
@ -1848,7 +1841,7 @@ static void MiniatureRailwayTrackDiagFlat(
}
uint32_t imageId = miniature_railway_track_pieces_diag_flat[direction];
bool drawRail = miniature_railway_diag_image_segment[direction][trackSequence];
bool drawRail = kDiagSpriteMap[direction][trackSequence];
if (isSupported)
{
@ -1928,7 +1921,7 @@ static void MiniatureRailwayTrackDiag25DegUp(
};
uint32_t imageId = miniature_railway_track_pieces_diag_25_deg_up[direction];
bool drawRail = miniature_railway_diag_image_segment[direction][trackSequence];
bool drawRail = kDiagSpriteMap[direction][trackSequence];
static constexpr int8_t offsetB[] = { +8, 0, +8, +8 };
if (hasSupports)
{
@ -1980,7 +1973,7 @@ static void MiniatureRailwayTrackDiagFlatTo25DegUp(
}
uint32_t imageId = miniature_railway_track_pieces_diag_flat_to_25_deg_up[direction];
bool drawRail = miniature_railway_diag_image_segment[direction][trackSequence];
bool drawRail = kDiagSpriteMap[direction][trackSequence];
if (hasSupports)
{
@ -2054,7 +2047,7 @@ static void MiniatureRailwayTrackDiag25DegUpToFlat(
};
uint32_t imageId = miniature_railway_track_pieces_diag_25_deg_up_to_flat[direction];
bool drawRail = miniature_railway_diag_image_segment[direction][trackSequence];
bool drawRail = kDiagSpriteMap[direction][trackSequence];
static constexpr int8_t railOffsets[] = { +8, 0, +8, +8 };
@ -2124,7 +2117,7 @@ static void MiniatureRailwayTrackDiag25DegDown(
}
uint32_t imageId = miniature_railway_track_pieces_diag_25_deg_up[(direction + 2) % 4];
bool drawRail = miniature_railway_diag_image_segment[direction][trackSequence];
bool drawRail = kDiagSpriteMap[direction][trackSequence];
static constexpr int8_t railOffsets[] = { 0, +8, +8, +8 };
static constexpr int8_t offsetsB[4][4][2] = {
@ -2206,7 +2199,7 @@ static void MiniatureRailwayTrackDiagFlatTo25DegDown(
};
uint32_t imageId = miniature_railway_track_pieces_diag_25_deg_up_to_flat[(direction + 2) % 4];
bool drawRail = miniature_railway_diag_image_segment[direction][trackSequence];
bool drawRail = kDiagSpriteMap[direction][trackSequence];
static constexpr int8_t railOffsets[] = { 0, +8, +8, +8 };
if (hasSupports)
@ -2257,7 +2250,7 @@ static void MiniatureRailwayTrackDiag25DegDownToFlat(
}
uint32_t imageId = miniature_railway_track_pieces_diag_flat_to_25_deg_up[(direction + 2) % 4];
bool drawRail = miniature_railway_diag_image_segment[direction][trackSequence];
bool drawRail = kDiagSpriteMap[direction][trackSequence];
if (hasSupports)
{

View File

@ -137,14 +137,14 @@ enum
SPR_MONORAIL_DIAG_25_DEG_UP_S_N = 23340,
};
static constexpr uint32_t monorail_track_pieces_flat[4] = {
static constexpr uint32_t monorail_track_pieces_flat[NumOrthogonalDirections] = {
SPR_MONORAIL_FLAT_SW_NE,
SPR_MONORAIL_FLAT_NW_SE,
SPR_MONORAIL_FLAT_SW_NE,
SPR_MONORAIL_FLAT_NW_SE,
};
static constexpr uint32_t monorail_track_pieces_flat_quarter_turn_5_tiles[4][5] = {
static constexpr uint32_t monorail_track_pieces_flat_quarter_turn_5_tiles[NumOrthogonalDirections][5] = {
{
SPR_MONORAIL_QUARTER_TURN_5_TILES_SW_SE_PART_0,
SPR_MONORAIL_QUARTER_TURN_5_TILES_SW_SE_PART_1,
@ -175,28 +175,28 @@ static constexpr uint32_t monorail_track_pieces_flat_quarter_turn_5_tiles[4][5]
},
};
static constexpr uint32_t monorail_track_pieces_25_deg_up[4] = {
static constexpr uint32_t monorail_track_pieces_25_deg_up[NumOrthogonalDirections] = {
SPR_MONORAIL_25_DEG_UP_SW_NE,
SPR_MONORAIL_25_DEG_UP_NW_SE,
SPR_MONORAIL_25_DEG_UP_NE_SW,
SPR_MONORAIL_25_DEG_UP_SE_NW,
};
static constexpr uint32_t monorail_track_pieces_flat_to_25_deg_up[4] = {
static constexpr uint32_t monorail_track_pieces_flat_to_25_deg_up[NumOrthogonalDirections] = {
SPR_MONORAIL_FLAT_TO_25_DEG_UP_SW_NE,
SPR_MONORAIL_FLAT_TO_25_DEG_UP_NW_SE,
SPR_MONORAIL_FLAT_TO_25_DEG_UP_NE_SW,
SPR_MONORAIL_FLAT_TO_25_DEG_UP_SE_NW,
};
static constexpr uint32_t monorail_track_pieces_25_deg_up_to_flat[4] = {
static constexpr uint32_t monorail_track_pieces_25_deg_up_to_flat[NumOrthogonalDirections] = {
SPR_MONORAIL_25_DEG_UP_TO_FLAT_SW_NE,
SPR_MONORAIL_25_DEG_UP_TO_FLAT_NW_SE,
SPR_MONORAIL_25_DEG_UP_TO_FLAT_NE_SW,
SPR_MONORAIL_25_DEG_UP_TO_FLAT_SE_NW,
};
static constexpr uint32_t monorail_track_pieces_s_bend_left[2][4] = {
static constexpr uint32_t monorail_track_pieces_s_bend_left[2][NumOrthogonalDirections] = {
{
SPR_MONORAIL_S_BEND_LEFT_SW_NE_PART_0,
SPR_MONORAIL_S_BEND_LEFT_SW_NE_PART_1,
@ -211,7 +211,7 @@ static constexpr uint32_t monorail_track_pieces_s_bend_left[2][4] = {
},
};
static constexpr uint32_t monorail_track_pieces_s_bend_right[2][4] = {
static constexpr uint32_t monorail_track_pieces_s_bend_right[2][NumOrthogonalDirections] = {
{
SPR_MONORAIL_S_BEND_RIGHT_SW_NE_PART_0,
SPR_MONORAIL_S_BEND_RIGHT_SW_NE_PART_1,
@ -226,7 +226,7 @@ static constexpr uint32_t monorail_track_pieces_s_bend_right[2][4] = {
},
};
static constexpr uint32_t monorail_track_pieces_flat_quarter_turn_3_tiles[4][3] = {
static constexpr uint32_t monorail_track_pieces_flat_quarter_turn_3_tiles[NumOrthogonalDirections][3] = {
{
SPR_MONORAIL_QUARTER_TURN_3_TILES_SW_SE_PART_0,
SPR_MONORAIL_QUARTER_TURN_3_TILES_SW_SE_PART_1,
@ -359,34 +359,55 @@ static constexpr BoundBoxXY GhostTrainTrackPiecesLeftEightToDiagBoxes[4][4] = {
},
};
static constexpr uint32_t monorail_track_pieces_diag_flat[4] = {
static constexpr uint32_t monorail_track_pieces_diag_flat[NumOrthogonalDirections] = {
SPR_MONORAIL_DIAG_FLAT_W_E,
SPR_MONORAIL_DIAG_FLAT_N_S,
SPR_MONORAIL_DIAG_FLAT_E_W,
SPR_MONORAIL_DIAG_FLAT_S_N,
};
static constexpr uint32_t monorail_track_pieces_diag_flat_to_25_deg_up[4] = {
static constexpr uint32_t monorail_track_pieces_diag_flat_to_25_deg_up[NumOrthogonalDirections] = {
SPR_MONORAIL_DIAG_FLAT_TO_25_DEG_UP_W_E,
SPR_MONORAIL_DIAG_FLAT_TO_25_DEG_UP_N_S,
SPR_MONORAIL_DIAG_FLAT_TO_25_DEG_UP_E_W,
SPR_MONORAIL_DIAG_FLAT_TO_25_DEG_UP_S_N,
};
static constexpr uint32_t monorail_track_pieces_diag_25_deg_up_to_flat[4] = {
static constexpr uint32_t monorail_track_pieces_diag_25_deg_down_to_flat[NumOrthogonalDirections] = {
SPR_MONORAIL_DIAG_FLAT_TO_25_DEG_UP_E_W,
SPR_MONORAIL_DIAG_FLAT_TO_25_DEG_UP_S_N,
SPR_MONORAIL_DIAG_FLAT_TO_25_DEG_UP_W_E,
SPR_MONORAIL_DIAG_FLAT_TO_25_DEG_UP_N_S,
};
static constexpr uint32_t monorail_track_pieces_diag_25_deg_up_to_flat[NumOrthogonalDirections] = {
SPR_MONORAIL_DIAG_25_DEG_UP_TO_FLAT_W_E,
SPR_MONORAIL_DIAG_25_DEG_UP_TO_FLAT_N_S,
SPR_MONORAIL_DIAG_25_DEG_UP_TO_FLAT_E_W,
SPR_MONORAIL_DIAG_25_DEG_UP_TO_FLAT_S_N,
};
static constexpr uint32_t monorail_track_pieces_diag_25_deg_up[4] = {
static constexpr uint32_t monorail_track_pieces_diag_flat_to_25_deg_down[NumOrthogonalDirections] = {
SPR_MONORAIL_DIAG_25_DEG_UP_TO_FLAT_E_W,
SPR_MONORAIL_DIAG_25_DEG_UP_TO_FLAT_S_N,
SPR_MONORAIL_DIAG_25_DEG_UP_TO_FLAT_W_E,
SPR_MONORAIL_DIAG_25_DEG_UP_TO_FLAT_N_S,
};
static constexpr uint32_t monorail_track_pieces_diag_25_deg_up[NumOrthogonalDirections] = {
SPR_MONORAIL_DIAG_25_DEG_UP_W_E,
SPR_MONORAIL_DIAG_25_DEG_UP_N_S,
SPR_MONORAIL_DIAG_25_DEG_UP_E_W,
SPR_MONORAIL_DIAG_25_DEG_UP_S_N,
};
static constexpr uint32_t monorail_track_pieces_diag_25_deg_down[NumOrthogonalDirections] = {
SPR_MONORAIL_DIAG_25_DEG_UP_E_W,
SPR_MONORAIL_DIAG_25_DEG_UP_S_N,
SPR_MONORAIL_DIAG_25_DEG_UP_W_E,
SPR_MONORAIL_DIAG_25_DEG_UP_N_S,
};
/** rct2: 0x008AE1AC */
static void PaintMonorailTrackFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
@ -1117,8 +1138,7 @@ static void PaintMonorailTrackLeftEighthToOrthogonal(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
static constexpr uint8_t map[] = { 4, 2, 3, 1, 0 };
trackSequence = map[trackSequence];
trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
PaintMonorailTrackRightEighthToDiag(session, ride, trackSequence, (direction + 2) % 4, height, trackElement);
}
@ -1127,28 +1147,18 @@ static void PaintMonorailTrackRightEighthToOrthogonal(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
static constexpr uint8_t map[] = { 4, 2, 3, 1, 0 };
trackSequence = map[trackSequence];
trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
PaintMonorailTrackLeftEighthToDiag(session, ride, trackSequence, (direction + 3) % 4, height, trackElement);
}
static constexpr bool monorail_diag_image_segment[][4] = {
{ false, true, false, false },
{ false, false, false, true },
{ false, false, true, false },
{ true, false, false, false },
};
/** rct2: 0x008AE2AC */
static void PaintMonorailTrackDiagFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
if (monorail_diag_image_segment[direction][trackSequence])
{
auto imageId = session.TrackColours.WithIndex(monorail_track_pieces_diag_flat[direction]);
PaintAddImageAsParent(session, imageId, { -16, -16, height }, { { -16, -16, height }, { 32, 32, 2 } });
}
TrackPaintUtilDiagTilesPaint(
session, 2, height, direction, trackSequence, monorail_track_pieces_diag_flat, defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
if (trackSequence == 3)
{
@ -1165,11 +1175,9 @@ static void PaintMonorailTrackDiag25DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
if (monorail_diag_image_segment[direction][trackSequence])
{
auto imageId = session.TrackColours.WithIndex(monorail_track_pieces_diag_25_deg_up[direction]);
PaintAddImageAsParent(session, imageId, { -16, -16, height }, { { -16, -16, height }, { 32, 32, 2 } });
}
TrackPaintUtilDiagTilesPaint(
session, 2, height, direction, trackSequence, monorail_track_pieces_diag_25_deg_up, defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
if (trackSequence == 3)
{
@ -1186,11 +1194,9 @@ static void PaintMonorailTrackDiagFlatTo25DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
if (monorail_diag_image_segment[direction][trackSequence])
{
auto imageId = session.TrackColours.WithIndex(monorail_track_pieces_diag_flat_to_25_deg_up[direction]);
PaintAddImageAsParent(session, imageId, { -16, -16, height }, { { -16, -16, height }, { 32, 32, 2 } });
}
TrackPaintUtilDiagTilesPaint(
session, 2, height, direction, trackSequence, monorail_track_pieces_diag_flat_to_25_deg_up, defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
if (trackSequence == 3)
{
@ -1207,11 +1213,9 @@ static void PaintMonorailTrackDiag25DegUpToFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
if (monorail_diag_image_segment[direction][trackSequence])
{
auto imageId = session.TrackColours.WithIndex(monorail_track_pieces_diag_25_deg_up_to_flat[direction]);
PaintAddImageAsParent(session, imageId, { -16, -16, height }, { { -16, -16, height }, { 32, 32, 2 } });
}
TrackPaintUtilDiagTilesPaint(
session, 2, height, direction, trackSequence, monorail_track_pieces_diag_25_deg_up_to_flat, defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
if (trackSequence == 3)
{
@ -1228,11 +1232,9 @@ static void PaintMonorailTrackDiag25DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
if (monorail_diag_image_segment[direction][trackSequence])
{
auto imageId = session.TrackColours.WithIndex(monorail_track_pieces_diag_25_deg_up[(direction + 2) % 4]);
PaintAddImageAsParent(session, imageId, { -16, -16, height }, { { -16, -16, height }, { 32, 32, 2 } });
}
TrackPaintUtilDiagTilesPaint(
session, 2, height, direction, trackSequence, monorail_track_pieces_diag_25_deg_down, defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
if (trackSequence == 3)
{
@ -1249,11 +1251,9 @@ static void PaintMonorailTrackDiagFlatTo25DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
if (monorail_diag_image_segment[direction][trackSequence])
{
auto imageId = session.TrackColours.WithIndex(monorail_track_pieces_diag_25_deg_up_to_flat[(direction + 2) % 4]);
PaintAddImageAsParent(session, imageId, { -16, -16, height }, { { -16, -16, height }, { 32, 32, 2 } });
}
TrackPaintUtilDiagTilesPaint(
session, 2, height, direction, trackSequence, monorail_track_pieces_diag_flat_to_25_deg_down, defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
if (trackSequence == 3)
{
@ -1270,11 +1270,9 @@ static void PaintMonorailTrackDiag25DegDownToFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
if (monorail_diag_image_segment[direction][trackSequence])
{
auto imageId = session.TrackColours.WithIndex(monorail_track_pieces_diag_flat_to_25_deg_up[(direction + 2) % 4]);
PaintAddImageAsParent(session, imageId, { -16, -16, height }, { { -16, -16, height }, { 32, 32, 2 } });
}
TrackPaintUtilDiagTilesPaint(
session, 2, height, direction, trackSequence, monorail_track_pieces_diag_25_deg_down_to_flat, defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
if (trackSequence == 3)
{