road_map.c
author Darkvater
Sat, 19 Aug 2006 15:24:40 +0000
changeset 4304 5e26af218efd
parent 4233 572e339d3ceb
child 4615 09d62f8da967
permissions -rw-r--r--
(svn r5951) - Codechange: GetVehicleOutOfTunnelTile() never did anything, and making it work properly only resulted in massive performance drops, and it not working properly also seemed to work, so make it not work properly once again.
3146
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
     1
/* $Id$ */
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
     2
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
     3
#include "stdafx.h"
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
     4
#include "openttd.h"
3196
29717e930f9a (svn r3857) Add and use GetBridgeRampDirection()
tron
parents: 3167
diff changeset
     5
#include "bridge_map.h"
3150
025fe8cd7104 (svn r3773) Shove some semantics down ottd's throat by replacing ints and magic numbers by enums and some related changes
tron
parents: 3146
diff changeset
     6
#include "functions.h"
3146
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
     7
#include "road_map.h"
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
     8
#include "station.h"
3154
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents: 3150
diff changeset
     9
#include "tunnel_map.h"
3404
3ac4f7fedfb5 (svn r4215) -Codechange: Renamed *RoadStation* functions to *RoadStop* and moved them to station_map.h to keep consistency
celestar
parents: 3234
diff changeset
    10
#include "station_map.h"
3927
b6e0f409d92d (svn r5062) -Fix: town extends road beyond depot or roadstop (introduced by YAPF related change of GetTileTrackStatus() - r4419)
KUDr
parents: 3793
diff changeset
    11
