author | tron |
Wed, 15 Mar 2006 19:53:25 +0000 | |
changeset 3218 | 68decfba698f |
parent 3216 | ac69372a0833 |
child 3225 | 655763f3861c |
permissions | -rw-r--r-- |
3189
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
1 |
/* $Id$ */ |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
2 |
|
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
3 |
#ifndef BRIDGE_MAP_H |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
4 |
#define BRIDGE_MAP_H |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
5 |
|
3196 | 6 |
#include "direction.h" |
3189
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
7 |
#include "macros.h" |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
8 |
#include "map.h" |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
9 |
#include "rail.h" |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
10 |
#include "tile.h" |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
11 |
|
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
12 |
|
3214
172b409bf612
(svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents:
3209
diff
changeset
|
13 |
static inline bool IsBridgeRamp(TileIndex t) |
172b409bf612
(svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents:
3209
diff
changeset
|
14 |
{ |
172b409bf612
(svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents:
3209
diff
changeset
|
15 |
return !HASBIT(_m[t].m5, 6); |
172b409bf612
(svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents:
3209
diff
changeset
|
16 |
} |
172b409bf612
(svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents:
3209
diff
changeset
|
17 |
|
172b409bf612
(svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents:
3209
diff
changeset
|
18 |
|
3196 | 19 |
/** |
20 |
* Get the direction pointing onto the bridge |
|
21 |
*/ |
|
22 |
static inline DiagDirection GetBridgeRampDirection(TileIndex t) |
|
23 |
{ |
|
24 |
/* Heavy wizardry to convert the X/Y (bit 0) + N/S (bit 5) encoding of |
|
25 |
* bridges to a DiagDirection |
|
26 |
*/ |
|
27 |
return (DiagDirection)((6 - (_m[t].m5 >> 4 & 2) - (_m[t].m5 & 1)) % 4); |
|
28 |
} |
|
29 |
||
30 |
||
3216
ac69372a0833
(svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents:
3214
diff
changeset
|
31 |
static inline bool IsClearUnderBridge(TileIndex t) |
ac69372a0833
(svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents:
3214
diff
changeset
|
32 |
{ |
ac69372a0833
(svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents:
3214
diff
changeset
|
33 |
return GB(_m[t].m5, 3, 3) == 0; |
ac69372a0833
(svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents:
3214
diff
changeset
|
34 |
} |
ac69372a0833
(svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents:
3214
diff
changeset
|
35 |
|
ac69372a0833
(svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents:
3214
diff
changeset
|
36 |
|
ac69372a0833
(svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents:
3214
diff
changeset
|
37 |
static inline bool IsTransportUnderBridge(TileIndex t) |
ac69372a0833
(svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents:
3214
diff
changeset
|
38 |
{ |
ac69372a0833
(svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents:
3214
diff
changeset
|
39 |
return HASBIT(_m[t].m5, 5); |
ac69372a0833
(svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents:
3214
diff
changeset
|
40 |
} |
ac69372a0833
(svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents:
3214
diff
changeset
|
41 |
|
ac69372a0833
(svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents:
3214
diff
changeset
|
42 |
static inline TransportType GetTransportTypeUnderBridge(TileIndex t) |
ac69372a0833
(svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents:
3214
diff
changeset
|
43 |
{ |
ac69372a0833
(svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents:
3214
diff
changeset
|
44 |
return (TransportType)GB(_m[t].m5, 3, 2); |
ac69372a0833
(svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents:
3214
diff
changeset
|
45 |
} |
ac69372a0833
(svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents:
3214
diff
changeset
|
46 |
|
ac69372a0833
(svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents:
3214
diff
changeset
|
47 |
|
3214
172b409bf612
(svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents:
3209
diff
changeset
|
48 |
/** |
172b409bf612
(svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents:
3209
diff
changeset
|
49 |
* Starting at one bridge end finds the other bridge end |
172b409bf612
(svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents:
3209
diff
changeset
|
50 |
*/ |
172b409bf612
(svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents:
3209
diff
changeset
|
51 |
TileIndex GetOtherBridgeEnd(TileIndex); |
172b409bf612
(svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents:
3209
diff
changeset
|
52 |
|
172b409bf612
(svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents:
3209
diff
changeset
|
53 |
|
3189
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
54 |
static inline void SetClearUnderBridge(TileIndex t) |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
55 |
{ |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
56 |
SetTileOwner(t, OWNER_NONE); |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
57 |
SB(_m[t].m5, 3, 3, 0 << 2 | 0); |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
58 |
} |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
59 |
|
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
60 |
static inline void SetWaterUnderBridge(TileIndex t) |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
61 |
{ |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
62 |
SetTileOwner(t, OWNER_WATER); |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
63 |
SB(_m[t].m5, 3, 3, 0 << 2 | 1); |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
64 |
} |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
65 |
|
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
66 |
static inline void SetRailUnderBridge(TileIndex t, Owner o, RailType r) |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
67 |
{ |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
68 |
SetTileOwner(t, o); |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
69 |
SB(_m[t].m5, 3, 3, 1 << 2 | TRANSPORT_RAIL); |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
70 |
SB(_m[t].m3, 0, 4, r); |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
71 |
} |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
72 |
|
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
73 |
static inline void SetRoadUnderBridge(TileIndex t, Owner o) |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
74 |
{ |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
75 |
SetTileOwner(t, o); |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
76 |
SB(_m[t].m5, 3, 3, 1 << 2 | TRANSPORT_ROAD); |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
77 |
} |
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
78 |
|
3209
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
79 |
|
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
80 |
static inline void MakeBridgeRamp(TileIndex t, Owner o, uint bridgetype, DiagDirection d, TransportType tt) |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
81 |
{ |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
82 |
uint northsouth = (d == DIAGDIR_NE || d == DIAGDIR_NW); |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
83 |
|
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
84 |
SetTileType(t, MP_TUNNELBRIDGE); |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
85 |
SetTileOwner(t, o); |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
86 |
_m[t].m2 = bridgetype << 4; |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
87 |
_m[t].m4 = 0; |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
88 |
_m[t].m5 = 1 << 7 | 0 << 6 | northsouth << 5 | tt << 1 | DiagDirToAxis(d); |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
89 |
} |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
90 |
|
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
91 |
static inline void MakeRoadBridgeRamp(TileIndex t, Owner o, uint bridgetype, DiagDirection d) |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
92 |
{ |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
93 |
MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_ROAD); |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
94 |
_m[t].m3 = 0; |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
95 |
} |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
96 |
|
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
97 |
static inline void MakeRailBridgeRamp(TileIndex t, Owner o, uint bridgetype, DiagDirection d, RailType r) |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
98 |
{ |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
99 |
MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_RAIL); |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
100 |
_m[t].m3 = r; |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
101 |
} |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
102 |
|
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
103 |
|
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
104 |
static inline void MakeBridgeMiddle(TileIndex t, uint bridgetype, uint piece, Axis a, TransportType tt) |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
105 |
{ |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
106 |
SetTileType(t, MP_TUNNELBRIDGE); |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
107 |
SetTileOwner(t, OWNER_NONE); |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
108 |
_m[t].m2 = bridgetype << 4 | piece; |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
109 |
_m[t].m3 = 0; |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
110 |
_m[t].m4 = 0; |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
111 |
_m[t].m5 = 1 << 7 | 1 << 6 | 0 << 5 | 0 << 3 | tt << 1 | a; |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
112 |
} |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
113 |
|
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
114 |
static inline void MakeRoadBridgeMiddle(TileIndex t, uint bridgetype, uint piece, Axis a) |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
115 |
{ |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
116 |
MakeBridgeMiddle(t, bridgetype, piece, a, TRANSPORT_ROAD); |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
117 |
} |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
118 |
|
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
119 |
static inline void MakeRailBridgeMiddle(TileIndex t, uint bridgetype, uint piece, Axis a, RailType r) |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
120 |
{ |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
121 |
MakeBridgeMiddle(t, bridgetype, piece, a, TRANSPORT_RAIL); |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
122 |
SB(_m[t].m3, 4, 4, r); |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
123 |
} |
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
124 |
|
e0b7d48351a3
(svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents:
3196
diff
changeset
|
125 |
|
3189
1af302c5abd0
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff
changeset
|
126 |
#endif |