Skip to content

Commit

Permalink
Add WoodenSupportType::Null, replace std::nullopt with it
Browse files Browse the repository at this point in the history
  • Loading branch information
Gymnasiast committed Feb 15, 2024
1 parent 801f711 commit e62c8df
Show file tree
Hide file tree
Showing 9 changed files with 209 additions and 205 deletions.
4 changes: 4 additions & 0 deletions src/openrct2/paint/Supports.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -704,6 +704,7 @@ bool WoodenASupportsPaintSetup(
PaintSession& session, WoodenSupportType supportType, WoodenSupportSubType subType, int32_t height, ImageId imageTemplate,
WoodenSupportTransitionType transitionType, Direction direction)
{
assert(subType != WoodenSupportSubType::Null);
int32_t oldSupportType = (EnumValue(supportType) * 6) + EnumValue(subType);
int32_t special = GetSpecialOffsetForTransitionType(transitionType, direction);

Expand All @@ -714,6 +715,7 @@ bool WoodenASupportsPaintSetupRotated(
PaintSession& session, WoodenSupportType supportType, WoodenSupportSubType subType, Direction direction, int32_t height,
ImageId imageTemplate, WoodenSupportTransitionType transitionType)
{
assert(subType != WoodenSupportSubType::Null);
subType = rotatedWoodenSupportSubTypes[EnumValue(subType)][direction];
return WoodenASupportsPaintSetup(session, supportType, subType, height, imageTemplate, transitionType, direction);
}
Expand Down Expand Up @@ -844,6 +846,7 @@ bool WoodenBSupportsPaintSetup(
PaintSession& session, WoodenSupportType supportType, WoodenSupportSubType subType, int32_t height, ImageId imageTemplate,
WoodenSupportTransitionType transitionType, Direction direction)
{
assert(subType != WoodenSupportSubType::Null);
int32_t oldSupportType = (EnumValue(supportType) * 6) + EnumValue(subType);
int32_t special = GetSpecialOffsetForTransitionType(transitionType, direction);

Expand All @@ -854,6 +857,7 @@ bool WoodenBSupportsPaintSetupRotated(
PaintSession& session, WoodenSupportType supportType, WoodenSupportSubType subType, Direction direction, int32_t height,
ImageId imageTemplate, WoodenSupportTransitionType transitionType)
{
assert(subType != WoodenSupportSubType::Null);
subType = rotatedWoodenSupportSubTypes[EnumValue(subType)][direction];
return WoodenBSupportsPaintSetup(session, supportType, subType, height, imageTemplate, transitionType, direction);
}
Expand Down
2 changes: 2 additions & 0 deletions src/openrct2/paint/Supports.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ enum class WoodenSupportSubType : uint8_t
Corner1 = 3,
Corner2 = 4,
Corner3 = 5,

Null,
};

enum class WoodenSupportTransitionType : uint8_t
Expand Down
27 changes: 14 additions & 13 deletions src/openrct2/ride/TrackPaint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1523,19 +1523,20 @@ void TrackPaintUtilRightQuarterTurn5TilesTunnel(
void TrackPaintUtilRightQuarterTurn5TilesWoodenSupports(
PaintSession& session, int16_t height, Direction direction, uint8_t trackSequence)
{
if (trackSequence != 1 && trackSequence != 4)
{
static constexpr std::optional<WoodenSupportSubType> supportTypes[][7] = {
{ WoodenSupportSubType::NeSw, std::nullopt, WoodenSupportSubType::Corner2, WoodenSupportSubType::Corner0,
std::nullopt, WoodenSupportSubType::Corner2, WoodenSupportSubType::NwSe },
{ WoodenSupportSubType::NwSe, std::nullopt, WoodenSupportSubType::Corner3, WoodenSupportSubType::Corner1,
std::nullopt, WoodenSupportSubType::Corner3, WoodenSupportSubType::NeSw },
{ WoodenSupportSubType::NeSw, std::nullopt, WoodenSupportSubType::Corner0, WoodenSupportSubType::Corner2,
std::nullopt, WoodenSupportSubType::Corner0, WoodenSupportSubType::NwSe },
{ WoodenSupportSubType::NwSe, std::nullopt, WoodenSupportSubType::Corner1, WoodenSupportSubType::Corner3,
std::nullopt, WoodenSupportSubType::Corner1, WoodenSupportSubType::NeSw },
};
auto supportType = supportTypes[direction][trackSequence].value();
static constexpr WoodenSupportSubType supportTypes[NumOrthogonalDirections][7] = {
{ WoodenSupportSubType::NeSw, WoodenSupportSubType::Null, WoodenSupportSubType::Corner2, WoodenSupportSubType::Corner0,
WoodenSupportSubType::Null, WoodenSupportSubType::Corner2, WoodenSupportSubType::NwSe },
{ WoodenSupportSubType::NwSe, WoodenSupportSubType::Null, WoodenSupportSubType::Corner3, WoodenSupportSubType::Corner1,
WoodenSupportSubType::Null, WoodenSupportSubType::Corner3, WoodenSupportSubType::NeSw },
{ WoodenSupportSubType::NeSw, WoodenSupportSubType::Null, WoodenSupportSubType::Corner0, WoodenSupportSubType::Corner2,
WoodenSupportSubType::Null, WoodenSupportSubType::Corner0, WoodenSupportSubType::NwSe },
{ WoodenSupportSubType::NwSe, WoodenSupportSubType::Null, WoodenSupportSubType::Corner1, WoodenSupportSubType::Corner3,
WoodenSupportSubType::Null, WoodenSupportSubType::Corner1, WoodenSupportSubType::NeSw },
};

const auto supportType = supportTypes[direction][trackSequence];
if (supportType != WoodenSupportSubType::Null)
{
WoodenASupportsPaintSetup(session, WoodenSupportType::Truss, supportType, height, session.SupportColours);
}
}
Expand Down
50 changes: 25 additions & 25 deletions src/openrct2/ride/coaster/ClassicWoodenRollerCoaster.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -762,15 +762,15 @@ static void ClassicWoodenRCTrackBankedRightQuarterTurn5(
},
},
};
static constexpr std::optional<WoodenSupportSubType> supportType[4][7] = {
{ WoodenSupportSubType::NeSw, std::nullopt, WoodenSupportSubType::Corner2, WoodenSupportSubType::Corner0, std::nullopt,
WoodenSupportSubType::Corner2, WoodenSupportSubType::NwSe },
{ WoodenSupportSubType::NwSe, std::nullopt, WoodenSupportSubType::Corner3, WoodenSupportSubType::Corner1, std::nullopt,
WoodenSupportSubType::Corner3, WoodenSupportSubType::NeSw },
{ WoodenSupportSubType::NeSw, std::nullopt, WoodenSupportSubType::Corner0, WoodenSupportSubType::Corner2, std::nullopt,
WoodenSupportSubType::Corner0, WoodenSupportSubType::NwSe },
{ WoodenSupportSubType::NwSe, std::nullopt, WoodenSupportSubType::Corner1, WoodenSupportSubType::Corner3, std::nullopt,
WoodenSupportSubType::Corner1, WoodenSupportSubType::NeSw },
static constexpr WoodenSupportSubType supportType[NumOrthogonalDirections][7] = {
{ WoodenSupportSubType::NeSw, WoodenSupportSubType::Null, WoodenSupportSubType::Corner2, WoodenSupportSubType::Corner0,
WoodenSupportSubType::Null, WoodenSupportSubType::Corner2, WoodenSupportSubType::NwSe },
{ WoodenSupportSubType::NwSe, WoodenSupportSubType::Null, WoodenSupportSubType::Corner3, WoodenSupportSubType::Corner1,
WoodenSupportSubType::Null, WoodenSupportSubType::Corner3, WoodenSupportSubType::NeSw },
{ WoodenSupportSubType::NeSw, WoodenSupportSubType::Null, WoodenSupportSubType::Corner0, WoodenSupportSubType::Corner2,
WoodenSupportSubType::Null, WoodenSupportSubType::Corner0, WoodenSupportSubType::NwSe },
{ WoodenSupportSubType::NwSe, WoodenSupportSubType::Null, WoodenSupportSubType::Corner1, WoodenSupportSubType::Corner3,
WoodenSupportSubType::Null, WoodenSupportSubType::Corner1, WoodenSupportSubType::NeSw },
};

static constexpr int blockedSegments[7] = {
Expand All @@ -787,10 +787,10 @@ static void ClassicWoodenRCTrackBankedRightQuarterTurn5(
WoodenRCTrackPaintBb<true>(session, &imageIds[direction][trackSequence][1], height);
TrackPaintUtilRightQuarterTurn5TilesTunnel(session, height, direction, trackSequence, TUNNEL_SQUARE_FLAT);

if (supportType[direction][trackSequence].has_value())
if (supportType[direction][trackSequence] != WoodenSupportSubType::Null)
{
WoodenASupportsPaintSetup(
session, WoodenSupportType::Truss, supportType[direction][trackSequence].value(), height, session.SupportColours);
session, WoodenSupportType::Truss, supportType[direction][trackSequence], height, session.SupportColours);
}
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(blockedSegments[trackSequence], direction), 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
Expand Down Expand Up @@ -1133,15 +1133,15 @@ static void ClassicWoodenRCTrackLeftEighthBankToDiag(
},
};

static constexpr std::optional<WoodenSupportSubType> supportType[NumOrthogonalDirections][5] = {
static constexpr WoodenSupportSubType supportType[NumOrthogonalDirections][5] = {
{ WoodenSupportSubType::NeSw, WoodenSupportSubType::NeSw, WoodenSupportSubType::Corner1, WoodenSupportSubType::Corner3,
std::nullopt },
WoodenSupportSubType::Null },
{ WoodenSupportSubType::NwSe, WoodenSupportSubType::NwSe, WoodenSupportSubType::Corner2, WoodenSupportSubType::Corner0,
std::nullopt },
WoodenSupportSubType::Null },
{ WoodenSupportSubType::NeSw, WoodenSupportSubType::NeSw, WoodenSupportSubType::Corner3, WoodenSupportSubType::Corner1,
std::nullopt },
WoodenSupportSubType::Null },
{ WoodenSupportSubType::NwSe, WoodenSupportSubType::NwSe, WoodenSupportSubType::Corner0, WoodenSupportSubType::Corner2,
std::nullopt },
WoodenSupportSubType::Null },
};

