6 #include "direction.h" |
6 #include "direction.h" |
7 #include "tile.h" |
7 #include "tile.h" |
8 |
8 |
9 |
9 |
10 typedef enum RailTileType { |
10 typedef enum RailTileType { |
11 RAIL_TYPE_NORMAL = 0x0, |
11 RAIL_TILE_NORMAL = 0x0, |
12 RAIL_TYPE_SIGNALS = 0x40, |
12 RAIL_TILE_SIGNALS = 0x40, |
13 RAIL_TYPE_UNUSED = 0x80, /* XXX: Maybe this could become waypoints? */ |
13 RAIL_TILE_UNUSED = 0x80, /* XXX: Maybe this could become waypoints? */ |
14 RAIL_TYPE_DEPOT_WAYPOINT = 0xC0, /* Is really depots and waypoints... */ |
14 RAIL_TILE_DEPOT_WAYPOINT = 0xC0, /* Is really depots and waypoints... */ |
15 RAIL_TILE_TYPE_MASK = 0xC0 |
15 RAIL_TILE_TYPE_MASK = 0xC0 |
16 } RailTileType; |
16 } RailTileType; |
17 |
17 |
18 static inline RailTileType GetRailTileType(TileIndex t) |
18 static inline RailTileType GetRailTileType(TileIndex t) |
19 { |
19 { |
21 return _m[t].m5 & RAIL_TILE_TYPE_MASK; |
21 return _m[t].m5 & RAIL_TILE_TYPE_MASK; |
22 } |
22 } |
23 |
23 |
24 /** |
24 /** |
25 * Returns whether this is plain rails, with or without signals. Iow, if this |
25 * Returns whether this is plain rails, with or without signals. Iow, if this |
26 * tiles RailTileType is RAIL_TYPE_NORMAL or RAIL_TYPE_SIGNALS. |
26 * tiles RailTileType is RAIL_TILE_NORMAL or RAIL_TILE_SIGNALS. |
27 */ |
27 */ |
28 static inline bool IsPlainRailTile(TileIndex tile) |
28 static inline bool IsPlainRailTile(TileIndex tile) |
29 { |
29 { |
30 RailTileType rtt = GetRailTileType(tile); |
30 RailTileType rtt = GetRailTileType(tile); |
31 return rtt == RAIL_TYPE_NORMAL || rtt == RAIL_TYPE_SIGNALS; |
31 return rtt == RAIL_TILE_NORMAL || rtt == RAIL_TILE_SIGNALS; |
32 } |
32 } |
33 |
33 |
34 /** |
34 /** |
35 * Checks if a rail tile has signals. |
35 * Checks if a rail tile has signals. |
36 */ |
36 */ |
37 static inline bool HasSignals(TileIndex tile) |
37 static inline bool HasSignals(TileIndex tile) |
38 { |
38 { |
39 return GetRailTileType(tile) == RAIL_TYPE_SIGNALS; |
39 return GetRailTileType(tile) == RAIL_TILE_SIGNALS; |
40 } |
40 } |
41 |
41 |
42 |
42 |
43 /** These specify the subtype when the main rail type is |
43 /** These specify the subtype when the main rail type is |
44 * RAIL_TYPE_DEPOT_WAYPOINT */ |
44 * RAIL_TILE_DEPOT_WAYPOINT */ |
45 typedef enum RailTileSubtypes { |
45 typedef enum RailTileSubtypes { |
46 RAIL_SUBTYPE_DEPOT = 0x00, |
46 RAIL_SUBTYPE_DEPOT = 0x00, |
47 RAIL_SUBTYPE_WAYPOINT = 0x04, |
47 RAIL_SUBTYPE_WAYPOINT = 0x04, |
48 RAIL_SUBTYPE_MASK = 0x3C |
48 RAIL_SUBTYPE_MASK = 0x3C |
49 } RailTileSubtype; |
49 } RailTileSubtype; |
50 |
50 |
51 /** |
51 /** |
52 * Returns the RailTileSubtype of a given rail tile with type |
52 * Returns the RailTileSubtype of a given rail tile with type |
53 * RAIL_TYPE_DEPOT_WAYPOINT |
53 * RAIL_TILE_DEPOT_WAYPOINT |
54 */ |
54 */ |
55 static inline RailTileSubtype GetRailTileSubtype(TileIndex tile) |
55 static inline RailTileSubtype GetRailTileSubtype(TileIndex tile) |
56 { |
56 { |
57 assert(GetRailTileType(tile) == RAIL_TYPE_DEPOT_WAYPOINT); |
57 assert(GetRailTileType(tile) == RAIL_TILE_DEPOT_WAYPOINT); |
58 return (RailTileSubtype)(_m[tile].m5 & RAIL_SUBTYPE_MASK); |
58 return (RailTileSubtype)(_m[tile].m5 & RAIL_SUBTYPE_MASK); |
59 } |
59 } |
60 |
60 |
61 |
61 |
62 typedef enum RailTypes { |
62 typedef enum RailTypes { |
199 SIGTYPE_COMBO = 3 // presignal inter-block |
199 SIGTYPE_COMBO = 3 // presignal inter-block |
200 } SignalType; |
200 } SignalType; |
201 |
201 |
202 static inline SignalType GetSignalType(TileIndex t) |
202 static inline SignalType GetSignalType(TileIndex t) |
203 { |
203 { |
204 assert(GetRailTileType(t) == RAIL_TYPE_SIGNALS); |
204 assert(GetRailTileType(t) == RAIL_TILE_SIGNALS); |
205 return (SignalType)GB(_m[t].m4, 0, 2); |
205 return (SignalType)GB(_m[t].m4, 0, 2); |
206 } |
206 } |
207 |
207 |
208 static inline void SetSignalType(TileIndex t, SignalType s) |
208 static inline void SetSignalType(TileIndex t, SignalType s) |
209 { |
209 { |
210 assert(GetRailTileType(t) == RAIL_TYPE_SIGNALS); |
210 assert(GetRailTileType(t) == RAIL_TILE_SIGNALS); |
211 SB(_m[t].m4, 0, 2, s); |
211 SB(_m[t].m4, 0, 2, s); |
212 } |
212 } |
213 |
213 |
214 static inline bool IsPresignalEntry(TileIndex t) |
214 static inline bool IsPresignalEntry(TileIndex t) |
215 { |
215 { |
285 RAIL_GROUND_ICE_DESERT = 12, |
285 RAIL_GROUND_ICE_DESERT = 12, |
286 } RailGroundType; |
286 } RailGroundType; |
287 |
287 |
288 static inline void SetRailGroundType(TileIndex t, RailGroundType rgt) |
288 static inline void SetRailGroundType(TileIndex t, RailGroundType rgt) |
289 { |
289 { |
290 if (GetRailTileType(t) == RAIL_TYPE_DEPOT_WAYPOINT) { |
290 if (GetRailTileType(t) == RAIL_TILE_DEPOT_WAYPOINT) { |
291 SB(_m[t].m4, 0, 4, rgt); |
291 SB(_m[t].m4, 0, 4, rgt); |
292 return; |
292 return; |
293 } |
293 } |
294 SB(_m[t].m2, 0, 4, rgt); |
294 SB(_m[t].m2, 0, 4, rgt); |
295 } |
295 } |
296 |
296 |
297 static inline RailGroundType GetRailGroundType(TileIndex t) |
297 static inline RailGroundType GetRailGroundType(TileIndex t) |
298 { |
298 { |
299 /* TODO Unify this */ |
299 /* TODO Unify this */ |
300 if (GetRailTileType(t) == RAIL_TYPE_DEPOT_WAYPOINT) return GB(_m[t].m4, 0, 4); |
300 if (GetRailTileType(t) == RAIL_TILE_DEPOT_WAYPOINT) return GB(_m[t].m4, 0, 4); |
301 return GB(_m[t].m2, 0, 4); |
301 return GB(_m[t].m2, 0, 4); |
302 } |
302 } |
303 |
303 |
304 static inline bool IsBarrenRailGround(TileIndex t) |
304 static inline bool IsBarrenRailGround(TileIndex t) |
305 { |
305 { |
317 SetTileType(t, MP_RAILWAY); |
317 SetTileType(t, MP_RAILWAY); |
318 SetTileOwner(t, o); |
318 SetTileOwner(t, o); |
319 _m[t].m2 = 0; |
319 _m[t].m2 = 0; |
320 _m[t].m3 = r; |
320 _m[t].m3 = r; |
321 _m[t].m4 = 0; |
321 _m[t].m4 = 0; |
322 _m[t].m5 = RAIL_TYPE_NORMAL | b; |
322 _m[t].m5 = RAIL_TILE_NORMAL | b; |
323 } |
323 } |
324 |
324 |
325 |
325 |
326 static inline void MakeRailDepot(TileIndex t, Owner o, DiagDirection d, RailType r) |
326 static inline void MakeRailDepot(TileIndex t, Owner o, DiagDirection d, RailType r) |
327 { |
327 { |
328 SetTileType(t, MP_RAILWAY); |
328 SetTileType(t, MP_RAILWAY); |
329 SetTileOwner(t, o); |
329 SetTileOwner(t, o); |
330 _m[t].m2 = 0; |
330 _m[t].m2 = 0; |
331 _m[t].m3 = r; |
331 _m[t].m3 = r; |
332 _m[t].m4 = 0; |
332 _m[t].m4 = 0; |
333 _m[t].m5 = RAIL_TYPE_DEPOT_WAYPOINT | RAIL_SUBTYPE_DEPOT | d; |
333 _m[t].m5 = RAIL_TILE_DEPOT_WAYPOINT | RAIL_SUBTYPE_DEPOT | d; |
334 } |
334 } |
335 |
335 |
336 |
336 |
337 static inline void MakeRailWaypoint(TileIndex t, Owner o, Axis a, RailType r, uint index) |
337 static inline void MakeRailWaypoint(TileIndex t, Owner o, Axis a, RailType r, uint index) |
338 { |
338 { |
339 SetTileType(t, MP_RAILWAY); |
339 SetTileType(t, MP_RAILWAY); |
340 SetTileOwner(t, o); |
340 SetTileOwner(t, o); |
341 _m[t].m2 = index; |
341 _m[t].m2 = index; |
342 _m[t].m3 = r; |
342 _m[t].m3 = r; |
343 _m[t].m4 = 0; |
343 _m[t].m4 = 0; |
344 _m[t].m5 = RAIL_TYPE_DEPOT_WAYPOINT | RAIL_SUBTYPE_WAYPOINT | a; |
344 _m[t].m5 = RAIL_TILE_DEPOT_WAYPOINT | RAIL_SUBTYPE_WAYPOINT | a; |
345 } |
345 } |
346 |
346 |
347 #endif |
347 #endif |