src/road_map.cpp
author rubidium
Tue, 22 Jan 2008 21:00:30 +0000
branchNewGRF_ports
changeset 6872 1c4a4a609f85
parent 6871 5a9dc001e1ad
child 6878 7d1ff2f621c7
permissions -rw-r--r--
(svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
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
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6338
diff changeset
     3
/** @file road_map.cpp */
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6338
diff changeset
     4
3146
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
     5
#include "stdafx.h"
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
     6
#include "openttd.h"
3196
29717e930f9a (svn r3857) Add and use GetBridgeRampDirection()
tron
parents: 3167
diff changeset
     7
#include "bridge_map.h"
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
     8
#include "tile_cmd.h"
3146
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
     9
#include "road_map.h"
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    10
#include "station.h"
3154
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents: 3150
diff changeset
    11
#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
    12
#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
    13
#include "depot.h"
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    14
#include "tunnelbridge_map.h"
3146
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
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6338
diff changeset
    17
RoadBits GetAnyRoadBits(TileIndex tile, RoadType rt)
3146
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    18
{
6871
5a9dc001e1ad (svn r11566) [NewGRF_ports] -Sync: with trunk r11218:r11565.
rubidium
parents: 6743
diff changeset
    19
	if (!HasBit(GetRoadTypes(tile), rt)) return ROAD_NONE;
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6338
diff changeset
    20
3146
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    21
	switch (GetTileType(tile)) {
6743
cabfaa4a0295 (svn r10766) [NewGRF_ports] -Sync: with trunk r10651-10765
richk
parents: 6719
diff changeset
    22
		case MP_ROAD:
3793
33cdb5bf7b21 (svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents: 3404
diff changeset
    23
			switch (GetRoadTileType(tile)) {
3146
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    24
				default:
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6338
diff changeset
    25
				case ROAD_TILE_NORMAL:   return GetRoadBits(tile, rt);
3793
33cdb5bf7b21 (svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents: 3404
diff changeset
    26
				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
    27
				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
    28
			}
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    29
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    30
		case MP_STATION:
5838
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
    31
			if (!IsRoadStopTile(tile)) return ROAD_NONE;
6338
0fb4f452873c (svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents: 5838
diff changeset
    32
			if (IsDriveThroughStopTile(tile)) return (GetRoadStopDir(tile) == DIAGDIR_NE) ? ROAD_X : ROAD_Y;
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
    33
			return DiagDirToRoadBits(GetRoadStopDir(tile));
3146
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    34
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    35
		case MP_TUNNELBRIDGE:
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    36
			if (GetTunnelBridgeTransportType(tile) != TRANSPORT_ROAD) return ROAD_NONE;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents: 6871
diff changeset
    37
			return DiagDirToRoadBits(ReverseDiagDir(GetTunnelBridgeDirection(tile)));
3146
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    38
5838
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
    39
		default: return ROAD_NONE;
3146
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    40
	}
36523d434783 (svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
diff changeset
    41
}
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
    42
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
    43
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6338
diff changeset
    44
TrackBits GetAnyRoadTrackBits(TileIndex tile, RoadType rt)
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
    45
{
4233
572e339d3ceb (svn r5798) - Fix [r5062]: When expanding a town, the test to check if a tile is a
peter1138
parents: 3977
diff changeset
    46
	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
    47
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6338
diff changeset
    48
	/* Don't allow local authorities to build roads through road depots or road stops. */
6871
5a9dc001e1ad (svn r11566) [NewGRF_ports] -Sync: with trunk r11218:r11565.
rubidium
parents: 6743
diff changeset
    49
	if ((IsTileType(tile, MP_ROAD) && IsTileDepotType(tile, TRANSPORT_ROAD)) || (IsTileType(tile, MP_STATION) && !IsDriveThroughStopTile(tile)) || !HasBit(GetRoadTypes(tile), rt)) {
5838
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
    50
		return TRACK_BIT_NONE;
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
    51
	}
4233
572e339d3ceb (svn r5798) - Fix [r5062]: When expanding a town, the test to check if a tile is a
peter1138
parents: 3977
diff changeset
    52
6719
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6338
diff changeset
    53
	r = GetTileTrackStatus(tile, TRANSPORT_ROAD, RoadTypeToRoadTypes(rt));
4cc327ad39d5 (svn r10027) [NewGRF_ports] -Sync: with trunk r9506-10026
richk
parents: 6338
diff changeset
    54
5838
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
    55
	return (TrackBits)(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
    56
}