static constexpr int blockedSegments[5] = {
Expand All @@ -1157,10 +1157,10 @@ static void ClassicWoodenRCTrackLeftEighthBankToDiag(
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}

if (supportType[direction][trackSequence].has_value())
if (supportType[direction][trackSequence] != WoodenSupportSubType::Null)
{
WoodenASupportsPaintSetup(
session, WoodenSupportType::Truss, supportType[direction][trackSequence].value(), height, session.SupportColours);
session, WoodenSupportType::Truss, supportType[direction][trackSequence], height, session.SupportColours);
}
WoodenRCTrackPaintBb<true>(session, &imageIds[direction][trackSequence][0], height);
WoodenRCTrackPaintBb<true>(session, &imageIds[direction][trackSequence][1], height);
Expand Down Expand Up @@ -1336,15 +1336,15 @@ static void ClassicWoodenRCTrackRightEighthBankToDiag(
},
};

static constexpr std::optional<WoodenSupportSubType> supportType[NumOrthogonalDirections][5] = {
static constexpr WoodenSupportSubType supportType[NumOrthogonalDirections][5] = {
{ WoodenSupportSubType::NeSw, WoodenSupportSubType::NeSw, WoodenSupportSubType::Corner0, WoodenSupportSubType::Corner2,
std::nullopt },
WoodenSupportSubType::Null },
{ WoodenSupportSubType::NwSe, WoodenSupportSubType::NwSe, WoodenSupportSubType::Corner1, WoodenSupportSubType::Corner3,
std::nullopt },
WoodenSupportSubType::Null },
{ WoodenSupportSubType::NeSw, WoodenSupportSubType::NeSw, WoodenSupportSubType::Corner2, WoodenSupportSubType::Corner0,
std::nullopt },
WoodenSupportSubType::Null },
{ WoodenSupportSubType::NwSe, WoodenSupportSubType::NwSe, WoodenSupportSubType::Corner3, WoodenSupportSubType::Corner1,
std::nullopt },
WoodenSupportSubType::Null },
};

