src/road_map.cpp
author rubidium
Wed, 09 Jan 2008 18:11:12 +0000
branchnoai
changeset 9723 eee46cb39750
parent 9722 ebf0ece7d8f6
child 9732 f8eb3e208514
permissions -rw-r--r--
(svn r11796) [NoAI] -Sync: with trunk r11502:11795.
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
9574
698395509d12 (svn r9575) [NoAI] -Sync with trunk r9504:9574
glx
parents: 6338
diff changeset
     3
/** @file road_map.cpp */
698395509d12 (svn r9575) [NoAI] -Sync with trunk r9504:9574
glx
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"
9723
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents: 9722
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"
9723
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents: 9722
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
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents: 9599
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
{
9722
ebf0ece7d8f6 (svn r11503) [NoAI] -Sync: with trunk r11308:11502.
rubidium
parents: 9694
diff changeset
    19
	if (!HasBit(GetRoadTypes(tile), rt)) return ROAD_NONE;
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents: 9599
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)) {
9694
e72987579514 (svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents: 9624
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:
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents: 9599
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:
9723
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents: 9722
diff changeset
    36
			if (GetTunnelBridgeTransportType(tile) != TRANSPORT_ROAD) return ROAD_NONE;
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents: 9722
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
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents: 9599
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
9574
698395509d12 (svn r9575) [NoAI] -Sync with trunk r9504:9574
glx
parents: 6338
diff changeset
    48
	/* Don't allow local authorities to build roads through road depots or road stops. */
9722
ebf0ece7d8f6 (svn r11503) [NoAI] -Sync: with trunk r11308:11502.
rubidium
parents: 9694
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
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents: 9599
diff changeset
    53
	r = GetTileTrackStatus(tile, TRANSPORT_ROAD, RoadTypeToRoadTypes(rt));
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents: 9599
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
}