File diff r14476:cfe45e25bfb9 → r14477:752d803ed3be
src/tunnelbridge_cmd.cpp
Show inline comments
 
@@ -40,6 +40,7 @@
 
#include "pbs.h"
 
#include "company_base.h"
 
#include "engine_base.h"
 
#include "newgrf_railtype.h"
 

	
 
#include "table/sprites.h"
 
#include "table/strings.h"
 
@@ -930,14 +931,22 @@ static void DrawTile_TunnelBridge(TileIn
 
					AddSortableSpriteToDraw(SPR_TRAMWAY_TUNNEL_WIRES + tunnelbridge_direction, PAL_NONE, ti->x, ti->y, BB_data[10], BB_data[11], TILE_HEIGHT, ti->z, IsTransparencySet(TO_CATENARY), BB_data[8], BB_data[9], BB_Z_SEPARATOR);
 
				}
 
			}
 
		} else if (HasCatenaryDrawn(GetRailType(ti->tile))) {
 
			/* Maybe draw pylons on the entry side */
 
			DrawCatenary(ti);
 
		} else {
 
			const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile));
 
			if (rti->UsesOverlay()) {
 
				SpriteID surface = GetCustomRailSprite(rti, ti->tile, RTSG_TUNNEL);
 
				if (surface != 0) DrawGroundSprite(surface + tunnelbridge_direction, PAL_NONE);
 
			}
 

	
 
			catenary = true;
 
			StartSpriteCombine();
 
			/* Draw wire above the ramp */
 
			DrawCatenaryOnTunnel(ti);
 
			if (HasCatenaryDrawn(GetRailType(ti->tile))) {
 
				/* Maybe draw pylons on the entry side */
 
				DrawCatenary(ti);
 

	
 
				catenary = true;
 
				StartSpriteCombine();
 
				/* Draw wire above the ramp */
 
				DrawCatenaryOnTunnel(ti);
 
			}
 
		}
 

	
 
		AddSortableSpriteToDraw(image + 1, PAL_NONE, ti->x + TILE_SIZE - 1, ti->y + TILE_SIZE - 1, BB_data[0], BB_data[1], TILE_HEIGHT, ti->z, false, BB_data[2], BB_data[3], BB_Z_SEPARATOR);
 
@@ -995,15 +1004,6 @@ static void DrawTile_TunnelBridge(TileIn
 
		/* Bridge heads are drawn solid no matter how invisibility/transparency is set */
 
		AddSortableSpriteToDraw(psid->sprite, psid->pal, ti->x, ti->y, 16, 16, ti->tileh == SLOPE_FLAT ? 0 : 8, ti->z);
 

	
 
		if (_game_mode != GM_MENU && _settings_client.gui.show_track_reservation && transport_type == TRANSPORT_RAIL && HasTunnelBridgeReservation(ti->tile)) {
 
			const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile));
 
			if (HasBridgeFlatRamp(ti->tileh, DiagDirToAxis(tunnelbridge_direction))) {
 
				AddSortableSpriteToDraw(DiagDirToAxis(tunnelbridge_direction) == AXIS_X ? rti->base_sprites.single_x : rti->base_sprites.single_y, PALETTE_CRASH, ti->x, ti->y, 16, 16, 0, ti->z + 8);
 
			} else {
 
				AddSortableSpriteToDraw(rti->base_sprites.single_sloped + tunnelbridge_direction, PALETTE_CRASH, ti->x, ti->y, 16, 16, 8, ti->z);
 
			}
 
		}
 

	
 
		if (transport_type == TRANSPORT_ROAD) {
 
			RoadTypes rts = GetRoadTypes(ti->tile);
 

	
 
@@ -1021,6 +1021,26 @@ static void DrawTile_TunnelBridge(TileIn
 
			}
 
			EndSpriteCombine();
 
		} else if (transport_type == TRANSPORT_RAIL) {
 
			const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile));
 
			if (rti->UsesOverlay()) {
 
				SpriteID surface = GetCustomRailSprite(rti, ti->tile, RTSG_BRIDGE);
 
				if (surface != 0) {
 
					if (HasBridgeFlatRamp(ti->tileh, DiagDirToAxis(tunnelbridge_direction))) {
 
						AddSortableSpriteToDraw(surface + ((DiagDirToAxis(tunnelbridge_direction) == AXIS_X) ? RTBO_X : RTBO_Y), PAL_NONE, ti->x, ti->y, 16, 16, 0, ti->z + 8);
 
					} else {
 
						AddSortableSpriteToDraw(surface + RTBO_SLOPE + tunnelbridge_direction, PAL_NONE, ti->x, ti->y, 16, 16, 8, ti->z);
 
					}
 
				}
 
				/* Don't fallback to non-overlay sprite -- the spec states that
 
				 * if an overlay is present then the bridge surface must be
 
				 * present. */
 
			} else if (_game_mode != GM_MENU &&_settings_client.gui.show_track_reservation && HasTunnelBridgeReservation(ti->tile)) {
 
				if (HasBridgeFlatRamp(ti->tileh, DiagDirToAxis(tunnelbridge_direction))) {
 
					AddSortableSpriteToDraw(DiagDirToAxis(tunnelbridge_direction) == AXIS_X ? rti->base_sprites.single_x : rti->base_sprites.single_y, PALETTE_CRASH, ti->x, ti->y, 16, 16, 0, ti->z + 8);
 
				} else {
 
					AddSortableSpriteToDraw(rti->base_sprites.single_sloped + tunnelbridge_direction, PALETTE_CRASH, ti->x, ti->y, 16, 16, 8, ti->z);
 
				}
 
			}
 
			EndSpriteCombine();
 
			if (HasCatenaryDrawn(GetRailType(ti->tile))) {
 
				DrawCatenary(ti);
 
@@ -1128,7 +1148,7 @@ void DrawBridgeMiddle(const TileInfo *ti
 
	AddSortableSpriteToDraw(SPR_EMPTY_BOUNDING_BOX, PAL_NONE, x, y, 16, 16, 1, bridge_z - TILE_HEIGHT + BB_Z_SEPARATOR);
 

	
 
	/* Draw Trambits as SpriteCombine */
 
	if (transport_type == TRANSPORT_ROAD) StartSpriteCombine();
 
	if (transport_type == TRANSPORT_ROAD || transport_type == TRANSPORT_RAIL) StartSpriteCombine();
 

	
 
	/* Draw floor and far part of bridge*/
 
	if (!IsInvisibilitySet(TO_BRIDGES)) {
 
@@ -1152,6 +1172,15 @@ void DrawBridgeMiddle(const TileInfo *ti
 
			StartSpriteCombine();
 
		}
 
	} else if (transport_type == TRANSPORT_RAIL) {
 
		const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(rampsouth));
 
		if (rti->UsesOverlay()) {
 
			SpriteID surface = GetCustomRailSprite(rti, ti->tile, RTSG_BRIDGE);
 
			if (surface != 0) {
 
				AddSortableSpriteToDraw(surface + axis, PAL_NONE, x, y, 16, 16, 0, bridge_z, IsTransparencySet(TO_BRIDGES));
 
			}
 
		}
 
		EndSpriteCombine();
 

	
 
		if (HasCatenaryDrawn(GetRailType(rampsouth))) {
 
			DrawCatenaryOnBridge(ti);
 
		}