Changeset - r5410:de5ff7568811
[Not reviewed]
master
0 3 0
rubidium - 17 years ago 2006-12-29 09:10:44
rubidium@openttd.org
(svn r7607) -Codechange: remove direct map accesses for snow/desert on tunnels and bridges.
3 files changed with 40 insertions and 6 deletions:
0 comments (0 inline, 0 general)
bridge_map.h
Show inline comments
 
@@ -81,6 +81,19 @@ static inline TransportType GetBridgeTra
 
}
 

	
 

	
 
static inline bool HasBridgeSnowOrDesert(TileIndex t)
 
{
 
	assert(IsBridgeTile(t));
 
	return HASBIT(_m[t].m4, 7);
 
}
 

	
 

	
 
static inline void SetBridgeSnowOrDesert(TileIndex t, bool snow_or_desert)
 
{
 
	assert(IsBridgeTile(t));
 
	SB(_m[t].m4, 7, 1, snow_or_desert);
 
}
 

	
 
/**
 
 * Finds the end of a bridge in the specified direction starting at a middle tile
 
 */
tunnel_map.h
Show inline comments
 
@@ -35,6 +35,18 @@ static inline TransportType GetTunnelTra
 
	return (TransportType)GB(_m[t].m5, 2, 2);
 
}
 

	
 
static inline bool HasTunnelSnowOrDesert(TileIndex t)
 
{
 
	assert(IsTunnelTile(t));
 
	return HASBIT(_m[t].m4, 7);
 
}
 

	
 
static inline void SetTunnelSnowOrDesert(TileIndex t, bool snow_or_desert)
 
{
 
	assert(IsTunnelTile(t));
 
	SB(_m[t].m4, 7, 1, snow_or_desert);
 
}
 

	
 

	
 
TileIndex GetOtherTunnelEnd(TileIndex);
 
bool IsTunnelInWay(TileIndex, uint z);
tunnelbridge_cmd.c
Show inline comments
 
@@ -798,7 +798,6 @@ uint GetBridgeFoundation(Slope tileh, Ax
 
static void DrawTile_TunnelBridge(TileInfo *ti)
 
{
 
	uint32 image;
 
	bool ice = _m[ti->tile].m4 & 0x80;
 

	
 
	if (IsTunnel(ti->tile)) {
 
		if (GetTunnelTransportType(ti->tile) == TRANSPORT_RAIL) {
 
@@ -807,7 +806,7 @@ static void DrawTile_TunnelBridge(TileIn
 
			image = SPR_TUNNEL_ENTRY_REAR_ROAD;
 
		}
 

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

	
 
		image += GetTunnelDirection(ti->tile) * 2;
 
		DrawGroundSprite(image);
 
@@ -817,6 +816,7 @@ static void DrawTile_TunnelBridge(TileIn
 
		DrawBridgeMiddle(ti);
 
	} else if (IsBridge(ti->tile)) { // XXX is this necessary?
 
		int base_offset;
 
		bool ice = HasBridgeSnowOrDesert(ti->tile);
 

	
 
		if (GetBridgeTransportType(ti->tile) == TRANSPORT_RAIL) {
 
			base_offset = GetRailTypeInfo(GetRailType(ti->tile))->bridge_offset;
 
@@ -1109,17 +1109,26 @@ static void AnimateTile_TunnelBridge(Til
 

	
 
static void TileLoop_TunnelBridge(TileIndex tile)
 
{
 
	bool snow_or_desert = IsTunnelTile(tile) ? HasTunnelSnowOrDesert(tile) : HasBridgeSnowOrDesert(tile);
 
	switch (_opt.landscape) {
 
		case LT_HILLY:
 
			if (HASBIT(_m[tile].m4, 7) != (GetTileZ(tile) > _opt.snow_line)) {
 
				TOGGLEBIT(_m[tile].m4, 7);
 
			if (snow_or_desert != (GetTileZ(tile) > _opt.snow_line)) {
 
				if (IsTunnelTile(tile)) {
 
					SetTunnelSnowOrDesert(tile, !snow_or_desert);
 
				} else {
 
					SetBridgeSnowOrDesert(tile, !snow_or_desert);
 
				}
 
				MarkTileDirtyByTile(tile);
 
			}
 
			break;
 

	
 
		case LT_DESERT:
 
			if (GetTropicZone(tile) == TROPICZONE_DESERT && !(_m[tile].m4 & 0x80)) {
 
				_m[tile].m4 |= 0x80;
 
			if (GetTropicZone(tile) == TROPICZONE_DESERT && !snow_or_desert) {
 
				if (IsTunnelTile(tile)) {
 
					SetTunnelSnowOrDesert(tile, true);
 
				} else {
 
					SetBridgeSnowOrDesert(tile, true);
 
				}
 
				MarkTileDirtyByTile(tile);
 
			}
 
			break;
0 comments (0 inline, 0 general)