Improve display of non-overlay horizontal dual track types

This commit is contained in:
Jonathan G Rennison
2019-01-04 11:51:16 +00:00
parent 873a58454d
commit 7f73c36686

View File

@@ -2562,6 +2562,12 @@ static const SubSprite _halftile_sub_sprite[4] = {
{ -31 + 33, -INF , INF , INF }, // CORNER_E, clip 33 pixels from left { -31 + 33, -INF , INF , INF }, // CORNER_E, clip 33 pixels from left
{ -INF , -INF , INF , 30 - 23 } // CORNER_N, clip 23 pixels from bottom { -INF , -INF , INF , 30 - 23 } // CORNER_N, clip 23 pixels from bottom
}; };
static const SubSprite _dual_track_halftile_sub_sprite[4] = {
{ -INF , -INF , 32 - 33, INF }, // CORNER_W, clip 33 pixels from right
{ -INF , 0 + 15, INF , INF }, // CORNER_S, clip 15 pixels from top
{ -31 + 33, -INF , INF , INF }, // CORNER_E, clip 33 pixels from left
{ -INF , -INF , INF , 30 - 15 } // CORNER_N, clip 15 pixels from bottom
};
static inline void DrawTrackSprite(SpriteID sprite, PaletteID pal, const TileInfo *ti, Slope s) static inline void DrawTrackSprite(SpriteID sprite, PaletteID pal, const TileInfo *ti, Slope s)
{ {
@@ -2578,8 +2584,6 @@ static RailGroundType GetRailOrBridgeGroundType(TileInfo *ti) {
static void DrawTrackBitsOverlay(TileInfo *ti, TrackBits track, const RailtypeInfo *rti, RailGroundType rgt, bool is_bridge, Corner halftile_corner, Corner draw_half_tile) static void DrawTrackBitsOverlay(TileInfo *ti, TrackBits track, const RailtypeInfo *rti, RailGroundType rgt, bool is_bridge, Corner halftile_corner, Corner draw_half_tile)
{ {
const SubSprite *sub = NULL;
if (draw_half_tile != CORNER_INVALID) sub = &(_halftile_sub_sprite[draw_half_tile]);
if (halftile_corner != CORNER_INVALID) track &= ~CornerToTrackBits(halftile_corner); if (halftile_corner != CORNER_INVALID) track &= ~CornerToTrackBits(halftile_corner);
if (halftile_corner != CORNER_INVALID || draw_half_tile == CORNER_INVALID) { if (halftile_corner != CORNER_INVALID || draw_half_tile == CORNER_INVALID) {
@@ -2603,6 +2607,8 @@ static void DrawTrackBitsOverlay(TileInfo *ti, TrackBits track, const RailtypeIn
image += SlopeToSpriteOffset(ti->tileh); image += SlopeToSpriteOffset(ti->tileh);
const SubSprite *sub = NULL;
if (draw_half_tile != CORNER_INVALID) sub = &(_halftile_sub_sprite[draw_half_tile]);
DrawGroundSprite(image, PAL_NONE, sub); DrawGroundSprite(image, PAL_NONE, sub);
} }
} }
@@ -2738,9 +2744,16 @@ void DrawTrackBits(TileInfo *ti, TrackBits track, RailType rt, RailGroundType rg
const SubSprite *sub = NULL; const SubSprite *sub = NULL;
bool junction = false; bool junction = false;
if (halftile_corner != CORNER_INVALID) track &= ~CornerToTrackBits(halftile_corner); if (halftile_corner != CORNER_INVALID) {
track &= ~CornerToTrackBits(halftile_corner);
if (draw_half_tile != CORNER_INVALID) sub = &(_halftile_sub_sprite[draw_half_tile]); if (draw_half_tile != CORNER_INVALID) {
sub = &(_halftile_sub_sprite[draw_half_tile]);
}
} else {
if (draw_half_tile != CORNER_INVALID) {
sub = &(_dual_track_halftile_sub_sprite[draw_half_tile]);
}
}
/* Select the sprite to use. */ /* Select the sprite to use. */
if (track == 0 && draw_half_tile != CORNER_INVALID) { if (track == 0 && draw_half_tile != CORNER_INVALID) {