Changeset - r8549:868ae7c78793
[Not reviewed]
master
0 1 0
belugas - 16 years ago 2008-02-13 03:21:19
belugas@openttd.org
(svn r12127) -Codechange: Use a variable instead of calling the same function a few times. Again. Just a different value.
1 file changed with 17 insertions and 13 deletions:
0 comments (0 inline, 0 general)
src/tunnelbridge_cmd.cpp
Show inline comments
 
@@ -452,19 +452,20 @@ CommandCost CmdBuildTunnel(TileIndex sta
 
{
 
	TileIndexDiff delta;
 
	TileIndex end_tile;
 
	DiagDirection direction;
 
	Slope start_tileh;
 
	Slope end_tileh;
 
	TransportType transport_type = (TransportType)GB(p1, 9, 1);
 
	uint start_z;
 
	uint end_z;
 
	CommandCost cost(EXPENSES_CONSTRUCTION);
 
	CommandCost ret;
 

	
 
	_build_tunnel_endtile = 0;
 
	if (!HasBit(p1, 9)) {
 
	if (transport_type == TRANSPORT_RAIL) {
 
		if (!ValParamRailtype((RailType)p1)) return CMD_ERROR;
 
	} else {
 
		const RoadTypes rts = (RoadTypes)GB(p1, 0, 3);
 
		if (!AreValidRoadTypes(rts) || !HasRoadTypesAvail(_current_player, rts)) return CMD_ERROR;
 
	}
 

	
 
@@ -541,13 +542,13 @@ CommandCost CmdBuildTunnel(TileIndex sta
 
		if (CmdFailed(ret)) return ret;
 
	}
 
	cost.AddCost(_price.build_tunnel);
 
	cost.AddCost(ret);
 

	
 
	if (flags & DC_EXEC) {
 
		if (GB(p1, 9, 1) == TRANSPORT_RAIL) {
 
		if (transport_type == TRANSPORT_RAIL) {
 
			MakeRailTunnel(start_tile, _current_player, direction,                 (RailType)GB(p1, 0, 4));
 
			MakeRailTunnel(end_tile,   _current_player, ReverseDiagDir(direction), (RailType)GB(p1, 0, 4));
 
			AddSideToSignalBuffer(start_tile, INVALID_DIAGDIR, _current_player);
 
			YapfNotifyTrackLayoutChange(start_tile, AxisToTrack(DiagDirToAxis(direction)));
 
		} else {
 
			MakeRoadTunnel(start_tile, _current_player, direction,                 (RoadTypes)GB(p1, 0, 3));
 
@@ -801,12 +802,13 @@ static void DrawBridgeTramBits(int x, in
 
 * </ul>
 
 * Please note that in this code, "roads" are treated as railtype 1, whilst the real railtypes are 0, 2 and 3
 
 */
 
static void DrawTile_TunnelBridge(TileInfo *ti)
 
{
 
	SpriteID image;
 
	TransportType transport_type = GetTunnelBridgeTransportType(ti->tile);
 
	DiagDirection tunnelbridge_direction = GetTunnelBridgeDirection(ti->tile);
 

	
 
	if (IsTunnel(ti->tile)) {
 
		/* Front view of tunnel bounding boxes:
 
		 *
 
		 *   122223  <- BB_Z_SEPARATOR
 
@@ -825,23 +827,23 @@ static void DrawTile_TunnelBridge(TileIn
 
			{  0,  1, -14, -15, 15,  0,  1, 16, 1, 0, 15, 16 }, // NW
 
		};
 
		const int *BB_data = _tunnel_BB[tunnelbridge_direction];
 

	
 
		bool catenary = false;
 

	
 
		if (GetTunnelBridgeTransportType(ti->tile) == TRANSPORT_RAIL) {
 
		if (transport_type == TRANSPORT_RAIL) {
 
			image = GetRailTypeInfo(GetRailType(ti->tile))->base_sprites.tunnel;
 
		} else {
 
			image = SPR_TUNNEL_ENTRY_REAR_ROAD;
 
		}
 

	
 
		if (HasTunnelBridgeSnowOrDesert(ti->tile)) image += 32;
 

	
 
		image += tunnelbridge_direction * 2;
 
		DrawGroundSprite(image, PAL_NONE);
 
		if (GetTunnelBridgeTransportType(ti->tile) == TRANSPORT_ROAD) {
 
		if (transport_type == TRANSPORT_ROAD) {
 
			RoadTypes rts = GetRoadTypes(ti->tile);
 

	
 
			if (HasBit(rts, ROADTYPE_TRAM)) {
 
				static const SpriteID tunnel_sprites[2][4] = { { 28, 78, 79, 27 }, {  5, 76, 77,  4 } };
 

	
 
				DrawGroundSprite(SPR_TRAMWAY_BASE + tunnel_sprites[rts - ROADTYPES_TRAM][tunnelbridge_direction], PAL_NONE);
 
@@ -869,13 +871,13 @@ static void DrawTile_TunnelBridge(TileIn
 
		DrawBridgeMiddle(ti);
 
	} else { // IsBridge(ti->tile)
 
		const PalSpriteID *psid;
 
		int base_offset;
 
		bool ice = HasTunnelBridgeSnowOrDesert(ti->tile);
 

	
 
		if (GetTunnelBridgeTransportType(ti->tile) == TRANSPORT_RAIL) {
 
		if (transport_type == TRANSPORT_RAIL) {
 
			base_offset = GetRailTypeInfo(GetRailType(ti->tile))->bridge_offset;
 
			assert(base_offset != 8); // This one is used for roads
 
		} else {
 
			base_offset = 8;
 
		}
 

	
 
@@ -898,22 +900,22 @@ static void DrawTile_TunnelBridge(TileIn
 
			DrawGroundSprite(SPR_FLAT_SNOWY_TILE + _tileh_to_sprite[ti->tileh], PAL_NONE);
 
		}
 

	
 
		/* draw ramp */
 

	
 
		/* Draw Trambits as SpriteCombine */
 
		if (GetTunnelBridgeTransportType(ti->tile) == TRANSPORT_ROAD) StartSpriteCombine();
 
		if (transport_type == TRANSPORT_ROAD) StartSpriteCombine();
 

	
 
		/* HACK set the height of the BB of a sloped ramp to 1 so a vehicle on
 
		 * it doesn't disappear behind it
 
		 */
 
		AddSortableSpriteToDraw(
 
			psid->sprite, psid->pal, ti->x, ti->y, 16, 16, ti->tileh == SLOPE_FLAT ? 0 : 8, ti->z, IsTransparencySet(TO_BRIDGES)
 
		);
 

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

	
 
			if (HasBit(rts, ROADTYPE_TRAM)) {
 
				uint offset = tunnelbridge_direction;
 
				uint z = ti->z;
 
				if (ti->tileh != SLOPE_FLAT) {
 
@@ -989,32 +991,34 @@ void DrawBridgeMiddle(const TileInfo* ti
 
	static const int BRIDGE_Z_START = 3;
 

	
 
	const PalSpriteID* psid;
 
	uint base_offset;
 
	TileIndex rampnorth;
 
	TileIndex rampsouth;
 
	TransportType transport_type;
 
	Axis axis;
 
	uint piece;
 
	BridgeType type;
 
	int x;
 
	int y;
 
	uint z;
 

	
 
	if (!IsBridgeAbove(ti->tile)) return;
 

	
 
	rampnorth = GetNorthernBridgeEnd(ti->tile);
 
	rampsouth = GetSouthernBridgeEnd(ti->tile);
 
	transport_type = GetTunnelBridgeTransportType(rampsouth);
 

	
 
	axis = GetBridgeAxis(ti->tile);
 
	piece = CalcBridgePiece(
 
		GetTunnelBridgeLength(ti->tile, rampnorth) + 1,
 
		GetTunnelBridgeLength(ti->tile, rampsouth) + 1
 
	);
 
	type = GetBridgeType(rampsouth);
 

	
 
	if (GetTunnelBridgeTransportType(rampsouth) == TRANSPORT_RAIL) {
 
	if (transport_type == TRANSPORT_RAIL) {
 
		base_offset = GetRailTypeInfo(GetRailType(rampsouth))->bridge_offset;
 
	} else {
 
		base_offset = 8;
 
	}
 

	
 
	psid = base_offset + GetBridgeSpriteTable(type, piece);
 
@@ -1026,24 +1030,24 @@ void DrawBridgeMiddle(const TileInfo* ti
 
	z = bridge_z - BRIDGE_Z_START;
 

	
 
	/* Add a bounding box, that separates the bridge from things below it. */
 
	AddSortableSpriteToDraw(SPR_EMPTY_BOUNDING_BOX, PAL_NONE, x, y, 16, 16, 1, bridge_z - TILE_HEIGHT + BB_Z_SEPARATOR);
 

	
 
	/* Draw Trambits as SpriteCombine */
 
	if (GetTunnelBridgeTransportType(rampsouth) == TRANSPORT_ROAD) StartSpriteCombine();
 
	if (transport_type == TRANSPORT_ROAD) StartSpriteCombine();
 

	
 
	/* Draw floor and far part of bridge*/
 
	if (axis == AXIS_X) {
 
		AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 16, 1, 0x28, z, IsTransparencySet(TO_BRIDGES), 0, 0, BRIDGE_Z_START);
 
	} else {
 
		AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 1, 16, 0x28, z, IsTransparencySet(TO_BRIDGES), 0, 0, BRIDGE_Z_START);
 
	}
 

	
 
	psid++;
 

	
 
	if (GetTunnelBridgeTransportType(rampsouth) == TRANSPORT_ROAD) {
 
	if (transport_type == TRANSPORT_ROAD) {
 
		RoadTypes rts = GetRoadTypes(rampsouth);
 

	
 
		if (HasBit(rts, ROADTYPE_TRAM)) {
 
			/* DrawBridgeTramBits() calls EndSpriteCombine() and StartSpriteCombine() */
 
			DrawBridgeTramBits(x, y, bridge_z, axis ^ 1, HasBit(rts, ROADTYPE_ROAD));
 
		} else {
 
@@ -1061,13 +1065,13 @@ void DrawBridgeMiddle(const TileInfo* ti
 
	} else {
 
		x += 12;
 
		if (psid->sprite & SPRITE_MASK) AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 4, 16, 0x28, z, IsTransparencySet(TO_BRIDGES), 3, 0, BRIDGE_Z_START);
 
	}
 

	
 
	/* Draw TramFront as SpriteCombine */
 
	if (GetTunnelBridgeTransportType(rampsouth) == TRANSPORT_ROAD) EndSpriteCombine();
 
	if (transport_type == TRANSPORT_ROAD) EndSpriteCombine();
 

	
 
	psid++;
 
	if (ti->z + 5 == z) {
 
		/* draw poles below for small bridges */
 
		if (psid->sprite != 0) {
 
			SpriteID image = psid->sprite;
 
@@ -1181,14 +1185,14 @@ static void ClickTile_TunnelBridge(TileI
 
	/* not used */
 
}
 

	
 

	
 
static uint32 GetTileTrackStatus_TunnelBridge(TileIndex tile, TransportType mode, uint sub_mode)
 
{
 
	if (GetTunnelBridgeTransportType(tile) != mode) return 0;
 
	if (GetTunnelBridgeTransportType(tile) == TRANSPORT_ROAD && (GetRoadTypes(tile) & sub_mode) == 0) return 0;
 
	TransportType transport_type = GetTunnelBridgeTransportType(tile);
 
	if (transport_type != mode || (transport_type == TRANSPORT_ROAD && (GetRoadTypes(tile) & sub_mode) == 0)) return 0;
 
	return AxisToTrackBits(DiagDirToAxis(GetTunnelBridgeDirection(tile))) * 0x101;
 
}
 

	
 
static void ChangeTileOwner_TunnelBridge(TileIndex tile, PlayerID old_player, PlayerID new_player)
 
{
 
	if (!IsTileOwner(tile, old_player)) return;
0 comments (0 inline, 0 general)