mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2026-07-21 01:59:44 +00:00
Codechange: use EnumIndexArray for signal sprite and string tables
This commit is contained in:
committed by
Peter Nelson
parent
549f357a19
commit
ebb77e592c
+1
-1
@@ -147,7 +147,7 @@ public:
|
||||
SpriteID build_depot; ///< button for building depots
|
||||
SpriteID build_tunnel; ///< button for building a tunnel
|
||||
SpriteID convert_rail; ///< button for converting rail
|
||||
SpriteID signals[SIGTYPE_END][2][2]; ///< signal GUI sprites (type, variant, state)
|
||||
EnumIndexArray<EnumIndexArray<EnumIndexArray<SpriteID, SignalState, SIGNAL_STATE_END>, SignalVariant, SIG_END>, SignalType, SIGTYPE_END> signals; ///< signal GUI sprites (type, variant, state)
|
||||
} gui_sprites;
|
||||
|
||||
struct {
|
||||
|
||||
+10
-10
@@ -95,20 +95,20 @@ void ResolveRailTypeGUISprites(RailTypeInfo *rti)
|
||||
}
|
||||
|
||||
/* Array of default GUI signal sprite numbers. */
|
||||
const SpriteID _signal_lookup[2][SIGTYPE_END] = {
|
||||
const EnumIndexArray<EnumIndexArray<SpriteID, SignalType, SIGTYPE_END>, SignalVariant, SIG_END> _signal_lookup{{{
|
||||
{SPR_IMG_SIGNAL_ELECTRIC_NORM, SPR_IMG_SIGNAL_ELECTRIC_ENTRY, SPR_IMG_SIGNAL_ELECTRIC_EXIT,
|
||||
SPR_IMG_SIGNAL_ELECTRIC_COMBO, SPR_IMG_SIGNAL_ELECTRIC_PBS, SPR_IMG_SIGNAL_ELECTRIC_PBS_OWAY},
|
||||
|
||||
{SPR_IMG_SIGNAL_SEMAPHORE_NORM, SPR_IMG_SIGNAL_SEMAPHORE_ENTRY, SPR_IMG_SIGNAL_SEMAPHORE_EXIT,
|
||||
SPR_IMG_SIGNAL_SEMAPHORE_COMBO, SPR_IMG_SIGNAL_SEMAPHORE_PBS, SPR_IMG_SIGNAL_SEMAPHORE_PBS_OWAY},
|
||||
};
|
||||
}}};
|
||||
|
||||
for (SignalType type = SIGTYPE_BLOCK; type < SIGTYPE_END; type = (SignalType)(type + 1)) {
|
||||
for (SignalVariant var = SIG_ELECTRIC; var <= SIG_SEMAPHORE; var = (SignalVariant)(var + 1)) {
|
||||
SpriteID red = GetCustomSignalSprite(rti, INVALID_TILE, type, var, SIGNAL_STATE_RED, true);
|
||||
for (SignalType type = SIGTYPE_BLOCK; type < SIGTYPE_END; type = static_cast<SignalType>(to_underlying(type) + 1)) {
|
||||
for (SignalVariant var : {SIG_ELECTRIC, SIG_SEMAPHORE}) {
|
||||
SpriteID red = GetCustomSignalSprite(rti, INVALID_TILE, type, var, SIGNAL_STATE_RED, true);
|
||||
SpriteID green = GetCustomSignalSprite(rti, INVALID_TILE, type, var, SIGNAL_STATE_GREEN, true);
|
||||
rti->gui_sprites.signals[type][var][0] = (red != 0) ? red + SIGNAL_TO_SOUTH : _signal_lookup[var][type];
|
||||
rti->gui_sprites.signals[type][var][1] = (green != 0) ? green + SIGNAL_TO_SOUTH : _signal_lookup[var][type] + 1;
|
||||
rti->gui_sprites.signals[type][var][SIGNAL_STATE_RED] = (red != 0) ? red + SIGNAL_TO_SOUTH : _signal_lookup[var][type];
|
||||
rti->gui_sprites.signals[type][var][SIGNAL_STATE_GREEN] = (green != 0) ? green + SIGNAL_TO_SOUTH : _signal_lookup[var][type] + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2838,7 +2838,7 @@ static void GetTileDesc_Rail(TileIndex tile, TileDesc &td)
|
||||
break;
|
||||
|
||||
case RailTileType::Signals: {
|
||||
static const StringID signal_type[6][6] = {
|
||||
static constexpr EnumIndexArray<EnumIndexArray<StringID, SignalType, SIGTYPE_END>, SignalType, SIGTYPE_END> signal_type{{{
|
||||
{
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS,
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS,
|
||||
@@ -2886,8 +2886,8 @@ static void GetTileDesc_Rail(TileIndex tile, TileDesc &td)
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS,
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS,
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS
|
||||
}
|
||||
};
|
||||
},
|
||||
}}};
|
||||
|
||||
SignalType primary_signal;
|
||||
SignalType secondary_signal;
|
||||
|
||||
+7
-7
@@ -1554,11 +1554,11 @@ public:
|
||||
this->sig_sprite_size.height = 0;
|
||||
this->sig_sprite_bottom_offset = 0;
|
||||
const RailTypeInfo *rti = GetRailTypeInfo(_cur_railtype);
|
||||
for (uint type = SIGTYPE_BLOCK; type < SIGTYPE_END; type++) {
|
||||
for (uint variant = SIG_ELECTRIC; variant <= SIG_SEMAPHORE; variant++) {
|
||||
for (uint lowered = 0; lowered < 2; lowered++) {
|
||||
for (SignalType type = SIGTYPE_BLOCK; type < SIGTYPE_END; type = static_cast<SignalType>(to_underlying(type) + 1)) {
|
||||
for (SignalVariant variant : {SIG_ELECTRIC, SIG_SEMAPHORE}) {
|
||||
for (SignalState state : {SIGNAL_STATE_RED, SIGNAL_STATE_GREEN}) {
|
||||
Point offset;
|
||||
Dimension sprite_size = GetSpriteSize(rti->gui_sprites.signals[type][variant][lowered], &offset);
|
||||
Dimension sprite_size = GetSpriteSize(rti->gui_sprites.signals[type][variant][state], &offset);
|
||||
this->sig_sprite_bottom_offset = std::max<int>(this->sig_sprite_bottom_offset, sprite_size.height);
|
||||
this->sig_sprite_size.width = std::max<int>(this->sig_sprite_size.width, sprite_size.width - offset.x);
|
||||
this->sig_sprite_size.height = std::max<int>(this->sig_sprite_size.height, sprite_size.height - offset.y);
|
||||
@@ -1593,9 +1593,9 @@ public:
|
||||
{
|
||||
if (IsInsideMM(widget, WID_BS_SEMAPHORE_NORM, WID_BS_ELECTRIC_PBS_OWAY + 1)) {
|
||||
/* Extract signal from widget number. */
|
||||
int type = (widget - WID_BS_SEMAPHORE_NORM) % SIGTYPE_END;
|
||||
int var = SIG_SEMAPHORE - (widget - WID_BS_SEMAPHORE_NORM) / SIGTYPE_END; // SignalVariant order is reversed compared to the widgets.
|
||||
SpriteID sprite = GetRailTypeInfo(_cur_railtype)->gui_sprites.signals[type][var][this->IsWidgetLowered(widget)];
|
||||
SignalType type = static_cast<SignalType>((widget - WID_BS_SEMAPHORE_NORM) % SIGTYPE_END);
|
||||
SignalVariant var = static_cast<SignalVariant>(SIG_SEMAPHORE - (widget - WID_BS_SEMAPHORE_NORM) / SIGTYPE_END); // SignalVariant order is reversed compared to the widgets.
|
||||
SpriteID sprite = GetRailTypeInfo(_cur_railtype)->gui_sprites.signals[type][var][static_cast<SignalState>(this->IsWidgetLowered(widget))];
|
||||
|
||||
this->DrawSignalSprite(r, sprite);
|
||||
}
|
||||
|
||||
+3
-1
@@ -16,6 +16,7 @@
|
||||
enum SignalVariant : uint8_t {
|
||||
SIG_ELECTRIC = 0, ///< Light signal
|
||||
SIG_SEMAPHORE = 1, ///< Old-fashioned semaphore signal
|
||||
SIG_END, ///< End marker.
|
||||
};
|
||||
|
||||
|
||||
@@ -28,7 +29,7 @@ enum SignalType : uint8_t {
|
||||
SIGTYPE_PBS = 4, ///< normal pbs signal
|
||||
SIGTYPE_PBS_ONEWAY = 5, ///< no-entry signal
|
||||
|
||||
SIGTYPE_END,
|
||||
SIGTYPE_END, /// End marker.
|
||||
SIGTYPE_LAST = SIGTYPE_PBS_ONEWAY,
|
||||
SIGTYPE_LAST_NOPBS = SIGTYPE_COMBO,
|
||||
};
|
||||
@@ -42,6 +43,7 @@ DECLARE_ENUM_AS_ADDABLE(SignalType)
|
||||
enum SignalState : uint8_t {
|
||||
SIGNAL_STATE_RED = 0, ///< The signal is red
|
||||
SIGNAL_STATE_GREEN = 1, ///< The signal is green
|
||||
SIGNAL_STATE_END, ///< End marker.
|
||||
};
|
||||
|
||||
#endif /* SIGNAL_TYPE_H */
|
||||
|
||||
Reference in New Issue
Block a user