17 ROAD_TILE_DEPOT |
17 ROAD_TILE_DEPOT |
18 }; |
18 }; |
19 |
19 |
20 static inline RoadTileType GetRoadTileType(TileIndex t) |
20 static inline RoadTileType GetRoadTileType(TileIndex t) |
21 { |
21 { |
22 assert(IsTileType(t, MP_STREET)); |
22 assert(IsTileType(t, MP_ROAD)); |
23 return (RoadTileType)GB(_m[t].m5, 6, 2); |
23 return (RoadTileType)GB(_m[t].m5, 6, 2); |
24 } |
24 } |
25 |
25 |
26 static inline bool IsLevelCrossing(TileIndex t) |
26 static inline bool IsLevelCrossing(TileIndex t) |
27 { |
27 { |
28 return GetRoadTileType(t) == ROAD_TILE_CROSSING; |
28 return GetRoadTileType(t) == ROAD_TILE_CROSSING; |
29 } |
29 } |
30 |
30 |
31 static inline bool IsLevelCrossingTile(TileIndex t) |
31 static inline bool IsLevelCrossingTile(TileIndex t) |
32 { |
32 { |
33 return IsTileType(t, MP_STREET) && IsLevelCrossing(t); |
33 return IsTileType(t, MP_ROAD) && IsLevelCrossing(t); |
34 } |
34 } |
35 |
35 |
36 static inline RoadBits GetRoadBits(TileIndex t, RoadType rt) |
36 static inline RoadBits GetRoadBits(TileIndex t, RoadType rt) |
37 { |
37 { |
38 assert(GetRoadTileType(t) == ROAD_TILE_NORMAL); |
38 assert(GetRoadTileType(t) == ROAD_TILE_NORMAL); |
60 } |
60 } |
61 } |
61 } |
62 |
62 |
63 static inline RoadTypes GetRoadTypes(TileIndex t) |
63 static inline RoadTypes GetRoadTypes(TileIndex t) |
64 { |
64 { |
65 if (IsTileType(t, MP_STREET)) { |
65 if (IsTileType(t, MP_ROAD)) { |
66 return (RoadTypes)GB(_me[t].m7, 5, 3); |
66 return (RoadTypes)GB(_me[t].m7, 5, 3); |
67 } else { |
67 } else { |
68 return (RoadTypes)GB(_m[t].m3, 0, 3); |
68 return (RoadTypes)GB(_m[t].m3, 0, 3); |
69 } |
69 } |
70 } |
70 } |
71 |
71 |
72 static inline void SetRoadTypes(TileIndex t, RoadTypes rt) |
72 static inline void SetRoadTypes(TileIndex t, RoadTypes rt) |
73 { |
73 { |
74 if (IsTileType(t, MP_STREET)) { |
74 if (IsTileType(t, MP_ROAD)) { |
75 SB(_me[t].m7, 5, 3, rt); |
75 SB(_me[t].m7, 5, 3, rt); |
76 } else { |
76 } else { |
77 assert(IsTileType(t, MP_STATION) || IsTileType(t, MP_TUNNELBRIDGE)); |
77 assert(IsTileType(t, MP_STATION) || IsTileType(t, MP_TUNNELBRIDGE)); |
78 SB(_m[t].m3, 0, 2, rt); |
78 SB(_m[t].m3, 0, 2, rt); |
79 } |
79 } |
80 } |
80 } |
81 |
81 |
82 static inline Owner GetRoadOwner(TileIndex t, RoadType rt) |
82 static inline Owner GetRoadOwner(TileIndex t, RoadType rt) |
83 { |
83 { |
84 if (!IsTileType(t, MP_STREET)) return GetTileOwner(t); |
84 if (!IsTileType(t, MP_ROAD)) return GetTileOwner(t); |
85 |
85 |
86 switch (GetRoadTileType(t)) { |
86 switch (GetRoadTileType(t)) { |
87 default: NOT_REACHED(); |
87 default: NOT_REACHED(); |
88 case ROAD_TILE_NORMAL: |
88 case ROAD_TILE_NORMAL: |
89 switch (rt) { |
89 switch (rt) { |
113 } |
113 } |
114 } |
114 } |
115 |
115 |
116 static inline void SetRoadOwner(TileIndex t, RoadType rt, Owner o) |
116 static inline void SetRoadOwner(TileIndex t, RoadType rt, Owner o) |
117 { |
117 { |
118 if (!IsTileType(t, MP_STREET)) return SetTileOwner(t, o); |
118 if (!IsTileType(t, MP_ROAD)) return SetTileOwner(t, o); |
119 |
119 |
120 switch (GetRoadTileType(t)) { |
120 switch (GetRoadTileType(t)) { |
121 default: NOT_REACHED(); |
121 default: NOT_REACHED(); |
122 case ROAD_TILE_NORMAL: |
122 case ROAD_TILE_NORMAL: |
123 switch (rt) { |
123 switch (rt) { |
305 TrackBits GetAnyRoadTrackBits(TileIndex tile, RoadType rt); |
305 TrackBits GetAnyRoadTrackBits(TileIndex tile, RoadType rt); |
306 |
306 |
307 |
307 |
308 static inline void MakeRoadNormal(TileIndex t, RoadBits bits, RoadTypes rot, TownID town, Owner road, Owner tram, Owner hway) |
308 static inline void MakeRoadNormal(TileIndex t, RoadBits bits, RoadTypes rot, TownID town, Owner road, Owner tram, Owner hway) |
309 { |
309 { |
310 SetTileType(t, MP_STREET); |
310 SetTileType(t, MP_ROAD); |
311 SetTileOwner(t, road); |
311 SetTileOwner(t, road); |
312 _m[t].m2 = town; |
312 _m[t].m2 = town; |
313 _m[t].m3 = 0; |
313 _m[t].m3 = 0; |
314 _m[t].m4 = (HASBIT(rot, ROADTYPE_TRAM) ? bits : 0) << 4 | (HASBIT(rot, ROADTYPE_ROAD) ? bits : 0); |
314 _m[t].m4 = (HASBIT(rot, ROADTYPE_TRAM) ? bits : 0) << 4 | (HASBIT(rot, ROADTYPE_ROAD) ? bits : 0); |
315 _m[t].m5 = ROAD_TILE_NORMAL << 6; |
315 _m[t].m5 = ROAD_TILE_NORMAL << 6; |
319 } |
319 } |
320 |
320 |
321 |
321 |
322 static inline void MakeRoadCrossing(TileIndex t, Owner road, Owner tram, Owner hway, Owner rail, Axis roaddir, RailType rat, RoadTypes rot, uint town) |
322 static inline void MakeRoadCrossing(TileIndex t, Owner road, Owner tram, Owner hway, Owner rail, Axis roaddir, RailType rat, RoadTypes rot, uint town) |
323 { |
323 { |
324 SetTileType(t, MP_STREET); |
324 SetTileType(t, MP_ROAD); |
325 SetTileOwner(t, rail); |
325 SetTileOwner(t, rail); |
326 _m[t].m2 = town; |
326 _m[t].m2 = town; |
327 _m[t].m3 = rat; |
327 _m[t].m3 = rat; |
328 _m[t].m4 = roaddir << 6 | road; |
328 _m[t].m4 = roaddir << 6 | road; |
329 _m[t].m5 = ROAD_TILE_CROSSING << 6; |
329 _m[t].m5 = ROAD_TILE_CROSSING << 6; |
333 } |
333 } |
334 |
334 |
335 |
335 |
336 static inline void MakeRoadDepot(TileIndex t, Owner owner, DiagDirection dir, RoadType rt) |
336 static inline void MakeRoadDepot(TileIndex t, Owner owner, DiagDirection dir, RoadType rt) |
337 { |
337 { |
338 SetTileType(t, MP_STREET); |
338 SetTileType(t, MP_ROAD); |
339 SetTileOwner(t, owner); |
339 SetTileOwner(t, owner); |
340 _m[t].m2 = 0; |
340 _m[t].m2 = 0; |
341 _m[t].m3 = 0; |
341 _m[t].m3 = 0; |
342 _m[t].m4 = 0; |
342 _m[t].m4 = 0; |
343 _m[t].m5 = ROAD_TILE_DEPOT << 6 | dir; |
343 _m[t].m5 = ROAD_TILE_DEPOT << 6 | dir; |