author | bjarni |
Fri, 24 Mar 2006 10:53:49 +0000 | |
changeset 3318 | b54ff6bb28be |
parent 3274 | e3fd60498b38 |
child 3322 | fa5d46929db9 |
permissions | -rw-r--r-- |
3069
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
1 |
/* $Id$ */ |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
2 |
|
3145
349b745dfbf4
(svn r3765) Fix some naming glitches in r3763 and add missing svn properties
tron
parents:
3144
diff
changeset
|
3 |
#ifndef ROAD_MAP_H |
349b745dfbf4
(svn r3765) Fix some naming glitches in r3763 and add missing svn properties
tron
parents:
3144
diff
changeset
|
4 |
#define ROAD_MAP_H |
3069
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
5 |
|
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
6 |
#include "macros.h" |
3099
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
7 |
#include "rail.h" |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
8 |
#include "tile.h" |
3069
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
9 |
|
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
10 |
typedef enum RoadBits { |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
11 |
ROAD_NW = 1, |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
12 |
ROAD_SW = 2, |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
13 |
ROAD_SE = 4, |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
14 |
ROAD_NE = 8, |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
15 |
ROAD_X = ROAD_SW | ROAD_NE, |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
16 |
ROAD_Y = ROAD_NW | ROAD_SE, |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
17 |
ROAD_ALL = ROAD_X | ROAD_Y |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
18 |
} RoadBits; |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
19 |
|
3103
fb7f22d3bc9b
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
20 |
static inline RoadBits ComplementRoadBits(RoadBits r) |
fb7f22d3bc9b
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
21 |
{ |
fb7f22d3bc9b
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
22 |
return ROAD_ALL ^ r; |
fb7f22d3bc9b
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
23 |
} |
fb7f22d3bc9b
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
24 |
|
3146
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
25 |
static inline RoadBits DiagDirToRoadBits(DiagDirection d) |
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
26 |
{ |
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
27 |
return 1 << (3 ^ d); |
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
28 |
} |
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
29 |
|
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
30 |
|
3069
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
31 |
static inline RoadBits GetRoadBits(TileIndex tile) |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
32 |
{ |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
33 |
return GB(_m[tile].m5, 0, 4); |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
34 |
} |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
35 |
|
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
|
36 |
static inline void SetRoadBits(TileIndex tile, RoadBits r) |
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
|
37 |
{ |
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
|
38 |
SB(_m[tile].m5, 0, 4, r); |
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
|
39 |
} |
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
|
40 |
|
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
|
41 |
|
3272
7e556f209503
(svn r3984) Add a function to get the road axis of a level crossing
tron
parents:
3196
diff
changeset
|
42 |
static inline Axis GetCrossingRoadAxis(TileIndex tile) |
7e556f209503
(svn r3984) Add a function to get the road axis of a level crossing
tron
parents:
3196
diff
changeset
|
43 |
{ |
7e556f209503
(svn r3984) Add a function to get the road axis of a level crossing
tron
parents:
3196
diff
changeset
|
44 |
return (Axis)GB(_m[tile].m5, 3, 1); |
7e556f209503
(svn r3984) Add a function to get the road axis of a level crossing
tron
parents:
3196
diff
changeset
|
45 |
} |
7e556f209503
(svn r3984) Add a function to get the road axis of a level crossing
tron
parents:
3196
diff
changeset
|
46 |
|
3070
512f72481fd9
(svn r3659) Add function to get the road bits of a level crossing
tron
parents:
3069
diff
changeset
|
47 |
static inline RoadBits GetCrossingRoadBits(TileIndex tile) |
512f72481fd9
(svn r3659) Add function to get the road bits of a level crossing
tron
parents:
3069
diff
changeset
|
48 |
{ |
3272
7e556f209503
(svn r3984) Add a function to get the road axis of a level crossing
tron
parents:
3196
diff
changeset
|
49 |
return GetCrossingRoadAxis(tile) == AXIS_X ? ROAD_X : ROAD_Y; |
3070
512f72481fd9
(svn r3659) Add function to get the road bits of a level crossing
tron
parents:
3069
diff
changeset
|
50 |
} |
512f72481fd9
(svn r3659) Add function to get the road bits of a level crossing
tron
parents:
3069
diff
changeset
|
51 |
|
3103
fb7f22d3bc9b
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
52 |
static inline TrackBits GetCrossingRailBits(TileIndex tile) |
fb7f22d3bc9b
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
53 |
{ |
3272
7e556f209503
(svn r3984) Add a function to get the road axis of a level crossing
tron
parents:
3196
diff
changeset
|
54 |
return GetCrossingRoadAxis(tile) == AXIS_X ? TRACK_BIT_Y : TRACK_BIT_X; |
3103
fb7f22d3bc9b
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
55 |
} |
fb7f22d3bc9b
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
56 |
|
fb7f22d3bc9b
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
57 |
|
3274 | 58 |
// TODO swap owner of road and rail |
59 |
static inline Owner GetCrossingRoadOwner(TileIndex t) |
|
60 |
{ |
|
61 |
return (Owner)_m[t].m3; |
|
62 |
} |
|
63 |
||
64 |
static inline void SetCrossingRoadOwner(TileIndex t, Owner o) |
|
65 |
{ |
|
66 |
_m[t].m3 = o; |
|
67 |
} |
|
68 |
||
69 |
||
3069
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
70 |
typedef enum RoadType { |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
71 |
ROAD_NORMAL, |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
72 |
ROAD_CROSSING, |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
73 |
ROAD_DEPOT |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
74 |
} RoadType; |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
75 |
|
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
76 |
static inline RoadType GetRoadType(TileIndex tile) |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
77 |
{ |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
78 |
return GB(_m[tile].m5, 4, 4); |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
79 |
} |
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
80 |
|
3099
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
81 |
|
3167
197b5ee5a831
(svn r3795) Add a function to request the orientation of a depot
tron
parents:
3150
diff
changeset
|
82 |
static inline DiagDirection GetRoadDepotDirection(TileIndex tile) |
197b5ee5a831
(svn r3795) Add a function to request the orientation of a depot
tron
parents:
3150
diff
changeset
|
83 |
{ |
197b5ee5a831
(svn r3795) Add a function to request the orientation of a depot
tron
parents:
3150
diff
changeset
|
84 |
return (DiagDirection)GB(_m[tile].m5, 0, 2); |
197b5ee5a831
(svn r3795) Add a function to request the orientation of a depot
tron
parents:
3150
diff
changeset
|
85 |
} |
197b5ee5a831
(svn r3795) Add a function to request the orientation of a depot
tron
parents:
3150
diff
changeset
|
86 |
|
197b5ee5a831
(svn r3795) Add a function to request the orientation of a depot
tron
parents:
3150
diff
changeset
|
87 |
|
3146
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
88 |
/** |
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
89 |
* Returns the RoadBits on an arbitrary tile |
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
90 |
* Special behavior: |
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
91 |
* - road depots: entrance is treated as road piece |
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
92 |
* - road tunnels: entrance is treated as road piece |
3196 | 93 |
* - bridge ramps: start of the ramp is treated as road piece |
3146
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
94 |
* - bridge middle parts: bridge itself is ignored |
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
95 |
*/ |
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
96 |
RoadBits GetAnyRoadBits(TileIndex); |
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
97 |
|
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
98 |
|
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
|
99 |
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
|
100 |
|
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
|
101 |
|
3099
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
102 |
static inline void MakeRoadNormal(TileIndex t, Owner owner, RoadBits bits, uint town) |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
103 |
{ |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
104 |
SetTileType(t, MP_STREET); |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
105 |
SetTileOwner(t, owner); |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
106 |
_m[t].m2 = town; |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
107 |
_m[t].m3 = 0; |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
108 |
_m[t].m4 = 0 << 7 | 0 << 4 | 0; |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
109 |
_m[t].m5 = ROAD_NORMAL << 4 | bits; |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
110 |
} |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
111 |
|
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
112 |
|
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
113 |
static inline void MakeRoadCrossing(TileIndex t, Owner road, Owner rail, Axis roaddir, RailType rt, uint town) |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
114 |
{ |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
115 |
SetTileType(t, MP_STREET); |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
116 |
SetTileOwner(t, rail); |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
117 |
_m[t].m2 = town; |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
118 |
_m[t].m3 = road; |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
119 |
_m[t].m4 = 0 << 7 | 0 << 4 | rt; |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
120 |
_m[t].m5 = ROAD_CROSSING << 4 | roaddir << 3 | 0 << 2; |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
121 |
} |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
122 |
|
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
123 |
|
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
124 |
static inline void MakeRoadDepot(TileIndex t, Owner owner, DiagDirection dir) |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
125 |
{ |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
126 |
SetTileType(t, MP_STREET); |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
127 |
SetTileOwner(t, owner); |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
128 |
_m[t].m2 = 0; |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
129 |
_m[t].m3 = 0; |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
130 |
_m[t].m4 = 0; |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
131 |
_m[t].m5 = ROAD_DEPOT << 4 | dir; |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
132 |
} |
374e275300e3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3070
diff
changeset
|
133 |
|
3069
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
134 |
#endif |