static constexpr int blockedSegments[5] = {
Expand All @@ -1360,10 +1360,10 @@ static void ClassicWoodenRCTrackRightEighthBankToDiag(
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}

if (supportType[direction][trackSequence].has_value())
if (supportType[direction][trackSequence] != WoodenSupportSubType::Null)
{
WoodenASupportsPaintSetup(
session, WoodenSupportType::Truss, supportType[direction][trackSequence].value(), height, session.SupportColours);
session, WoodenSupportType::Truss, supportType[direction][trackSequence], height, session.SupportColours);
}
WoodenRCTrackPaintBb<true>(session, &imageIds[direction][trackSequence][0], height);
WoodenRCTrackPaintBb<true>(session, &imageIds[direction][trackSequence][1], height);
Expand Down
15 changes: 7 additions & 8 deletions src/openrct2/ride/coaster/MineTrainCoaster.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,13 @@ static constexpr const uint32_t MinetrainRCDiagBlockBrakeImages[2][NumOrthogonal
};

// Magic number 4 refers to the number of track blocks in a diagonal track element
static constexpr const std::optional<WoodenSupportSubType> MineTrainRCDiagonalSupports[4][NumOrthogonalDirections] = {
{ std::nullopt, std::nullopt, std::nullopt, std::nullopt },
static constexpr const WoodenSupportSubType MineTrainRCDiagonalSupports[4][NumOrthogonalDirections] = {
{ WoodenSupportSubType::Null, WoodenSupportSubType::Null, WoodenSupportSubType::Null, WoodenSupportSubType::Null },
{ WoodenSupportSubType::Corner0, WoodenSupportSubType::Corner1, WoodenSupportSubType::Corner2,
WoodenSupportSubType::Corner3 },
{ WoodenSupportSubType::Corner2, WoodenSupportSubType::Corner3, WoodenSupportSubType::Corner0,
WoodenSupportSubType::Corner1 },
{ std::nullopt, std::nullopt, std::nullopt, std::nullopt },
{ WoodenSupportSubType::Null, WoodenSupportSubType::Null, WoodenSupportSubType::Null, WoodenSupportSubType::Null },
};

/** rct2: 0x0071BFA4 */
Expand Down Expand Up @@ -5091,11 +5091,10 @@ static void MineTrainRCTrackDiagBrakes(
session, 1, height, direction, trackSequence, session.TrackColours, MinetrainRCDiagBrakeImages, defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);

if (MineTrainRCDiagonalSupports[trackSequence][direction].has_value())
if (MineTrainRCDiagonalSupports[trackSequence][direction] != WoodenSupportSubType::Null)
{
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, MineTrainRCDiagonalSupports[trackSequence][0].value(), height,
session.SupportColours);
session, WoodenSupportType::Mine, MineTrainRCDiagonalSupports[trackSequence][0], height, session.SupportColours);
}

PaintUtilSetSegmentSupportHeight(session, SEGMENTS_ALL, 0xFFFF, 0);
Expand All @@ -5111,10 +5110,10 @@ static void MineTrainRCTrackDiagBlockBrakes(
MinetrainRCDiagBlockBrakeImages[trackElement.IsBrakeClosed()], defaultDiagTileOffsets, defaultDiagBoundLengths,
nullptr);

if (MineTrainRCDiagonalSupports[trackSequence][direction].has_value())
if (MineTrainRCDiagonalSupports[trackSequence][direction] != WoodenSupportSubType::Null)
{
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, MineTrainRCDiagonalSupports[trackSequence][0].value(), height,
session, WoodenSupportType::Mine, MineTrainRCDiagonalSupports[trackSequence][direction], height,
session.SupportColours);
}

Expand Down
Loading

0 comments on commit e62c8df

Please sign in to comment.