Add railtype and signals variables for signal vertical clearance
This commit is contained in:
@@ -2858,7 +2858,9 @@ void DrawSingleSignal(TileIndex tile, const RailtypeInfo *rti, Track track, Sign
|
||||
aspect = 0;
|
||||
}
|
||||
|
||||
const CustomSignalSpriteResult result = GetCustomSignalSprite(rti, tile, type, variant, aspect, context, style, prog);
|
||||
const uint z = GetSaveSlopeZ(x, y, track);
|
||||
|
||||
const CustomSignalSpriteResult result = GetCustomSignalSprite(rti, tile, type, variant, aspect, context, style, prog, z);
|
||||
SpriteID sprite = result.sprite.sprite;
|
||||
PaletteID pal = PAL_NONE;
|
||||
bool is_custom_sprite = (sprite != 0);
|
||||
@@ -2919,13 +2921,13 @@ void DrawSingleSignal(TileIndex tile, const RailtypeInfo *rti, Track track, Sign
|
||||
static const SubSprite lower_part = { -50, -10, 50, 50 };
|
||||
static const SubSprite upper_part = { -50, -50, 50, -11 };
|
||||
|
||||
AddSortableSpriteToDraw(sprite, SPR_TRACERESTRICT_BASE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, GetSaveSlopeZ(x, y, track), false, 0, 0, 0, &lower_part);
|
||||
AddSortableSpriteToDraw(sprite, PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, GetSaveSlopeZ(x, y, track), false, 0, 0, 0, &upper_part);
|
||||
AddSortableSpriteToDraw(sprite, SPR_TRACERESTRICT_BASE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, z, false, 0, 0, 0, &lower_part);
|
||||
AddSortableSpriteToDraw(sprite, PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, z, false, 0, 0, 0, &upper_part);
|
||||
} else {
|
||||
AddSortableSpriteToDraw(sprite, SPR_TRACERESTRICT_BASE + (type == SIGTYPE_NO_ENTRY ? 0 : 1), x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, GetSaveSlopeZ(x, y, track));
|
||||
AddSortableSpriteToDraw(sprite, SPR_TRACERESTRICT_BASE + (type == SIGTYPE_NO_ENTRY ? 0 : 1), x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, z);
|
||||
}
|
||||
} else {
|
||||
AddSortableSpriteToDraw(sprite, pal, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, GetSaveSlopeZ(x, y, track));
|
||||
AddSortableSpriteToDraw(sprite, pal, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, z);
|
||||
}
|
||||
const Sprite *sp = GetSprite(sprite, ST_NORMAL);
|
||||
if (sp->x_offs < -SIGNAL_DIRTY_LEFT || sp->x_offs + sp->width > SIGNAL_DIRTY_RIGHT || sp->y_offs < -SIGNAL_DIRTY_TOP || sp->y_offs + sp->height > SIGNAL_DIRTY_BOTTOM) {
|
||||
@@ -2942,8 +2944,7 @@ static void DrawSingleSignal(TileIndex tile, const RailtypeInfo *rti, Track trac
|
||||
DrawSingleSignal(tile, rti, track, condition, image, pos, type, variant, prog, CSSC_TRACK);
|
||||
}
|
||||
|
||||
template <typename F>
|
||||
void MarkSingleSignalDirtyIntl(TileIndex tile, Trackdir td, bool opposite, F get_z)
|
||||
static void GetSignalXYByTrackdir(TileIndex tile, Trackdir td, bool opposite, uint &x, uint &y)
|
||||
{
|
||||
static const uint8 trackdir_to_pos[TRACKDIR_END] = {
|
||||
8, // TRACKDIR_X_NE
|
||||
@@ -2964,8 +2965,20 @@ void MarkSingleSignalDirtyIntl(TileIndex tile, Trackdir td, bool opposite, F get
|
||||
0, // TRACKDIR_RVREV_NW
|
||||
};
|
||||
|
||||
uint x, y;
|
||||
GetSignalXY(tile, trackdir_to_pos[td], opposite, x, y);
|
||||
}
|
||||
|
||||
void GetSignalXYZByTrackdir(TileIndex tile, Trackdir td, bool opposite_side, uint &x, uint &y, uint &z)
|
||||
{
|
||||
GetSignalXYByTrackdir(tile, td, opposite_side, x, y);
|
||||
z = GetSaveSlopeZ(x, y, TrackdirToTrack(td));
|
||||
}
|
||||
|
||||
template <typename F>
|
||||
void MarkSingleSignalDirtyIntl(TileIndex tile, Trackdir td, bool opposite, F get_z)
|
||||
{
|
||||
uint x, y;
|
||||
GetSignalXYByTrackdir(tile, td, opposite, x, y);
|
||||
Point pt = RemapCoords(x, y, get_z(x, y));
|
||||
MarkAllViewportsDirty(
|
||||
pt.x - SIGNAL_DIRTY_LEFT,
|
||||
|
Reference in New Issue
Block a user