author | convert-repo |
Mon, 07 Apr 2008 16:21:55 +0000 | |
changeset 10076 | dfd70e42c4ae |
parent 9240 | 5f32884581e6 |
child 10429 | 1b99254f9607 |
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 |
|
6889
f7f6d9cb07a0
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6886
diff
changeset
|
3 |
/** @file road_map.h */ |
f7f6d9cb07a0
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6886
diff
changeset
|
4 |
|
3145
349b745dfbf4
(svn r3765) Fix some naming glitches in r3763 and add missing svn properties
tron
parents:
3144
diff
changeset
|
5 |
#ifndef ROAD_MAP_H |
349b745dfbf4
(svn r3765) Fix some naming glitches in r3763 and add missing svn properties
tron
parents:
3144
diff
changeset
|
6 |
#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
|
7 |
|
8597
87f03bc9c8e4
(svn r11662) -Codechange: move some rail types/related functions around.
rubidium
parents:
8428
diff
changeset
|
8 |
#include "track_func.h" |
87f03bc9c8e4
(svn r11662) -Codechange: move some rail types/related functions around.
rubidium
parents:
8428
diff
changeset
|
9 |
#include "rail_type.h" |
8709
4187ad809fe7
(svn r11776) -Codechange: more header splittings to reduce the dependencies.
rubidium
parents:
8609
diff
changeset
|
10 |
#include "town_type.h" |
8598
14ae80fe4c8f
(svn r11663) -Codechange: moving of the road related types and functions.
rubidium
parents:
8597
diff
changeset
|
11 |
#include "road_func.h" |
8604
8afdd9877afd
(svn r11669) -Codechange: refactor tile.h -> tile_type.h and tile_map.h
rubidium
parents:
8598
diff
changeset
|
12 |
#include "tile_map.h" |
3069
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
13 |
|
3146
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
14 |
|
6574
e1d1a12faaf7
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6498
diff
changeset
|
15 |
enum RoadTileType { |
3793
33cdb5bf7b21
(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_NORMAL, |
33cdb5bf7b21
(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_CROSSING, |
33cdb5bf7b21
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
18 |
ROAD_TILE_DEPOT |
6574
e1d1a12faaf7
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6498
diff
changeset
|
19 |
}; |
3369
00c2ca209a89
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
20 |
|
3793
33cdb5bf7b21
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
21 |
static inline RoadTileType GetRoadTileType(TileIndex t) |
9025
2f0d4cf64ebc
(svn r12104) -Fix (r12103): remember loading indicators transparency settings and make in switchable by Ctrl+9
smatz
parents:
8840
diff
changeset
|
22 |
{ |
7866
e19fda04e8d3
(svn r10733) -Codechange: change MP_STREET into MP_ROAD as we use the word "road" everywhere except in the tile type.
rubidium
parents:
7274
diff
changeset
|
23 |
assert(IsTileType(t, MP_ROAD)); |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
24 |
return (RoadTileType)GB(_m[t].m5, 6, 2); |
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
|
25 |
} |
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
|
26 |
|
9059
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
27 |
static inline bool IsNormalRoad(TileIndex t) |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
28 |
{ |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
29 |
return GetRoadTileType(t) == ROAD_TILE_NORMAL; |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
30 |
} |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
31 |
|
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
32 |
static inline bool IsNormalRoadTile(TileIndex t) |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
33 |
{ |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
34 |
return IsTileType(t, MP_ROAD) && IsNormalRoad(t); |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
35 |
} |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
36 |
|
3497
b3b7e1664379
(svn r4348) Move IsLevelCrossing() from rail.h to road_map.h
tron
parents:
3430
diff
changeset
|
37 |
static inline bool IsLevelCrossing(TileIndex t) |
b3b7e1664379
(svn r4348) Move IsLevelCrossing() from rail.h to road_map.h
tron
parents:
3430
diff
changeset
|
38 |
{ |
3793
33cdb5bf7b21
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3560
diff
changeset
|
39 |
return GetRoadTileType(t) == ROAD_TILE_CROSSING; |
3497
b3b7e1664379
(svn r4348) Move IsLevelCrossing() from rail.h to road_map.h
tron
parents:
3430
diff
changeset
|
40 |
} |
b3b7e1664379
(svn r4348) Move IsLevelCrossing() from rail.h to road_map.h
tron
parents:
3430
diff
changeset
|
41 |
|
3560
4389ae5ad967
(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
|
42 |
static inline bool IsLevelCrossingTile(TileIndex t) |
4389ae5ad967
(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
|
43 |
{ |
7866
e19fda04e8d3
(svn r10733) -Codechange: change MP_STREET into MP_ROAD as we use the word "road" everywhere except in the tile type.
rubidium
parents:
7274
diff
changeset
|
44 |
return IsTileType(t, MP_ROAD) && IsLevelCrossing(t); |
3560
4389ae5ad967
(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
|
45 |
} |
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
|
46 |
|
9059
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
47 |
static inline bool IsRoadDepot(TileIndex t) |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
48 |
{ |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
49 |
return GetRoadTileType(t) == ROAD_TILE_DEPOT; |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
50 |
} |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
51 |
|
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
52 |
static inline bool IsRoadDepotTile(TileIndex t) |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
53 |
{ |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
54 |
return IsTileType(t, MP_ROAD) && IsRoadDepot(t); |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
55 |
} |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
56 |
|
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
57 |
static inline RoadBits GetRoadBits(TileIndex t, RoadType rt) |
3272
7e556f209503
(svn r3984) Add a function to get the road axis of a level crossing
tron
parents:
3196
diff
changeset
|
58 |
{ |
9059
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
59 |
assert(IsNormalRoad(t)); |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
60 |
switch (rt) { |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
61 |
default: NOT_REACHED(); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
62 |
case ROADTYPE_ROAD: return (RoadBits)GB(_m[t].m4, 0, 4); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
63 |
case ROADTYPE_TRAM: return (RoadBits)GB(_m[t].m4, 4, 4); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
64 |
case ROADTYPE_HWAY: return (RoadBits)GB(_m[t].m6, 2, 4); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
65 |
} |
3369
00c2ca209a89
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
66 |
} |
00c2ca209a89
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
67 |
|
9230
1c0a7c2ee6e5
(svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13
parents:
9212
diff
changeset
|
68 |
/** |
9240
5f32884581e6
(svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13
parents:
9230
diff
changeset
|
69 |
* Get all RoadBits set on a tile except from the given RoadType |
5f32884581e6
(svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13
parents:
9230
diff
changeset
|
70 |
* |
5f32884581e6
(svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13
parents:
9230
diff
changeset
|
71 |
* @param t The tile from which we want to get the RoadBits |
5f32884581e6
(svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13
parents:
9230
diff
changeset
|
72 |
* @param rt The RoadType which we exclude from the querry |
5f32884581e6
(svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13
parents:
9230
diff
changeset
|
73 |
* @return all set RoadBits of the tile which are not from the given RoadType |
5f32884581e6
(svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13
parents:
9230
diff
changeset
|
74 |
*/ |
5f32884581e6
(svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13
parents:
9230
diff
changeset
|
75 |
static inline RoadBits GetOtherRoadBits(TileIndex t, RoadType rt) |
5f32884581e6
(svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13
parents:
9230
diff
changeset
|
76 |
{ |
5f32884581e6
(svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13
parents:
9230
diff
changeset
|
77 |
return ((rt == ROADTYPE_ROAD) ? ROAD_NONE : GetRoadBits(t, ROADTYPE_ROAD)) | |
5f32884581e6
(svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13
parents:
9230
diff
changeset
|
78 |
((rt == ROADTYPE_TRAM) ? ROAD_NONE : GetRoadBits(t, ROADTYPE_TRAM)) | |
5f32884581e6
(svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13
parents:
9230
diff
changeset
|
79 |
((rt == ROADTYPE_HWAY) ? ROAD_NONE : GetRoadBits(t, ROADTYPE_HWAY)); |
5f32884581e6
(svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13
parents:
9230
diff
changeset
|
80 |
} |
5f32884581e6
(svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13
parents:
9230
diff
changeset
|
81 |
|
5f32884581e6
(svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13
parents:
9230
diff
changeset
|
82 |
/** |
9230
1c0a7c2ee6e5
(svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13
parents:
9212
diff
changeset
|
83 |
* Get all set RoadBits on the given tile |
1c0a7c2ee6e5
(svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13
parents:
9212
diff
changeset
|
84 |
* |
1c0a7c2ee6e5
(svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13
parents:
9212
diff
changeset
|
85 |
* @param tile The tile from which we want to get the RoadBits |
1c0a7c2ee6e5
(svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13
parents:
9212
diff
changeset
|
86 |
* @return all set RoadBits of the tile |
1c0a7c2ee6e5
(svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13
parents:
9212
diff
changeset
|
87 |
*/ |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
88 |
static inline RoadBits GetAllRoadBits(TileIndex tile) |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
89 |
{ |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
90 |
return GetRoadBits(tile, ROADTYPE_ROAD) | GetRoadBits(tile, ROADTYPE_TRAM) | GetRoadBits(tile, ROADTYPE_HWAY); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
91 |
} |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
92 |
|
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
93 |
static inline void SetRoadBits(TileIndex t, RoadBits r, RoadType rt) |
3369
00c2ca209a89
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
94 |
{ |
9059
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
95 |
assert(IsNormalRoad(t)); // XXX incomplete |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
96 |
switch (rt) { |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
97 |
default: NOT_REACHED(); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
98 |
case ROADTYPE_ROAD: SB(_m[t].m4, 0, 4, r); break; |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
99 |
case ROADTYPE_TRAM: SB(_m[t].m4, 4, 4, r); break; |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
100 |
case ROADTYPE_HWAY: SB(_m[t].m6, 2, 4, r); break; |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
101 |
} |
3369
00c2ca209a89
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
102 |
} |
00c2ca209a89
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
103 |
|
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
104 |
static inline RoadTypes GetRoadTypes(TileIndex t) |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
105 |
{ |
7866
e19fda04e8d3
(svn r10733) -Codechange: change MP_STREET into MP_ROAD as we use the word "road" everywhere except in the tile type.
rubidium
parents:
7274
diff
changeset
|
106 |
if (IsTileType(t, MP_ROAD)) { |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
107 |
return (RoadTypes)GB(_me[t].m7, 5, 3); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
108 |
} else { |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
109 |
return (RoadTypes)GB(_m[t].m3, 0, 3); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
110 |
} |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
111 |
} |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
112 |
|
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
113 |
static inline void SetRoadTypes(TileIndex t, RoadTypes rt) |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
114 |
{ |
7866
e19fda04e8d3
(svn r10733) -Codechange: change MP_STREET into MP_ROAD as we use the word "road" everywhere except in the tile type.
rubidium
parents:
7274
diff
changeset
|
115 |
if (IsTileType(t, MP_ROAD)) { |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
116 |
SB(_me[t].m7, 5, 3, rt); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
117 |
} else { |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
118 |
assert(IsTileType(t, MP_STATION) || IsTileType(t, MP_TUNNELBRIDGE)); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
119 |
SB(_m[t].m3, 0, 2, rt); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
120 |
} |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
121 |
} |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
122 |
|
9059
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
123 |
static inline bool HasTileRoadType(TileIndex t, RoadType rt) |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
124 |
{ |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
125 |
return HasBit(GetRoadTypes(t), rt); |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
126 |
} |
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
127 |
|
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
128 |
static inline Owner GetRoadOwner(TileIndex t, RoadType rt) |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
129 |
{ |
7866
e19fda04e8d3
(svn r10733) -Codechange: change MP_STREET into MP_ROAD as we use the word "road" everywhere except in the tile type.
rubidium
parents:
7274
diff
changeset
|
130 |
if (!IsTileType(t, MP_ROAD)) return GetTileOwner(t); |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
131 |
|
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
132 |
switch (GetRoadTileType(t)) { |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
133 |
default: NOT_REACHED(); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
134 |
case ROAD_TILE_NORMAL: |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
135 |
switch (rt) { |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
136 |
default: NOT_REACHED(); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
137 |
case ROADTYPE_ROAD: return (Owner)GB( _m[t].m1, 0, 5); |
7260
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
138 |
case ROADTYPE_TRAM: { |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
139 |
/* Trams don't need OWNER_TOWN, and remapping OWNER_NONE |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
140 |
* to OWNER_TOWN makes it use one bit less */ |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
141 |
Owner o = (Owner)GB( _m[t].m5, 0, 4); |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
142 |
return o == OWNER_TOWN ? OWNER_NONE : o; |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
143 |
} |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
144 |
case ROADTYPE_HWAY: return (Owner)GB(_me[t].m7, 0, 5); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
145 |
} |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
146 |
case ROAD_TILE_CROSSING: |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
147 |
switch (rt) { |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
148 |
default: NOT_REACHED(); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
149 |
case ROADTYPE_ROAD: return (Owner)GB( _m[t].m4, 0, 5); |
7260
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
150 |
case ROADTYPE_TRAM: { |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
151 |
/* Trams don't need OWNER_TOWN, and remapping OWNER_NONE |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
152 |
* to OWNER_TOWN makes it use one bit less */ |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
153 |
Owner o = (Owner)GB( _m[t].m5, 0, 4); |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
154 |
return o == OWNER_TOWN ? OWNER_NONE : o; |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
155 |
} |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
156 |
case ROADTYPE_HWAY: return (Owner)GB(_me[t].m7, 0, 5); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
157 |
} |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
158 |
case ROAD_TILE_DEPOT: return GetTileOwner(t); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
159 |
} |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
160 |
} |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
161 |
|
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
162 |
static inline void SetRoadOwner(TileIndex t, RoadType rt, Owner o) |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
163 |
{ |
7866
e19fda04e8d3
(svn r10733) -Codechange: change MP_STREET into MP_ROAD as we use the word "road" everywhere except in the tile type.
rubidium
parents:
7274
diff
changeset
|
164 |
if (!IsTileType(t, MP_ROAD)) return SetTileOwner(t, o); |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
165 |
|
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
166 |
switch (GetRoadTileType(t)) { |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
167 |
default: NOT_REACHED(); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
168 |
case ROAD_TILE_NORMAL: |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
169 |
switch (rt) { |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
170 |
default: NOT_REACHED(); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
171 |
case ROADTYPE_ROAD: SB( _m[t].m1, 0, 5, o); break; |
7260
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
172 |
case ROADTYPE_TRAM: SB( _m[t].m5, 0, 4, o == OWNER_NONE ? OWNER_TOWN : o); break; |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
173 |
case ROADTYPE_HWAY: SB(_me[t].m7, 0, 5, o); break; |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
174 |
} |
7158
ffb31324aa5e
(svn r9893) -Fix (r9892): various small bugs that only act up when using something different than plain roads.
rubidium
parents:
7157
diff
changeset
|
175 |
break; |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
176 |
case ROAD_TILE_CROSSING: |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
177 |
switch (rt) { |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
178 |
default: NOT_REACHED(); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
179 |
case ROADTYPE_ROAD: SB( _m[t].m4, 0, 5, o); break; |
7260
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
180 |
/* Trams don't need OWNER_TOWN, and remapping OWNER_NONE |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
181 |
* to OWNER_TOWN makes it use one bit less */ |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
182 |
case ROADTYPE_TRAM: SB( _m[t].m5, 0, 4, o == OWNER_NONE ? OWNER_TOWN : o); break; |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
183 |
case ROADTYPE_HWAY: SB(_me[t].m7, 0, 5, o); break; |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
184 |
} |
7158
ffb31324aa5e
(svn r9893) -Fix (r9892): various small bugs that only act up when using something different than plain roads.
rubidium
parents:
7157
diff
changeset
|
185 |
break; |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
186 |
case ROAD_TILE_DEPOT: return SetTileOwner(t, o); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
187 |
} |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
188 |
} |
3369
00c2ca209a89
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
189 |
|
7260
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
190 |
/** Which directions are disallowed ? */ |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
191 |
enum DisallowedRoadDirections { |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
192 |
DRD_NONE, ///< None of the directions are disallowed |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
193 |
DRD_SOUTHBOUND, ///< All southbound traffic is disallowed |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
194 |
DRD_NORTHBOUND, ///< All northbound traffic is disallowed |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
195 |
DRD_BOTH, ///< All directions are disallowed |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
196 |
DRD_END |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
197 |
}; |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
198 |
DECLARE_ENUM_AS_BIT_SET(DisallowedRoadDirections); |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
199 |
|
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
200 |
/** |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
201 |
* Gets the disallowed directions |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
202 |
* @param t the tile to get the directions from |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
203 |
* @return the disallowed directions |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
204 |
*/ |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
205 |
static inline DisallowedRoadDirections GetDisallowedRoadDirections(TileIndex t) |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
206 |
{ |
9059
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
207 |
assert(IsNormalRoad(t)); |
7260
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
208 |
return (DisallowedRoadDirections)GB(_m[t].m5, 4, 2); |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
209 |
} |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
210 |
|
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
211 |
/** |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
212 |
* Sets the disallowed directions |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
213 |
* @param t the tile to set the directions for |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
214 |
* @param drd the disallowed directions |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
215 |
*/ |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
216 |
static inline void SetDisallowedRoadDirections(TileIndex t, DisallowedRoadDirections drd) |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
217 |
{ |
9059
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
218 |
assert(IsNormalRoad(t)); |
7260
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
219 |
assert(drd < DRD_END); |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
220 |
SB(_m[t].m5, 4, 2, drd); |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
221 |
} |
23cd58b6bf51
(svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents:
7158
diff
changeset
|
222 |
|
3369
00c2ca209a89
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
223 |
static inline Axis GetCrossingRoadAxis(TileIndex t) |
00c2ca209a89
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
224 |
{ |
9059
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
225 |
assert(IsLevelCrossing(t)); |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
226 |
return (Axis)GB(_m[t].m4, 6, 1); |
3272
7e556f209503
(svn r3984) Add a function to get the road axis of a level crossing
tron
parents:
3196
diff
changeset
|
227 |
} |
7e556f209503
(svn r3984) Add a function to get the road axis of a level crossing
tron
parents:
3196
diff
changeset
|
228 |
|
9094
58d1cddf1af6
(svn r12179) -Codechange: use GetCrossingRailTrack() and GetCrossingRailAxis() to improve code readability
smatz
parents:
9059
diff
changeset
|
229 |
static inline Axis GetCrossingRailAxis(TileIndex t) |
58d1cddf1af6
(svn r12179) -Codechange: use GetCrossingRailTrack() and GetCrossingRailAxis() to improve code readability
smatz
parents:
9059
diff
changeset
|
230 |
{ |
58d1cddf1af6
(svn r12179) -Codechange: use GetCrossingRailTrack() and GetCrossingRailAxis() to improve code readability
smatz
parents:
9059
diff
changeset
|
231 |
assert(IsLevelCrossing(t)); |
58d1cddf1af6
(svn r12179) -Codechange: use GetCrossingRailTrack() and GetCrossingRailAxis() to improve code readability
smatz
parents:
9059
diff
changeset
|
232 |
return OtherAxis((Axis)GetCrossingRoadAxis(t)); |
58d1cddf1af6
(svn r12179) -Codechange: use GetCrossingRailTrack() and GetCrossingRailAxis() to improve code readability
smatz
parents:
9059
diff
changeset
|
233 |
} |
58d1cddf1af6
(svn r12179) -Codechange: use GetCrossingRailTrack() and GetCrossingRailAxis() to improve code readability
smatz
parents:
9059
diff
changeset
|
234 |
|
3070
512f72481fd9
(svn r3659) Add function to get the road bits of a level crossing
tron
parents:
3069
diff
changeset
|
235 |
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
|
236 |
{ |
3272
7e556f209503
(svn r3984) Add a function to get the road axis of a level crossing
tron
parents:
3196
diff
changeset
|
237 |
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
|
238 |
} |
512f72481fd9
(svn r3659) Add function to get the road bits of a level crossing
tron
parents:
3069
diff
changeset
|
239 |
|
9094
58d1cddf1af6
(svn r12179) -Codechange: use GetCrossingRailTrack() and GetCrossingRailAxis() to improve code readability
smatz
parents:
9059
diff
changeset
|
240 |
static inline Track GetCrossingRailTrack(TileIndex tile) |
58d1cddf1af6
(svn r12179) -Codechange: use GetCrossingRailTrack() and GetCrossingRailAxis() to improve code readability
smatz
parents:
9059
diff
changeset
|
241 |
{ |
58d1cddf1af6
(svn r12179) -Codechange: use GetCrossingRailTrack() and GetCrossingRailAxis() to improve code readability
smatz
parents:
9059
diff
changeset
|
242 |
return AxisToTrack(GetCrossingRailAxis(tile)); |
58d1cddf1af6
(svn r12179) -Codechange: use GetCrossingRailTrack() and GetCrossingRailAxis() to improve code readability
smatz
parents:
9059
diff
changeset
|
243 |
} |
58d1cddf1af6
(svn r12179) -Codechange: use GetCrossingRailTrack() and GetCrossingRailAxis() to improve code readability
smatz
parents:
9059
diff
changeset
|
244 |
|
3103
fb7f22d3bc9b
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
245 |
static inline TrackBits GetCrossingRailBits(TileIndex tile) |
fb7f22d3bc9b
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
246 |
{ |
9094
58d1cddf1af6
(svn r12179) -Codechange: use GetCrossingRailTrack() and GetCrossingRailAxis() to improve code readability
smatz
parents:
9059
diff
changeset
|
247 |
return AxisToTrackBits(GetCrossingRailAxis(tile)); |
3103
fb7f22d3bc9b
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
248 |
} |
fb7f22d3bc9b
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
249 |
|
8840
81cfba69eddd
(svn r11910) -Fix: play 'ding-ding' crossing sound in more cases (except gameload and crossing construction)
smatz
parents:
8709
diff
changeset
|
250 |
static inline bool IsCrossingBarred(TileIndex t) |
81cfba69eddd
(svn r11910) -Fix: play 'ding-ding' crossing sound in more cases (except gameload and crossing construction)
smatz
parents:
8709
diff
changeset
|
251 |
{ |
9059
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
252 |
assert(IsLevelCrossing(t)); |
8840
81cfba69eddd
(svn r11910) -Fix: play 'ding-ding' crossing sound in more cases (except gameload and crossing construction)
smatz
parents:
8709
diff
changeset
|
253 |
return HasBit(_m[t].m4, 5); |
81cfba69eddd
(svn r11910) -Fix: play 'ding-ding' crossing sound in more cases (except gameload and crossing construction)
smatz
parents:
8709
diff
changeset
|
254 |
} |
81cfba69eddd
(svn r11910) -Fix: play 'ding-ding' crossing sound in more cases (except gameload and crossing construction)
smatz
parents:
8709
diff
changeset
|
255 |
|
81cfba69eddd
(svn r11910) -Fix: play 'ding-ding' crossing sound in more cases (except gameload and crossing construction)
smatz
parents:
8709
diff
changeset
|
256 |
static inline void SetCrossingBarred(TileIndex t, bool barred) |
81cfba69eddd
(svn r11910) -Fix: play 'ding-ding' crossing sound in more cases (except gameload and crossing construction)
smatz
parents:
8709
diff
changeset
|
257 |
{ |
9059
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
258 |
assert(IsLevelCrossing(t)); |
8840
81cfba69eddd
(svn r11910) -Fix: play 'ding-ding' crossing sound in more cases (except gameload and crossing construction)
smatz
parents:
8709
diff
changeset
|
259 |
SB(_m[t].m4, 5, 1, barred); |
81cfba69eddd
(svn r11910) -Fix: play 'ding-ding' crossing sound in more cases (except gameload and crossing construction)
smatz
parents:
8709
diff
changeset
|
260 |
} |
3103
fb7f22d3bc9b
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
tron
parents:
3099
diff
changeset
|
261 |
|
3322
fa5d46929db9
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
262 |
static inline void UnbarCrossing(TileIndex t) |
fa5d46929db9
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
263 |
{ |
8840
81cfba69eddd
(svn r11910) -Fix: play 'ding-ding' crossing sound in more cases (except gameload and crossing construction)
smatz
parents:
8709
diff
changeset
|
264 |
SetCrossingBarred(t, false); |
3322
fa5d46929db9
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
265 |
} |
fa5d46929db9
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
266 |
|
fa5d46929db9
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
267 |
static inline void BarCrossing(TileIndex t) |
fa5d46929db9
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
268 |
{ |
8840
81cfba69eddd
(svn r11910) -Fix: play 'ding-ding' crossing sound in more cases (except gameload and crossing construction)
smatz
parents:
8709
diff
changeset
|
269 |
SetCrossingBarred(t, true); |
3322
fa5d46929db9
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3274
diff
changeset
|
270 |
} |
3274 | 271 |
|
3430
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
272 |
#define IsOnDesert IsOnSnow |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
273 |
static inline bool IsOnSnow(TileIndex t) |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
274 |
{ |
8424
4a488a90ccab
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7866
diff
changeset
|
275 |
return HasBit(_m[t].m3, 7); |
3430
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
276 |
} |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
277 |
|
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
278 |
#define ToggleDesert ToggleSnow |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
279 |
static inline void ToggleSnow(TileIndex t) |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
280 |
{ |
8428
f8300c908bd9
(svn r11485) -Codechange: Remove the doubled function ToggleBitT and rename the remaining to fit with the naming style
skidd13
parents:
8427
diff
changeset
|
281 |
ToggleBit(_m[t].m3, 7); |
3430
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
282 |
} |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
283 |
|
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
284 |
|
6574
e1d1a12faaf7
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6498
diff
changeset
|
285 |
enum Roadside { |
4048 | 286 |
ROADSIDE_BARREN = 0, |
287 |
ROADSIDE_GRASS = 1, |
|
288 |
ROADSIDE_PAVED = 2, |
|
289 |
ROADSIDE_STREET_LIGHTS = 3, |
|
290 |
ROADSIDE_TREES = 5, |
|
291 |
ROADSIDE_GRASS_ROAD_WORKS = 6, |
|
292 |
ROADSIDE_PAVED_ROAD_WORKS = 7 |
|
6574
e1d1a12faaf7
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6498
diff
changeset
|
293 |
}; |
3430
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
294 |
|
4048 | 295 |
static inline Roadside GetRoadside(TileIndex tile) |
3430
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
296 |
{ |
6498
aff910a05c6e
(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:
5726
diff
changeset
|
297 |
return (Roadside)GB(_m[tile].m3, 4, 3); |
3430
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
298 |
} |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
299 |
|
4048 | 300 |
static inline void SetRoadside(TileIndex tile, Roadside s) |
3430
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
301 |
{ |
6498
aff910a05c6e
(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:
5726
diff
changeset
|
302 |
SB(_m[tile].m3, 4, 3, s); |
3430
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
303 |
} |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
304 |
|
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
305 |
static inline bool HasRoadWorks(TileIndex t) |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
306 |
{ |
4048 | 307 |
return GetRoadside(t) >= ROADSIDE_GRASS_ROAD_WORKS; |
3430
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
308 |
} |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
309 |
|
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
310 |
static inline bool IncreaseRoadWorksCounter(TileIndex t) |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
311 |
{ |
6498
aff910a05c6e
(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:
5726
diff
changeset
|
312 |
AB(_m[t].m3, 0, 4, 1); |
3430
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
313 |
|
6498
aff910a05c6e
(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:
5726
diff
changeset
|
314 |
return GB(_m[t].m3, 0, 4) == 15; |
3430
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
315 |
} |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
316 |
|
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
317 |
static inline void StartRoadWorks(TileIndex t) |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
318 |
{ |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
319 |
assert(!HasRoadWorks(t)); |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
320 |
/* Remove any trees or lamps in case or roadwork */ |
4048 | 321 |
switch (GetRoadside(t)) { |
322 |
case ROADSIDE_BARREN: |
|
323 |
case ROADSIDE_GRASS: SetRoadside(t, ROADSIDE_GRASS_ROAD_WORKS); break; |
|
324 |
default: SetRoadside(t, ROADSIDE_PAVED_ROAD_WORKS); break; |
|
4045
e85dc17faa9f
(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
|
325 |
} |
3430
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
326 |
} |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
327 |
|
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
328 |
static inline void TerminateRoadWorks(TileIndex t) |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
329 |
{ |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
330 |
assert(HasRoadWorks(t)); |
4048 | 331 |
SetRoadside(t, (Roadside)(GetRoadside(t) - ROADSIDE_GRASS_ROAD_WORKS + ROADSIDE_GRASS)); |
3430
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
332 |
/* Stop the counter */ |
6498
aff910a05c6e
(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:
5726
diff
changeset
|
333 |
SB(_m[t].m3, 0, 4, 0); |
3430
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
334 |
} |
b283bb956a36
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3369
diff
changeset
|
335 |
|
3069
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
336 |
|
3369
00c2ca209a89
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
337 |
static inline DiagDirection GetRoadDepotDirection(TileIndex t) |
3069
0e6aca11c3da
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
diff
changeset
|
338 |
{ |
9059
04edde3eb0c6
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
9025
diff
changeset
|
339 |
assert(IsRoadDepot(t)); |
3369
00c2ca209a89
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3322
diff
changeset
|
340 |
return (DiagDirection)GB(_m[t].m5, 0, 2); |
3167
197b5ee5a831
(svn r3795) Add a function to request the orientation of a depot
tron
parents:
3150
diff
changeset
|
341 |
} |
197b5ee5a831
(svn r3795) Add a function to request the orientation of a depot
tron
parents:
3150
diff
changeset
|
342 |
|
197b5ee5a831
(svn r3795) Add a function to request the orientation of a depot
tron
parents:
3150
diff
changeset
|
343 |
|
3146
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
344 |
/** |
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
345 |
* Returns the RoadBits on an arbitrary tile |
6886
742e1d75f442
(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:
6574
diff
changeset
|
346 |
* Special behaviour: |
3146
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
347 |
* - 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
|
348 |
* - road tunnels: entrance is treated as road piece |
3196 | 349 |
* - 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
|
350 |
* - bridge middle parts: bridge itself is ignored |
9212
3503ffa351b6
(svn r12390) -Fix [FS#1851]: trams failing to turn on bridge heads/tunnel entrances.
rubidium
parents:
9094
diff
changeset
|
351 |
* |
3503ffa351b6
(svn r12390) -Fix [FS#1851]: trams failing to turn on bridge heads/tunnel entrances.
rubidium
parents:
9094
diff
changeset
|
352 |
* If straight_tunnel_bridge_entrance is set a ROAD_X or ROAD_Y |
3503ffa351b6
(svn r12390) -Fix [FS#1851]: trams failing to turn on bridge heads/tunnel entrances.
rubidium
parents:
9094
diff
changeset
|
353 |
* for bridge ramps and tunnel entrances is returned depending |
3503ffa351b6
(svn r12390) -Fix [FS#1851]: trams failing to turn on bridge heads/tunnel entrances.
rubidium
parents:
9094
diff
changeset
|
354 |
* on the orientation of the tunnel or bridge. |
6914
3ba37b6fa39b
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6889
diff
changeset
|
355 |
* @param tile the tile to get the road bits for |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
356 |
* @param rt the road type to get the road bits form |
9212
3503ffa351b6
(svn r12390) -Fix [FS#1851]: trams failing to turn on bridge heads/tunnel entrances.
rubidium
parents:
9094
diff
changeset
|
357 |
* @param stbe whether to return straight road bits for tunnels/bridges. |
6914
3ba37b6fa39b
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6889
diff
changeset
|
358 |
* @return the road bits of the given tile |
3146
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
359 |
*/ |
9212
3503ffa351b6
(svn r12390) -Fix [FS#1851]: trams failing to turn on bridge heads/tunnel entrances.
rubidium
parents:
9094
diff
changeset
|
360 |
RoadBits GetAnyRoadBits(TileIndex tile, RoadType rt, bool straight_tunnel_bridge_entrance = false); |
3146
36523d434783
(svn r3766) Add a function to get the RoadBits from an arbitrary tile
tron
parents:
3145
diff
changeset
|
361 |
|
6914
3ba37b6fa39b
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6889
diff
changeset
|
362 |
/** |
3ba37b6fa39b
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6889
diff
changeset
|
363 |
* Get the accessible track bits for the given tile. |
3ba37b6fa39b
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6889
diff
changeset
|
364 |
* Special behaviour: |
3ba37b6fa39b
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6889
diff
changeset
|
365 |
* - road depots: no track bits |
3ba37b6fa39b
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6889
diff
changeset
|
366 |
* - non-drive-through stations: no track bits |
3ba37b6fa39b
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6889
diff
changeset
|
367 |
* @param tile the tile to get the track bits for |
3ba37b6fa39b
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6889
diff
changeset
|
368 |
* @return the track bits for the given tile |
3ba37b6fa39b
(svn r9554) -Documentation: add documentation to some map accessors.
rubidium
parents:
6889
diff
changeset
|
369 |
*/ |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
370 |
TrackBits GetAnyRoadTrackBits(TileIndex tile, RoadType rt); |
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
|
371 |
|
8598
14ae80fe4c8f
(svn r11663) -Codechange: moving of the road related types and functions.
rubidium
parents:
8597
diff
changeset
|
372 |
/** |
14ae80fe4c8f
(svn r11663) -Codechange: moving of the road related types and functions.
rubidium
parents:
8597
diff
changeset
|
373 |
* Return if the tile is a valid tile for a crossing. |
14ae80fe4c8f
(svn r11663) -Codechange: moving of the road related types and functions.
rubidium
parents:
8597
diff
changeset
|
374 |
* |
14ae80fe4c8f
(svn r11663) -Codechange: moving of the road related types and functions.
rubidium
parents:
8597
diff
changeset
|
375 |
* @note function is overloaded |
14ae80fe4c8f
(svn r11663) -Codechange: moving of the road related types and functions.
rubidium
parents:
8597
diff
changeset
|
376 |
* @param tile the curent tile |
14ae80fe4c8f
(svn r11663) -Codechange: moving of the road related types and functions.
rubidium
parents:
8597
diff
changeset
|
377 |
* @param ax the axis of the road over the rail |
14ae80fe4c8f
(svn r11663) -Codechange: moving of the road related types and functions.
rubidium
parents:
8597
diff
changeset
|
378 |
* @return true if it is a valid tile |
14ae80fe4c8f
(svn r11663) -Codechange: moving of the road related types and functions.
rubidium
parents:
8597
diff
changeset
|
379 |
*/ |
14ae80fe4c8f
(svn r11663) -Codechange: moving of the road related types and functions.
rubidium
parents:
8597
diff
changeset
|
380 |
bool IsPossibleCrossing(const TileIndex tile, Axis ax); |
14ae80fe4c8f
(svn r11663) -Codechange: moving of the road related types and functions.
rubidium
parents:
8597
diff
changeset
|
381 |
|
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
|
382 |
|
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
383 |
static inline void MakeRoadNormal(TileIndex t, RoadBits bits, RoadTypes rot, TownID town, Owner road, Owner tram, Owner hway) |
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
|
384 |
{ |
7866
e19fda04e8d3
(svn r10733) -Codechange: change MP_STREET into MP_ROAD as we use the word "road" everywhere except in the tile type.
rubidium
parents:
7274
diff
changeset
|
385 |
SetTileType(t, MP_ROAD); |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
386 |
SetTileOwner(t, road); |
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
|
387 |
_m[t].m2 = town; |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
388 |
_m[t].m3 = 0; |
8424
4a488a90ccab
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7866
diff
changeset
|
389 |
_m[t].m4 = (HasBit(rot, ROADTYPE_TRAM) ? bits : 0) << 4 | (HasBit(rot, ROADTYPE_ROAD) ? bits : 0); |
7274
7b29469b978b
(svn r10014) -Fix: roads became automatically one way in the scenario editor.
rubidium
parents:
7260
diff
changeset
|
390 |
_m[t].m5 = ROAD_TILE_NORMAL << 6; |
7b29469b978b
(svn r10014) -Fix: roads became automatically one way in the scenario editor.
rubidium
parents:
7260
diff
changeset
|
391 |
SetRoadOwner(t, ROADTYPE_TRAM, tram); |
8424
4a488a90ccab
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7866
diff
changeset
|
392 |
SB(_m[t].m6, 2, 4, HasBit(rot, ROADTYPE_HWAY) ? bits : 0); |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
393 |
_me[t].m7 = rot << 5 | hway; |
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
|
394 |
} |
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
|
395 |
|
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
|
396 |
|
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
397 |
static inline void MakeRoadCrossing(TileIndex t, Owner road, Owner tram, Owner hway, Owner rail, Axis roaddir, RailType rat, RoadTypes rot, uint town) |
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
|
398 |
{ |
7866
e19fda04e8d3
(svn r10733) -Codechange: change MP_STREET into MP_ROAD as we use the word "road" everywhere except in the tile type.
rubidium
parents:
7274
diff
changeset
|
399 |
SetTileType(t, MP_ROAD); |
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
|
400 |
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
|
401 |
_m[t].m2 = town; |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
402 |
_m[t].m3 = rat; |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
403 |
_m[t].m4 = roaddir << 6 | road; |
7274
7b29469b978b
(svn r10014) -Fix: roads became automatically one way in the scenario editor.
rubidium
parents:
7260
diff
changeset
|
404 |
_m[t].m5 = ROAD_TILE_CROSSING << 6; |
7b29469b978b
(svn r10014) -Fix: roads became automatically one way in the scenario editor.
rubidium
parents:
7260
diff
changeset
|
405 |
SetRoadOwner(t, ROADTYPE_TRAM, tram); |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
406 |
SB(_m[t].m6, 2, 4, 0); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
407 |
_me[t].m7 = rot << 5 | hway; |
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
|
408 |
} |
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
|
409 |
|
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
|
410 |
|
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
411 |
static inline void MakeRoadDepot(TileIndex t, Owner owner, DiagDirection dir, RoadType rt) |
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
|
412 |
{ |
7866
e19fda04e8d3
(svn r10733) -Codechange: change MP_STREET into MP_ROAD as we use the word "road" everywhere except in the tile type.
rubidium
parents:
7274
diff
changeset
|
413 |
SetTileType(t, MP_ROAD); |
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
|
414 |
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
|
415 |
_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
|
416 |
_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
|
417 |
_m[t].m4 = 0; |
7157
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
418 |
_m[t].m5 = ROAD_TILE_DEPOT << 6 | dir; |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
419 |
SB(_m[t].m6, 2, 4, 0); |
270bc5b64e08
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6914
diff
changeset
|
420 |
_me[t].m7 = RoadTypeToRoadTypes(rt) << 5; |
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
|
421 |
} |
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
|
422 |
|
4666
850b5b6e4bac
(svn r6560) - Codechange: Minor fix; add missing #include guards and comments, and correct svn properties on bmp.[ch]
peter1138
parents:
4158
diff
changeset
|
423 |
#endif /* ROAD_MAP_H */ |