author | KUDr |
Fri, 20 Apr 2007 19:43:06 +0000 | |
changeset 6513 | 454347ca3dfb |
parent 6418 | e04693bbe82a |
child 6661 | 1716fce5ad29 |
permissions | -rw-r--r-- |
3069
9a1fd047b595
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
1 |
/* $Id$ */ |
9a1fd047b595
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
2 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6390
diff
changeset
|
3 |
/** @file road_map.h */ |
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6390
diff
changeset
|
4 |
|
3145
e833d7a78887
(svn r3765) Fix some naming glitches in r3763 and add missing svn properties
tron
parents:
3144
diff
changeset
|
5 |
#ifndef ROAD_MAP_H |
e833d7a78887
(svn r3765) Fix some naming glitches in r3763 and add missing svn properties
tron
parents:
3144
diff
changeset
|
6 |
#define ROAD_MAP_H |
3069
9a1fd047b595
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
7 |
|
9a1fd047b595
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
8 |
#include "macros.h" |
3099
571719b2cee3
(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
|
9 |
#include "rail.h" |
3518
c1e19f08fc25
(svn r4374) Never directly commit something you prepared the evening before, mysteriously it will break in the morning, fix r4373
tron
parents:
3497
diff
changeset
|
10 |
#include "road.h" |
3099
571719b2cee3
(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
|
11 |
#include "tile.h" |
3069
9a1fd047b595
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
12 |
|
3146
8d95593c5ff0
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
13 |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6172
diff
changeset
|
14 |
enum RoadTileType { |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
15 |
ROAD_TILE_NORMAL, |
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
16 |
ROAD_TILE_CROSSING, |
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
17 |
ROAD_TILE_DEPOT |
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6172
diff
changeset
|
18 |
}; |
3369
cab209754317
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
19 |
|
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
20 |
static inline RoadTileType GetRoadTileType(TileIndex t) |
3069
9a1fd047b595
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
21 |
{ |
3369
cab209754317
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
22 |
assert(IsTileType(t, MP_STREET)); |
4000
4009d092b306
(svn r5210) Many small changes which piled up: const, unsigned, variable scope, CSE for readability, DeMorgan, if cascades -> switch, whitespace, parentheses, bracing, misc.
tron
parents:
3900
diff
changeset
|
23 |
return (RoadTileType)GB(_m[t].m5, 4, 4); |
3150
729951cb5448
(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
|
24 |
} |
729951cb5448
(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
|
25 |
|
3497
154080838ed1
(svn r4348) Move IsLevelCrossing() from rail.h to road_map.h
tron
parents:
3430
diff
changeset
|
26 |
static inline bool IsLevelCrossing(TileIndex t) |
154080838ed1
(svn r4348) Move IsLevelCrossing() from rail.h to road_map.h
tron
parents:
3430
diff
changeset
|
27 |
{ |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
28 |
return GetRoadTileType(t) == ROAD_TILE_CROSSING; |
3497
154080838ed1
(svn r4348) Move IsLevelCrossing() from rail.h to road_map.h
tron
parents:
3430
diff
changeset
|
29 |
} |
154080838ed1
(svn r4348) Move IsLevelCrossing() from rail.h to road_map.h
tron
parents:
3430
diff
changeset
|
30 |
|
3560
b2fcf1898eec
(svn r4435) - Fix: an assertion triggered when trying to remove a bridge with the remove-tool (r4348 surfaced this). In CmdRemoveRoad tiletype was not checked for ownership. Intorudce IsLevelCrossingTile() which checks if a tile is a crossing without knowing the type. Suggested by peter1138 and Tron.
Darkvater
parents:
3518
diff
changeset
|
31 |
static inline bool IsLevelCrossingTile(TileIndex t) |
b2fcf1898eec
(svn r4435) - Fix: an assertion triggered when trying to remove a bridge with the remove-tool (r4348 surfaced this). In CmdRemoveRoad tiletype was not checked for ownership. Intorudce IsLevelCrossingTile() which checks if a tile is a crossing without knowing the type. Suggested by peter1138 and Tron.
Darkvater
parents:
3518
diff
changeset
|
32 |
{ |
b2fcf1898eec
(svn r4435) - Fix: an assertion triggered when trying to remove a bridge with the remove-tool (r4348 surfaced this). In CmdRemoveRoad tiletype was not checked for ownership. Intorudce IsLevelCrossingTile() which checks if a tile is a crossing without knowing the type. Suggested by peter1138 and Tron.
Darkvater
parents:
3518
diff
changeset
|
33 |
return IsTileType(t, MP_STREET) && IsLevelCrossing(t); |
b2fcf1898eec
(svn r4435) - Fix: an assertion triggered when trying to remove a bridge with the remove-tool (r4348 surfaced this). In CmdRemoveRoad tiletype was not checked for ownership. Intorudce IsLevelCrossingTile() which checks if a tile is a crossing without knowing the type. Suggested by peter1138 and Tron.
Darkvater
parents:
3518
diff
changeset
|
34 |
} |
3150
729951cb5448
(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
|
35 |
|
3369
cab209754317
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
36 |
static inline RoadBits GetRoadBits(TileIndex t) |
3272
b3e2d8e19937
(svn r3984) Add a function to get the road axis of a level crossing
tron
parents:
3196
diff
changeset
|
37 |
{ |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
38 |
assert(GetRoadTileType(t) == ROAD_TILE_NORMAL); |
4000
4009d092b306
(svn r5210) Many small changes which piled up: const, unsigned, variable scope, CSE for readability, DeMorgan, if cascades -> switch, whitespace, parentheses, bracing, misc.
tron
parents:
3900
diff
changeset
|
39 |
return (RoadBits)GB(_m[t].m5, 0, 4); |
3369
cab209754317
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
40 |
} |
cab209754317
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
41 |
|
cab209754317
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
42 |
static inline void SetRoadBits(TileIndex t, RoadBits r) |
cab209754317
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
43 |
{ |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
44 |
assert(GetRoadTileType(t) == ROAD_TILE_NORMAL); // XXX incomplete |
3369
cab209754317
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
45 |
SB(_m[t].m5, 0, 4, r); |
cab209754317
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
46 |
} |
cab209754317
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
47 |
|
cab209754317
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
48 |
|
cab209754317
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
49 |
static inline Axis GetCrossingRoadAxis(TileIndex t) |
cab209754317
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
50 |
{ |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
51 |
assert(GetRoadTileType(t) == ROAD_TILE_CROSSING); |
3369
cab209754317
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
52 |
return (Axis)GB(_m[t].m5, 3, 1); |
3272
b3e2d8e19937
(svn r3984) Add a function to get the road axis of a level crossing
tron
parents:
3196
diff
changeset
|
53 |
} |
b3e2d8e19937
(svn r3984) Add a function to get the road axis of a level crossing
tron
parents:
3196
diff
changeset
|
54 |
|
3070
980529af506f
(svn r3659) Add function to get the road bits of a level crossing
tron
parents:
3069
diff
changeset
|
55 |
static inline RoadBits GetCrossingRoadBits(TileIndex tile) |
980529af506f
(svn r3659) Add function to get the road bits of a level crossing
tron
parents:
3069
diff
changeset
|
56 |
{ |
3272
b3e2d8e19937
(svn r3984) Add a function to get the road axis of a level crossing
tron
parents:
3196
diff
changeset
|
57 |
return GetCrossingRoadAxis(tile) == AXIS_X ? ROAD_X : ROAD_Y; |
3070
980529af506f
(svn r3659) Add function to get the road bits of a level crossing
tron
parents:
3069
diff
changeset
|
58 |
} |
980529af506f
(svn r3659) Add function to get the road bits of a level crossing
tron
parents:
3069
diff
changeset
|
59 |
|
3103
c0681c720481
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
60 |
static inline TrackBits GetCrossingRailBits(TileIndex tile) |
c0681c720481
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
61 |
{ |
4158 | 62 |
return AxisToTrackBits(OtherAxis(GetCrossingRoadAxis(tile))); |
3103
c0681c720481
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
63 |
} |
c0681c720481
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
64 |
|
c0681c720481
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
65 |
|
3274 | 66 |
// TODO swap owner of road and rail |
67 |
static inline Owner GetCrossingRoadOwner(TileIndex t) |
|
68 |
{ |
|
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
69 |
assert(GetRoadTileType(t) == ROAD_TILE_CROSSING); |
6172
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
5475
diff
changeset
|
70 |
return (Owner)_m[t].m4; |
3274 | 71 |
} |
72 |
||
73 |
static inline void SetCrossingRoadOwner(TileIndex t, Owner o) |
|
74 |
{ |
|
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
75 |
assert(GetRoadTileType(t) == ROAD_TILE_CROSSING); |
6172
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
5475
diff
changeset
|
76 |
_m[t].m4 = o; |
3274 | 77 |
} |
78 |
||
3322
41b4d25b126d
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
79 |
static inline void UnbarCrossing(TileIndex t) |
41b4d25b126d
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
80 |
{ |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
81 |
assert(GetRoadTileType(t) == ROAD_TILE_CROSSING); |
3322
41b4d25b126d
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
82 |
CLRBIT(_m[t].m5, 2); |
41b4d25b126d
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
83 |
} |
41b4d25b126d
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
84 |
|
41b4d25b126d
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
85 |
static inline void BarCrossing(TileIndex t) |
41b4d25b126d
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
86 |
{ |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
87 |
assert(GetRoadTileType(t) == ROAD_TILE_CROSSING); |
3322
41b4d25b126d
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
88 |
SETBIT(_m[t].m5, 2); |
41b4d25b126d
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
89 |
} |
41b4d25b126d
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
90 |
|
41b4d25b126d
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
91 |
static inline bool IsCrossingBarred(TileIndex t) |
41b4d25b126d
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
92 |
{ |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
93 |
assert(GetRoadTileType(t) == ROAD_TILE_CROSSING); |
3322
41b4d25b126d
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
94 |
return HASBIT(_m[t].m5, 2); |
41b4d25b126d
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
95 |
} |
3274 | 96 |
|
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
97 |
#define IsOnDesert IsOnSnow |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
98 |
static inline bool IsOnSnow(TileIndex t) |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
99 |
{ |
6172
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
5475
diff
changeset
|
100 |
return HASBIT(_m[t].m3, 7); |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
101 |
} |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
102 |
|
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
103 |
#define ToggleDesert ToggleSnow |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
104 |
static inline void ToggleSnow(TileIndex t) |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
105 |
{ |
6172
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
5475
diff
changeset
|
106 |
TOGGLEBIT(_m[t].m3, 7); |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
107 |
} |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
108 |
|
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
109 |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6172
diff
changeset
|
110 |
enum Roadside { |
4048 | 111 |
ROADSIDE_BARREN = 0, |
112 |
ROADSIDE_GRASS = 1, |
|
113 |
ROADSIDE_PAVED = 2, |
|
114 |
ROADSIDE_STREET_LIGHTS = 3, |
|
115 |
ROADSIDE_TREES = 5, |
|
116 |
ROADSIDE_GRASS_ROAD_WORKS = 6, |
|
117 |
ROADSIDE_PAVED_ROAD_WORKS = 7 |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6172
diff
changeset
|
118 |
}; |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
119 |
|
4048 | 120 |
static inline Roadside GetRoadside(TileIndex tile) |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
121 |
{ |
6172
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
5475
diff
changeset
|
122 |
return (Roadside)GB(_m[tile].m3, 4, 3); |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
123 |
} |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
124 |
|
4048 | 125 |
static inline void SetRoadside(TileIndex tile, Roadside s) |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
126 |
{ |
6172
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
5475
diff
changeset
|
127 |
SB(_m[tile].m3, 4, 3, s); |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
128 |
} |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
129 |
|
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
130 |
static inline bool HasRoadWorks(TileIndex t) |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
131 |
{ |
4048 | 132 |
return GetRoadside(t) >= ROADSIDE_GRASS_ROAD_WORKS; |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
133 |
} |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
134 |
|
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
135 |
static inline bool IncreaseRoadWorksCounter(TileIndex t) |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
136 |
{ |
6172
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
5475
diff
changeset
|
137 |
AB(_m[t].m3, 0, 4, 1); |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
138 |
|
6172
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
5475
diff
changeset
|
139 |
return GB(_m[t].m3, 0, 4) == 15; |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
140 |
} |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
141 |
|
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
142 |
static inline void StartRoadWorks(TileIndex t) |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
143 |
{ |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
144 |
assert(!HasRoadWorks(t)); |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
145 |
/* Remove any trees or lamps in case or roadwork */ |
4048 | 146 |
switch (GetRoadside(t)) { |
147 |
case ROADSIDE_BARREN: |
|
148 |
case ROADSIDE_GRASS: SetRoadside(t, ROADSIDE_GRASS_ROAD_WORKS); break; |
|
149 |
default: SetRoadside(t, ROADSIDE_PAVED_ROAD_WORKS); break; |
|
4045
9eda219bc134
(svn r5314) -Regression: When road works started on a road tile with barren roadside the road side turned into trees (caused by r4258)
tron
parents:
4000
diff
changeset
|
150 |
} |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
151 |
} |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
152 |
|
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
153 |
static inline void TerminateRoadWorks(TileIndex t) |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
154 |
{ |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
155 |
assert(HasRoadWorks(t)); |
4048 | 156 |
SetRoadside(t, (Roadside)(GetRoadside(t) - ROADSIDE_GRASS_ROAD_WORKS + ROADSIDE_GRASS)); |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
157 |
/* Stop the counter */ |
6172
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
5475
diff
changeset
|
158 |
SB(_m[t].m3, 0, 4, 0); |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
159 |
} |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
160 |
|
3069
9a1fd047b595
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
161 |
|
3369
cab209754317
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
162 |
static inline DiagDirection GetRoadDepotDirection(TileIndex t) |
3069
9a1fd047b595
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
163 |
{ |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
164 |
assert(GetRoadTileType(t) == ROAD_TILE_DEPOT); |
3369
cab209754317
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
165 |
return (DiagDirection)GB(_m[t].m5, 0, 2); |
3167
8323c2ccd029
(svn r3795) Add a function to request the orientation of a depot
tron
parents:
3150
diff
changeset
|
166 |
} |
8323c2ccd029
(svn r3795) Add a function to request the orientation of a depot
tron
parents:
3150
diff
changeset
|
167 |
|
8323c2ccd029
(svn r3795) Add a function to request the orientation of a depot
tron
parents:
3150
diff
changeset
|
168 |
|
3146
8d95593c5ff0
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
169 |
/** |
8d95593c5ff0
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
170 |
* Returns the RoadBits on an arbitrary tile |
6390
802629b3c7f1
(svn r9520) -Codechange: Add the notion of Industry behaviour. It means what an industry can do (plant fields, cut trees, do not change production), what can be done to it (disasters like mine subsidence, jet/chopper attack), when it can be built etc...
belugas
parents:
6248
diff
changeset
|
171 |
* Special behaviour: |
3146
8d95593c5ff0
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
172 |
* - road depots: entrance is treated as road piece |
8d95593c5ff0
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
173 |
* - road tunnels: entrance is treated as road piece |
3196 | 174 |
* - bridge ramps: start of the ramp is treated as road piece |
3146
8d95593c5ff0
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
175 |
* - bridge middle parts: bridge itself is ignored |
6418
e04693bbe82a
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6393
diff
changeset
|
176 |
* @param tile the tile to get the road bits for |
e04693bbe82a
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6393
diff
changeset
|
177 |
* @return the road bits of the given tile |
3146
8d95593c5ff0
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
178 |
*/ |
6418
e04693bbe82a
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6393
diff
changeset
|
179 |
RoadBits GetAnyRoadBits(TileIndex tile); |
3146
8d95593c5ff0
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
180 |
|
6418
e04693bbe82a
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6393
diff
changeset
|
181 |
/** |
e04693bbe82a
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6393
diff
changeset
|
182 |
* Get the accessible track bits for the given tile. |
e04693bbe82a
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6393
diff
changeset
|
183 |
* Special behaviour: |
e04693bbe82a
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6393
diff
changeset
|
184 |
* - road depots: no track bits |
e04693bbe82a
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6393
diff
changeset
|
185 |
* - non-drive-through stations: no track bits |
e04693bbe82a
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6393
diff
changeset
|
186 |
* @param tile the tile to get the track bits for |
e04693bbe82a
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6393
diff
changeset
|
187 |
* @return the track bits for the given tile |
e04693bbe82a
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6393
diff
changeset
|
188 |
*/ |
3150
729951cb5448
(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
|
189 |
TrackBits GetAnyRoadTrackBits(TileIndex tile); |
729951cb5448
(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
|
190 |
|
729951cb5448
(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
|
191 |
|
4849
1c6f21eb97f2
(svn r6775) -Codechange: Use some more proper types, especially Owner and PlayerID as
Darkvater
parents:
4666
diff
changeset
|
192 |
static inline void MakeRoadNormal(TileIndex t, Owner owner, RoadBits bits, TownID town) |
3099
571719b2cee3
(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
|
193 |
{ |
571719b2cee3
(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
|
194 |
SetTileType(t, MP_STREET); |
571719b2cee3
(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
|
195 |
SetTileOwner(t, owner); |
571719b2cee3
(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
|
196 |
_m[t].m2 = town; |
6172
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
5475
diff
changeset
|
197 |
_m[t].m3 = 0 << 7 | 0 << 4 | 0; |
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
5475
diff
changeset
|
198 |
_m[t].m4 = 0; |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
199 |
_m[t].m5 = ROAD_TILE_NORMAL << 4 | bits; |
3099
571719b2cee3
(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
|
200 |
} |
571719b2cee3
(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
|
201 |
|
571719b2cee3
(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
|
202 |
|
571719b2cee3
(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
|
203 |
static inline void MakeRoadCrossing(TileIndex t, Owner road, Owner rail, Axis roaddir, RailType rt, uint town) |
571719b2cee3
(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
|
204 |
{ |
571719b2cee3
(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
|
205 |
SetTileType(t, MP_STREET); |
571719b2cee3
(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
|
206 |
SetTileOwner(t, rail); |
571719b2cee3
(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
|
207 |
_m[t].m2 = town; |
6172
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
5475
diff
changeset
|
208 |
_m[t].m3 = 0 << 7 | 0 << 4 | rt; |
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
5475
diff
changeset
|
209 |
_m[t].m4 = road; |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
210 |
_m[t].m5 = ROAD_TILE_CROSSING << 4 | roaddir << 3 | 0 << 2; |
3099
571719b2cee3
(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
|
211 |
} |
571719b2cee3
(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
|
212 |
|
571719b2cee3
(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
|
213 |
|
571719b2cee3
(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
|
214 |
static inline void MakeRoadDepot(TileIndex t, Owner owner, DiagDirection dir) |
571719b2cee3
(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
|
215 |
{ |
571719b2cee3
(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
|
216 |
SetTileType(t, MP_STREET); |
571719b2cee3
(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
|
217 |
SetTileOwner(t, owner); |
571719b2cee3
(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
|
218 |
_m[t].m2 = 0; |
571719b2cee3
(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
|
219 |
_m[t].m3 = 0; |
571719b2cee3
(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
|
220 |
_m[t].m4 = 0; |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
221 |
_m[t].m5 = ROAD_TILE_DEPOT << 4 | dir; |
3099
571719b2cee3
(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
|
222 |
} |
571719b2cee3
(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
|
223 |
|
4666
172a0cdf28a6
(svn r6560) - Codechange: Minor fix; add missing #include guards and comments, and correct svn properties on bmp.[ch]
peter1138
parents:
4158
diff
changeset
|
224 |
#endif /* ROAD_MAP_H */ |