Move signal style mask variables into a single struct
This commit is contained in:
@@ -89,7 +89,7 @@ NewSignalsResolverObject::NewSignalsResolverObject(const GRFFile *grffile, TileI
|
|||||||
uint GetNewSignalsRestrictedSignalsInfo(const TraceRestrictProgram *prog, TileIndex tile, uint8 signal_style)
|
uint GetNewSignalsRestrictedSignalsInfo(const TraceRestrictProgram *prog, TileIndex tile, uint8 signal_style)
|
||||||
{
|
{
|
||||||
uint result = 0;
|
uint result = 0;
|
||||||
if (signal_style != 0 && HasBit(_always_reserve_through_style_mask, signal_style)) result |= 2;
|
if (signal_style != 0 && HasBit(_signal_style_masks.always_reserve_through, signal_style)) result |= 2;
|
||||||
if (prog != nullptr) {
|
if (prog != nullptr) {
|
||||||
result |= 1;
|
result |= 1;
|
||||||
if ((prog->actions_used_flags & TRPAUF_RESERVE_THROUGH_ALWAYS) && !IsTileType(tile, MP_TUNNELBRIDGE)) result |= 2;
|
if ((prog->actions_used_flags & TRPAUF_RESERVE_THROUGH_ALWAYS) && !IsTileType(tile, MP_TUNNELBRIDGE)) result |= 2;
|
||||||
|
@@ -661,10 +661,10 @@ static PBSTileInfo FollowReservation(Owner o, RailTypes rts, TileIndex tile, Tra
|
|||||||
if (signal_speed == 0 || (speed_restriction != 0 && speed_restriction < signal_speed)) signal_speed = speed_restriction;
|
if (signal_speed == 0 || (speed_restriction != 0 && speed_restriction < signal_speed)) signal_speed = speed_restriction;
|
||||||
uint8 signal_style = GetSignalStyle(tile, TrackdirToTrack(trackdir));
|
uint8 signal_style = GetSignalStyle(tile, TrackdirToTrack(trackdir));
|
||||||
uint16 signal_flags = signal_style << 8;
|
uint16 signal_flags = signal_style << 8;
|
||||||
if (HasBit(_non_aspect_inc_style_mask, signal_style)) {
|
if (HasBit(_signal_style_masks.non_aspect_inc, signal_style)) {
|
||||||
SetBit(signal_flags, TRSLAI_NO_ASPECT_INC);
|
SetBit(signal_flags, TRSLAI_NO_ASPECT_INC);
|
||||||
}
|
}
|
||||||
if (HasBit(_next_only_style_mask, signal_style)) {
|
if (HasBit(_signal_style_masks.next_only, signal_style)) {
|
||||||
SetBit(signal_flags, TRSLAI_NEXT_ONLY);
|
SetBit(signal_flags, TRSLAI_NEXT_ONLY);
|
||||||
}
|
}
|
||||||
lookahead->AddSignal(signal_speed, 0, z, signal_flags);
|
lookahead->AddSignal(signal_speed, 0, z, signal_flags);
|
||||||
|
@@ -1531,7 +1531,7 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
|||||||
if (convert_signal) return_cmd_error(STR_ERROR_THERE_ARE_NO_SIGNALS);
|
if (convert_signal) return_cmd_error(STR_ERROR_THERE_ARE_NO_SIGNALS);
|
||||||
if (!(p2_signal_in && p2_signal_out)) {
|
if (!(p2_signal_in && p2_signal_out)) {
|
||||||
cost = CommandCost(EXPENSES_CONSTRUCTION, _price[PR_BUILD_SIGNALS] * ((GetTunnelBridgeLength(tile, tile_exit) + 4) >> 2) * (bidirectional ? 2 : 1)); // minimal 1
|
cost = CommandCost(EXPENSES_CONSTRUCTION, _price[PR_BUILD_SIGNALS] * ((GetTunnelBridgeLength(tile, tile_exit) + 4) >> 2) * (bidirectional ? 2 : 1)); // minimal 1
|
||||||
if (HasBit(_no_tunnel_bridge_style_mask, signal_style)) return_cmd_error(STR_ERROR_UNSUITABLE_SIGNAL_TYPE);
|
if (HasBit(_signal_style_masks.no_tunnel_bridge, signal_style)) return_cmd_error(STR_ERROR_UNSUITABLE_SIGNAL_TYPE);
|
||||||
if (!is_style_usable(sigvar, signal_style, bidirectional ? 0x11 : (is_pbs ? 0x21 : 0x1))) return_cmd_error(STR_ERROR_UNSUITABLE_SIGNAL_TYPE);
|
if (!is_style_usable(sigvar, signal_style, bidirectional ? 0x11 : (is_pbs ? 0x21 : 0x1))) return_cmd_error(STR_ERROR_UNSUITABLE_SIGNAL_TYPE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -1550,7 +1550,7 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
|||||||
will_be_style = signal_style;
|
will_be_style = signal_style;
|
||||||
will_be_pbs = is_pbs;
|
will_be_pbs = is_pbs;
|
||||||
will_be_semaphore = (sigvar == SIG_SEMAPHORE);
|
will_be_semaphore = (sigvar == SIG_SEMAPHORE);
|
||||||
if (HasBit(_no_tunnel_bridge_style_mask, signal_style)) return_cmd_error(STR_ERROR_UNSUITABLE_SIGNAL_TYPE);
|
if (HasBit(_signal_style_masks.no_tunnel_bridge, signal_style)) return_cmd_error(STR_ERROR_UNSUITABLE_SIGNAL_TYPE);
|
||||||
} else if (ctrl_pressed) {
|
} else if (ctrl_pressed) {
|
||||||
will_be_bidi = false;
|
will_be_bidi = false;
|
||||||
will_be_pbs = !will_be_pbs;
|
will_be_pbs = !will_be_pbs;
|
||||||
@@ -2815,7 +2815,7 @@ void DrawSingleSignal(TileIndex tile, const RailtypeInfo *rti, Track track, Sign
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint x, y;
|
uint x, y;
|
||||||
GetSignalXY(tile, pos, HasBit(_signal_opposite_side_style_mask, style), x, y);
|
GetSignalXY(tile, pos, HasBit(_signal_style_masks.signal_opposite_side, style), x, y);
|
||||||
|
|
||||||
uint8 aspect;
|
uint8 aspect;
|
||||||
if (condition == SIGNAL_STATE_GREEN) {
|
if (condition == SIGNAL_STATE_GREEN) {
|
||||||
@@ -2967,8 +2967,8 @@ void MarkSingleSignalDirty(TileIndex tile, Trackdir td)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bool opposite = false;
|
bool opposite = false;
|
||||||
if (_signal_opposite_side_style_mask != 0) {
|
if (_signal_style_masks.signal_opposite_side != 0) {
|
||||||
opposite = HasBit(_signal_opposite_side_style_mask, GetSignalStyleGeneric(tile, TrackdirToTrack(td)));
|
opposite = HasBit(_signal_style_masks.signal_opposite_side, GetSignalStyleGeneric(tile, TrackdirToTrack(td)));
|
||||||
}
|
}
|
||||||
MarkSingleSignalDirtyIntl(tile, td, opposite, [td](uint x, uint y) -> uint {
|
MarkSingleSignalDirtyIntl(tile, td, opposite, [td](uint x, uint y) -> uint {
|
||||||
return GetSaveSlopeZ(x, y, TrackdirToTrack(td));
|
return GetSaveSlopeZ(x, y, TrackdirToTrack(td));
|
||||||
|
@@ -30,11 +30,7 @@
|
|||||||
|
|
||||||
uint8 _extra_aspects = 0;
|
uint8 _extra_aspects = 0;
|
||||||
uint64 _aspect_cfg_hash = 0;
|
uint64 _aspect_cfg_hash = 0;
|
||||||
uint16 _non_aspect_inc_style_mask = 0;
|
SignalStyleMasks _signal_style_masks = {};
|
||||||
uint16 _next_only_style_mask = 0;
|
|
||||||
uint16 _always_reserve_through_style_mask = 0;
|
|
||||||
uint16 _no_tunnel_bridge_style_mask = 0;
|
|
||||||
uint16 _signal_opposite_side_style_mask = 0;
|
|
||||||
bool _signal_sprite_oversized = false;
|
bool _signal_sprite_oversized = false;
|
||||||
|
|
||||||
/// List of signals dependent upon this one
|
/// List of signals dependent upon this one
|
||||||
@@ -1267,7 +1263,7 @@ uint8 GetSignalAspectGeneric(TileIndex tile, Trackdir trackdir, bool check_non_i
|
|||||||
|
|
||||||
void AdjustSignalAspectIfNonIncStyleIntl(TileIndex tile, Track track, uint8 &aspect)
|
void AdjustSignalAspectIfNonIncStyleIntl(TileIndex tile, Track track, uint8 &aspect)
|
||||||
{
|
{
|
||||||
if (IsTileType(tile, MP_RAILWAY) && HasBit(_non_aspect_inc_style_mask, GetSignalStyle(tile, track))) aspect--;
|
if (IsTileType(tile, MP_RAILWAY) && HasBit(_signal_style_masks.non_aspect_inc, GetSignalStyle(tile, track))) aspect--;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RefreshBridgeOnExitAspectChange(TileIndex entrance, TileIndex exit)
|
static void RefreshBridgeOnExitAspectChange(TileIndex entrance, TileIndex exit)
|
||||||
@@ -1512,11 +1508,7 @@ static bool DetermineExtraAspectsVariable()
|
|||||||
bool changed = false;
|
bool changed = false;
|
||||||
uint8 new_extra_aspects = 0;
|
uint8 new_extra_aspects = 0;
|
||||||
|
|
||||||
_non_aspect_inc_style_mask = 0;
|
_signal_style_masks = {};
|
||||||
_next_only_style_mask = 0;
|
|
||||||
_no_tunnel_bridge_style_mask = 0;
|
|
||||||
_always_reserve_through_style_mask = 0;
|
|
||||||
_signal_opposite_side_style_mask = 0;
|
|
||||||
|
|
||||||
if (_settings_game.vehicle.train_braking_model == TBM_REALISTIC) {
|
if (_settings_game.vehicle.train_braking_model == TBM_REALISTIC) {
|
||||||
for (RailType r = RAILTYPE_BEGIN; r != RAILTYPE_END; r++) {
|
for (RailType r = RAILTYPE_BEGIN; r != RAILTYPE_END; r++) {
|
||||||
@@ -1528,23 +1520,23 @@ static bool DetermineExtraAspectsVariable()
|
|||||||
}
|
}
|
||||||
for (uint i = 0; i < _num_new_signal_styles; i++) {
|
for (uint i = 0; i < _num_new_signal_styles; i++) {
|
||||||
if (HasBit(_new_signal_styles[i].style_flags, NSSF_NO_ASPECT_INC)) {
|
if (HasBit(_new_signal_styles[i].style_flags, NSSF_NO_ASPECT_INC)) {
|
||||||
SetBit(_non_aspect_inc_style_mask, i + 1);
|
SetBit(_signal_style_masks.non_aspect_inc, i + 1);
|
||||||
SetBit(_no_tunnel_bridge_style_mask, i + 1);
|
SetBit(_signal_style_masks.no_tunnel_bridge, i + 1);
|
||||||
}
|
}
|
||||||
if (HasBit(_new_signal_styles[i].style_flags, NSSF_ALWAYS_RESERVE_THROUGH)) {
|
if (HasBit(_new_signal_styles[i].style_flags, NSSF_ALWAYS_RESERVE_THROUGH)) {
|
||||||
SetBit(_always_reserve_through_style_mask, i + 1);
|
SetBit(_signal_style_masks.always_reserve_through, i + 1);
|
||||||
SetBit(_no_tunnel_bridge_style_mask, i + 1);
|
SetBit(_signal_style_masks.no_tunnel_bridge, i + 1);
|
||||||
}
|
}
|
||||||
if (HasBit(_new_signal_styles[i].style_flags, NSSF_LOOKAHEAD_SINGLE_SIGNAL)) {
|
if (HasBit(_new_signal_styles[i].style_flags, NSSF_LOOKAHEAD_SINGLE_SIGNAL)) {
|
||||||
_new_signal_styles[i].lookahead_extra_aspects = 0;
|
_new_signal_styles[i].lookahead_extra_aspects = 0;
|
||||||
SetBit(_next_only_style_mask, i + 1);
|
SetBit(_signal_style_masks.next_only, i + 1);
|
||||||
} else if (HasBit(_new_signal_styles[i].style_flags, NSSF_LOOKAHEAD_ASPECTS_SET)) {
|
} else if (HasBit(_new_signal_styles[i].style_flags, NSSF_LOOKAHEAD_ASPECTS_SET)) {
|
||||||
_new_signal_styles[i].lookahead_extra_aspects = std::min<uint8>(_new_signal_styles[i].lookahead_extra_aspects, _new_signal_styles[i].grffile->new_signal_extra_aspects);
|
_new_signal_styles[i].lookahead_extra_aspects = std::min<uint8>(_new_signal_styles[i].lookahead_extra_aspects, _new_signal_styles[i].grffile->new_signal_extra_aspects);
|
||||||
} else {
|
} else {
|
||||||
_new_signal_styles[i].lookahead_extra_aspects = _new_signal_styles[i].grffile->new_signal_extra_aspects;
|
_new_signal_styles[i].lookahead_extra_aspects = _new_signal_styles[i].grffile->new_signal_extra_aspects;
|
||||||
}
|
}
|
||||||
if (HasBit(_new_signal_styles[i].style_flags, NSSF_OPPOSITE_SIDE)) {
|
if (HasBit(_new_signal_styles[i].style_flags, NSSF_OPPOSITE_SIDE)) {
|
||||||
SetBit(_signal_opposite_side_style_mask, i + 1);
|
SetBit(_signal_style_masks.signal_opposite_side, i + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (uint i = _num_new_signal_styles; i < MAX_NEW_SIGNAL_STYLES; i++) {
|
for (uint i = _num_new_signal_styles; i < MAX_NEW_SIGNAL_STYLES; i++) {
|
||||||
@@ -1556,8 +1548,8 @@ static bool DetermineExtraAspectsVariable()
|
|||||||
|
|
||||||
SimpleChecksum64 checksum;
|
SimpleChecksum64 checksum;
|
||||||
checksum.Update(SimpleHash32(_extra_aspects));
|
checksum.Update(SimpleHash32(_extra_aspects));
|
||||||
checksum.Update(SimpleHash32(_non_aspect_inc_style_mask));
|
checksum.Update(SimpleHash32(_signal_style_masks.non_aspect_inc));
|
||||||
checksum.Update(SimpleHash32(_always_reserve_through_style_mask));
|
checksum.Update(SimpleHash32(_signal_style_masks.always_reserve_through));
|
||||||
|
|
||||||
if (checksum.state != _aspect_cfg_hash) {
|
if (checksum.state != _aspect_cfg_hash) {
|
||||||
_aspect_cfg_hash = checksum.state;
|
_aspect_cfg_hash = checksum.state;
|
||||||
@@ -1587,8 +1579,8 @@ void InitialiseExtraAspectsVariable()
|
|||||||
void UpdateSignalReserveThroughBit(TileIndex tile, Track track, bool update_signal)
|
void UpdateSignalReserveThroughBit(TileIndex tile, Track track, bool update_signal)
|
||||||
{
|
{
|
||||||
bool reserve_through = false;
|
bool reserve_through = false;
|
||||||
if (NonZeroSignalStylePossiblyOnTile(tile) && _always_reserve_through_style_mask != 0 &&
|
if (NonZeroSignalStylePossiblyOnTile(tile) && _signal_style_masks.always_reserve_through != 0 &&
|
||||||
HasBit(_always_reserve_through_style_mask, GetSignalStyle(tile, track))) {
|
HasBit(_signal_style_masks.always_reserve_through, GetSignalStyle(tile, track))) {
|
||||||
reserve_through = true;
|
reserve_through = true;
|
||||||
} else {
|
} else {
|
||||||
if (IsRestrictedSignal(tile)) {
|
if (IsRestrictedSignal(tile)) {
|
||||||
|
@@ -21,11 +21,16 @@
|
|||||||
|
|
||||||
extern uint8 _extra_aspects;
|
extern uint8 _extra_aspects;
|
||||||
extern uint64 _aspect_cfg_hash;
|
extern uint64 _aspect_cfg_hash;
|
||||||
extern uint16 _non_aspect_inc_style_mask;
|
|
||||||
extern uint16 _next_only_style_mask;
|
struct SignalStyleMasks {
|
||||||
extern uint16 _always_reserve_through_style_mask;
|
uint16 non_aspect_inc = 0;
|
||||||
extern uint16 _no_tunnel_bridge_style_mask;
|
uint16 next_only = 0;
|
||||||
extern uint16 _signal_opposite_side_style_mask;
|
uint16 always_reserve_through = 0;
|
||||||
|
uint16 no_tunnel_bridge = 0;
|
||||||
|
uint16 signal_opposite_side = 0;
|
||||||
|
};
|
||||||
|
extern SignalStyleMasks _signal_style_masks;
|
||||||
|
|
||||||
extern bool _signal_sprite_oversized;
|
extern bool _signal_sprite_oversized;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -187,7 +192,7 @@ void InitialiseExtraAspectsVariable();
|
|||||||
inline void AdjustSignalAspectIfNonIncStyle(TileIndex tile, Track track, uint8 &aspect)
|
inline void AdjustSignalAspectIfNonIncStyle(TileIndex tile, Track track, uint8 &aspect)
|
||||||
{
|
{
|
||||||
extern void AdjustSignalAspectIfNonIncStyleIntl(TileIndex tile, Track track, uint8 &aspect);
|
extern void AdjustSignalAspectIfNonIncStyleIntl(TileIndex tile, Track track, uint8 &aspect);
|
||||||
if (aspect > 0 && _non_aspect_inc_style_mask != 0) AdjustSignalAspectIfNonIncStyleIntl(tile, track, aspect);
|
if (aspect > 0 && _signal_style_masks.non_aspect_inc != 0) AdjustSignalAspectIfNonIncStyleIntl(tile, track, aspect);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline uint8 GetForwardAspectFollowingTrackAndIncrement(TileIndex tile, Trackdir trackdir)
|
inline uint8 GetForwardAspectFollowingTrackAndIncrement(TileIndex tile, Trackdir trackdir)
|
||||||
|
@@ -1733,7 +1733,7 @@ static void DrawTunnelBridgeRampSingleSignal(const TileInfo *ti, bool is_green,
|
|||||||
DiagDirection dir = GetTunnelBridgeDirection(ti->tile);
|
DiagDirection dir = GetTunnelBridgeDirection(ti->tile);
|
||||||
|
|
||||||
uint8 style = GetTunnelBridgeSignalStyle(ti->tile);
|
uint8 style = GetTunnelBridgeSignalStyle(ti->tile);
|
||||||
side ^= HasBit(_signal_opposite_side_style_mask, style);
|
side ^= HasBit(_signal_style_masks.signal_opposite_side, style);
|
||||||
|
|
||||||
static const Point SignalPositions[2][4] = {
|
static const Point SignalPositions[2][4] = {
|
||||||
{ /* X X Y Y Signals on the left side */
|
{ /* X X Y Y Signals on the left side */
|
||||||
@@ -1870,7 +1870,7 @@ static void DrawBridgeSignalOnMiddlePart(const TileInfo *ti, TileIndex bridge_st
|
|||||||
uint8 style = GetBridgeSignalStyle(bridge_start_tile);
|
uint8 style = GetBridgeSignalStyle(bridge_start_tile);
|
||||||
|
|
||||||
uint position, x, y;
|
uint position, x, y;
|
||||||
GetBridgeSignalXY(ti->tile, GetTunnelBridgeDirection(bridge_start_tile), HasBit(_signal_opposite_side_style_mask, style), position, x, y);
|
GetBridgeSignalXY(ti->tile, GetTunnelBridgeDirection(bridge_start_tile), HasBit(_signal_style_masks.signal_opposite_side, style), position, x, y);
|
||||||
|
|
||||||
SignalVariant variant = IsTunnelBridgeSemaphore(bridge_start_tile) ? SIG_SEMAPHORE : SIG_ELECTRIC;
|
SignalVariant variant = IsTunnelBridgeSemaphore(bridge_start_tile) ? SIG_SEMAPHORE : SIG_ELECTRIC;
|
||||||
SignalState state = GetBridgeEntranceSimulatedSignalState(bridge_start_tile, m2_position);
|
SignalState state = GetBridgeEntranceSimulatedSignalState(bridge_start_tile, m2_position);
|
||||||
@@ -1926,8 +1926,8 @@ void MarkSingleBridgeSignalDirty(TileIndex tile, TileIndex bridge_start_tile)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool opposite_side = false;
|
bool opposite_side = false;
|
||||||
if (_signal_opposite_side_style_mask != 0) {
|
if (_signal_style_masks.signal_opposite_side != 0) {
|
||||||
opposite_side = HasBit(_signal_opposite_side_style_mask, GetTunnelBridgeSignalStyle(bridge_start_tile));
|
opposite_side = HasBit(_signal_style_masks.signal_opposite_side, GetTunnelBridgeSignalStyle(bridge_start_tile));
|
||||||
}
|
}
|
||||||
|
|
||||||
uint position, x, y;
|
uint position, x, y;
|
||||||
@@ -1950,8 +1950,8 @@ void MarkTunnelBridgeSignalDirty(TileIndex tile, bool exit)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool opposite_side = false;
|
bool opposite_side = false;
|
||||||
if (_signal_opposite_side_style_mask != 0) {
|
if (_signal_style_masks.signal_opposite_side != 0) {
|
||||||
opposite_side = HasBit(_signal_opposite_side_style_mask, GetTunnelBridgeSignalStyle(tile));
|
opposite_side = HasBit(_signal_style_masks.signal_opposite_side, GetTunnelBridgeSignalStyle(tile));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsRailCustomBridgeHeadTile(tile)) {
|
if (IsRailCustomBridgeHeadTile(tile)) {
|
||||||
|
Reference in New Issue
Block a user