#include "depot.h"
3146
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    12
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    13
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    14
RoadBits GetAnyRoadBits(TileIndex tile)
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    15
{
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    16
	switch (GetTileType(tile)) {
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    17
		case MP_STREET:
3793
33cdb5bf7b21 (svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents: 3404
diff changeset
    18
			switch (GetRoadTileType(tile)) {
3146
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    19
				default:
3793
33cdb5bf7b21 (svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents: 3404
diff changeset
    20
				case ROAD_TILE_NORMAL:   return GetRoadBits(tile);
33cdb5bf7b21 (svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents: 3404
diff changeset
    21
				case ROAD_TILE_CROSSING: return GetCrossingRoadBits(tile);
33cdb5bf7b21 (svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents: 3404
diff changeset
    22
				case ROAD_TILE_DEPOT:    return DiagDirToRoadBits(GetRoadDepotDirection(tile));
3146
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    23
			}
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    24
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    25
		case MP_STATION:
3404
3ac4f7fedfb5 (svn r4215) -Codechange: Renamed *RoadStation* functions to *RoadStop* and moved them to station_map.h to keep consistency
celestar
parents: 3234
diff changeset
    26
			if (!IsRoadStopTile(tile)) return 0;
3ac4f7fedfb5 (svn r4215) -Codechange: Renamed *RoadStation* functions to *RoadStop* and moved them to station_map.h to keep consistency
celestar
parents: 3234
diff changeset
    27
			return DiagDirToRoadBits(GetRoadStopDir(tile));
3146
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    28
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    29
		case MP_TUNNELBRIDGE:
3977
edb5b94e2094 (svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents: 3933
diff changeset
    30
			if (IsBridge(tile)) {
edb5b94e2094 (svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents: 3933
diff changeset
    31
				if (IsBridgeMiddle(tile)) {
edb5b94e2094 (svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents: 3933
diff changeset
    32
					if (!IsTransportUnderBridge(tile) ||
edb5b94e2094 (svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents: 3933
diff changeset
    33
							GetBridgeTransportType(tile) != TRANSPORT_ROAD) {
edb5b94e2094 (svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents: 3933
diff changeset
    34
						return 0;
edb5b94e2094 (svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents: 3933
diff changeset
    35
					}
edb5b94e2094 (svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents: 3933
diff changeset
    36
					return GetRoadBitsUnderBridge(tile);
edb5b94e2094 (svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents: 3933
diff changeset
    37
				} else {
edb5b94e2094 (svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents: 3933
diff changeset
    38
					// ending
edb5b94e2094 (svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents: 3933
diff changeset
    39
					if (GetBridgeTransportType(tile) != TRANSPORT_ROAD) return 0;
edb5b94e2094 (svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents: 3933
diff changeset
    40
					return DiagDirToRoadBits(ReverseDiagDir(GetBridgeRampDirection(tile)));
edb5b94e2094 (svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents: 3933
diff changeset
    41
				}
edb5b94e2094 (svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents: 3933
diff changeset
    42
			} else {
edb5b94e2094 (svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents: 3933
diff changeset
    43
				// tunnel
3154
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents: 3150
diff changeset
    44
				if (GetTunnelTransportType(tile) != TRANSPORT_ROAD) return 0;
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents: 3150
diff changeset
    45
				return DiagDirToRoadBits(ReverseDiagDir(GetTunnelDirection(tile)));
3146
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    46
			}
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    47
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    48
		default: return 0;
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    49
	}
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    50
}
3150
025fe8cd7104 (svn r3773) Shove some semantics down ottd's throat by replacing ints and magic numbers by enums and some related changes
tron
parents: 3146
diff changeset
    51
025fe8cd7104 (svn r3773) Shove some semantics down ottd's throat by replacing ints and magic numbers by enums and some related changes
tron
parents: 3146
diff changeset
    52
025fe8cd7104 (svn r3773) Shove some semantics down ottd's throat by replacing ints and magic numbers by enums and some related changes
tron
parents: 3146
diff changeset
    53
TrackBits GetAnyRoadTrackBits(TileIndex tile)
025fe8cd7104 (svn r3773) Shove some semantics down ottd's throat by replacing ints and magic numbers by enums and some related changes
tron
parents: 3146
diff changeset
    54
{
4233
572e339d3ceb (svn r5798) - Fix [r5062]: When expanding a town, the test to check if a tile is a
peter1138
parents: 3977
diff changeset
    55
	uint32 r;
572e339d3ceb (svn r5798) - Fix [r5062]: When expanding a town, the test to check if a tile is a
peter1138
parents: 3977
diff changeset
    56
572e339d3ceb (svn r5798) - Fix [r5062]: When expanding a town, the test to check if a tile is a
peter1138
parents: 3977
diff changeset
    57
	// Don't allow building through road depot tiles.
572e339d3ceb (svn r5798) - Fix [r5062]: When expanding a town, the test to check if a tile is a
peter1138
parents: 3977
diff changeset
    58
	if (IsTileType(tile, MP_STREET) && IsTileDepotType(tile, TRANSPORT_ROAD)) {
572e339d3ceb (svn r5798) - Fix [r5062]: When expanding a town, the test to check if a tile is a
peter1138
parents: 3977
diff changeset
    59
		return 0;
3927
b6e0f409d92d (svn r5062) -Fix: town extends road beyond depot or roadstop (introduced by YAPF related change of GetTileTrackStatus() - r4419)
KUDr
parents: 3793
diff changeset
    60
	}
4233
572e339d3ceb (svn r5798) - Fix [r5062]: When expanding a town, the test to check if a tile is a
peter1138
parents: 3977
diff changeset
    61
572e339d3ceb (svn r5798) - Fix [r5062]: When expanding a town, the test to check if a tile is a
peter1138
parents: 3977
diff changeset
    62
	r = GetTileTrackStatus(tile, TRANSPORT_ROAD);
572e339d3ceb (svn r5798) - Fix [r5062]: When expanding a town, the test to check if a tile is a
peter1138
parents: 3977
diff changeset
    63
	return (byte)(r | (r >> 8));
3150
025fe8cd7104 (svn r3773) Shove some semantics down ottd's throat by replacing ints and magic numbers by enums and some related changes
tron
parents: 3146
diff changeset
    64
}