Changeset - r23426:09ac7749c338
[Not reviewed]
master
0 2 0
PeterN - 5 years ago 2019-03-09 02:53:43
peter@fuzzle.org
Add: Add flag and railtype sprite type to draw pre-combined ground sprites. (#7231)
2 files changed with 17 insertions and 1 deletions:
0 comments (0 inline, 0 general)
src/rail.h
Show inline comments
 
@@ -27,11 +27,13 @@ enum RailTypeFlags {
 
	RTF_CATENARY          = 0,                           ///< Bit number for drawing a catenary.
 
	RTF_NO_LEVEL_CROSSING = 1,                           ///< Bit number for disallowing level crossings.
 
	RTF_HIDDEN            = 2,                           ///< Bit number for hiding from selection.
 
	RTF_NO_SPRITE_COMBINE = 3,                           ///< Bit number for using non-combined junctions.
 

	
 
	RTFB_NONE              = 0,                          ///< All flags cleared.
 
	RTFB_CATENARY          = 1 << RTF_CATENARY,          ///< Value for drawing a catenary.
 
	RTFB_NO_LEVEL_CROSSING = 1 << RTF_NO_LEVEL_CROSSING, ///< Value for disallowing level crossings.
 
	RTFB_HIDDEN            = 1 << RTF_HIDDEN,            ///< Value for hiding from selection.
 
	RTFB_NO_SPRITE_COMBINE = 1 << RTF_NO_SPRITE_COMBINE, ///< Value for using non-combined junctions.
 
};
 
DECLARE_ENUM_AS_BIT_SET(RailTypeFlags)
 

	
 
@@ -51,6 +53,7 @@ enum RailTypeSpriteGroup {
 
	RTSG_FENCES,      ///< Fence images
 
	RTSG_TUNNEL_PORTAL, ///< Tunnel portal overlay
 
	RTSG_SIGNALS,     ///< Signal images
 
	RTSG_GROUND_COMPLETE, ///< Complete ground images
 
	RTSG_END,
 
};
 

	
src/rail_cmd.cpp
Show inline comments
 
@@ -2107,12 +2107,25 @@ static void DrawTrackBitsOverlay(TileInf
 
		DrawGroundSprite(image, PAL_NONE);
 
	}
 

	
 
	bool no_combine = ti->tileh == SLOPE_FLAT && HasBit(rti->flags, RTF_NO_SPRITE_COMBINE);
 
	SpriteID overlay = GetCustomRailSprite(rti, ti->tile, RTSG_OVERLAY);
 
	SpriteID ground = GetCustomRailSprite(rti, ti->tile, RTSG_GROUND);
 
	SpriteID ground = GetCustomRailSprite(rti, ti->tile, no_combine ? RTSG_GROUND_COMPLETE : RTSG_GROUND);
 
	TrackBits pbs = _settings_client.gui.show_track_reservation ? GetRailReservationTrackBits(ti->tile) : TRACK_BIT_NONE;
 

	
 
	if (track == TRACK_BIT_NONE) {
 
		/* Half-tile foundation, no track here? */
 
	} else if (no_combine) {
 
		/* Use trackbits as direct index from ground sprite, subtract 1
 
		 * because there is no sprite for no bits. */
 
		DrawGroundSprite(ground + track - 1, PAL_NONE);
 

	
 
		/* Draw reserved track bits */
 
		if (pbs & TRACK_BIT_X)     DrawGroundSprite(overlay + RTO_X, PALETTE_CRASH);
 
		if (pbs & TRACK_BIT_Y)     DrawGroundSprite(overlay + RTO_Y, PALETTE_CRASH);
 
		if (pbs & TRACK_BIT_UPPER) DrawTrackSprite(overlay + RTO_N, PALETTE_CRASH, ti, SLOPE_N);
 
		if (pbs & TRACK_BIT_LOWER) DrawTrackSprite(overlay + RTO_S, PALETTE_CRASH, ti, SLOPE_S);
 
		if (pbs & TRACK_BIT_RIGHT) DrawTrackSprite(overlay + RTO_E, PALETTE_CRASH, ti, SLOPE_E);
 
		if (pbs & TRACK_BIT_LEFT)  DrawTrackSprite(overlay + RTO_W, PALETTE_CRASH, ti, SLOPE_W);
 
	} else if (ti->tileh == SLOPE_NW && track == TRACK_BIT_Y) {
 
		DrawGroundSprite(ground + RTO_SLOPE_NW, PAL_NONE);
 
		if (pbs != TRACK_BIT_NONE) DrawGroundSprite(overlay + RTO_SLOPE_NW, PALETTE_CRASH);
0 comments (0 inline, 0 general)