Mercurial > hg > openttd
annotate src/rail.h @ 7928:4e8dfd103163 draft
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
author | skidd13 <skidd13@openttd.org> |
---|---|
date | Mon, 19 Nov 2007 21:02:30 +0000 |
parents | f79d18d560b2 |
children | 4d13dbed828c |
rev | line source |
---|---|
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
1 /* $Id$ */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
2 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
3 /** @file rail.h */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
4 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
5 #ifndef RAIL_H |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
6 #define RAIL_H |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
7 |
5636
3af2c7ad8c2f
(svn r8095) -Codechange: stuff that is not related to HAL moved from hal.h to gfx.h
KUDr <KUDr@openttd.org>
parents:
5598
diff
changeset
|
8 #include "gfx.h" |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
9 #include "direction.h" |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
10 #include "tile.h" |
7730
b2ca338938ed
(svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents:
7703
diff
changeset
|
11 #include "variables.h" |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
12 |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
13 /** |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
14 * Enumeration for all possible railtypes. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
15 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
16 * This enumeration defines all 4 possible railtypes. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
17 */ |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6162
diff
changeset
|
18 enum RailType { |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
19 RAILTYPE_BEGIN = 0, ///< Used for iterations |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
20 RAILTYPE_RAIL = 0, ///< Standard non-electric rails |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
21 RAILTYPE_ELECTRIC = 1, ///< Electric rails |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
22 RAILTYPE_MONO = 2, ///< Monorail |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
23 RAILTYPE_MAGLEV = 3, ///< Maglev |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
24 RAILTYPE_END, ///< Used for iterations |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
25 INVALID_RAILTYPE = 0xFF ///< Flag for invalid railtype |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6162
diff
changeset
|
26 }; |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
27 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
28 typedef byte RailTypeMask; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
29 |
5587
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
30 /** Allow incrementing of Track variables */ |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
31 DECLARE_POSTFIX_INCREMENT(RailType); |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
32 /** Define basic enum properties */ |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
33 template <> struct EnumPropsT<RailType> : MakeEnumPropsT<RailType, byte, RAILTYPE_BEGIN, RAILTYPE_END, INVALID_RAILTYPE> {}; |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
34 typedef TinyEnumT<RailType> RailTypeByte; |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
35 |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
36 |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
37 /** |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
38 * These are used to specify a single track. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
39 * Can be translated to a trackbit with TrackToTrackbit |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
40 */ |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6162
diff
changeset
|
41 enum Track { |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
42 TRACK_BEGIN = 0, ///< Used for iterations |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
43 TRACK_X = 0, ///< Track along the x-axis (north-east to south-west) |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
44 TRACK_Y = 1, ///< Track along the y-axis (north-west to south-east) |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
45 TRACK_UPPER = 2, ///< Track in the upper corner of the tile (north) |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
46 TRACK_LOWER = 3, ///< Track in the lower corner of the tile (south) |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
47 TRACK_LEFT = 4, ///< Track in the left corner of the tile (west) |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
48 TRACK_RIGHT = 5, ///< Track in the right corner of the tile (east) |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
49 TRACK_END, ///< Used for iterations |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
50 INVALID_TRACK = 0xFF ///< Flag for an invalid track |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6162
diff
changeset
|
51 }; |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
52 |
5587
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
53 /** Allow incrementing of Track variables */ |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
54 DECLARE_POSTFIX_INCREMENT(Track); |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
55 /** Define basic enum properties */ |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
56 template <> struct EnumPropsT<Track> : MakeEnumPropsT<Track, byte, TRACK_BEGIN, TRACK_END, INVALID_TRACK> {}; |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
57 typedef TinyEnumT<Track> TrackByte; |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
58 |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
59 |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
60 /** |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
61 * Convert an Axis to the corresponding Track |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
62 * AXIS_X -> TRACK_X |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
63 * AXIS_Y -> TRACK_Y |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
64 * Uses the fact that they share the same internal encoding |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
65 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
66 * @param a the axis to convert |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
67 * @return the track corresponding to the axis |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
68 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
69 static inline Track AxisToTrack(Axis a) |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
70 { |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
71 return (Track)a; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
72 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
73 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
74 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
75 /** Bitfield corresponding to Track */ |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6162
diff
changeset
|
76 enum TrackBits { |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
77 TRACK_BIT_NONE = 0U, ///< No track |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
78 TRACK_BIT_X = 1U << TRACK_X, ///< X-axis track |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
79 TRACK_BIT_Y = 1U << TRACK_Y, ///< Y-axis track |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
80 TRACK_BIT_UPPER = 1U << TRACK_UPPER, ///< Upper track |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
81 TRACK_BIT_LOWER = 1U << TRACK_LOWER, ///< Lower track |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
82 TRACK_BIT_LEFT = 1U << TRACK_LEFT, ///< Left track |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
83 TRACK_BIT_RIGHT = 1U << TRACK_RIGHT, ///< Right track |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
84 TRACK_BIT_CROSS = TRACK_BIT_X | TRACK_BIT_Y, ///< X-Y-axis cross |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
85 TRACK_BIT_HORZ = TRACK_BIT_UPPER | TRACK_BIT_LOWER, ///< Upper and lower track |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
86 TRACK_BIT_VERT = TRACK_BIT_LEFT | TRACK_BIT_RIGHT, ///< Left and right track |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
87 TRACK_BIT_3WAY_NE = TRACK_BIT_X | TRACK_BIT_UPPER | TRACK_BIT_RIGHT,///< "Arrow" to the north-east |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
88 TRACK_BIT_3WAY_SE = TRACK_BIT_Y | TRACK_BIT_LOWER | TRACK_BIT_RIGHT,///< "Arrow" to the south-east |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
89 TRACK_BIT_3WAY_SW = TRACK_BIT_X | TRACK_BIT_LOWER | TRACK_BIT_LEFT, ///< "Arrow" to the south-west |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
90 TRACK_BIT_3WAY_NW = TRACK_BIT_Y | TRACK_BIT_UPPER | TRACK_BIT_LEFT, ///< "Arrow" to the north-west |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
91 TRACK_BIT_ALL = TRACK_BIT_CROSS | TRACK_BIT_HORZ | TRACK_BIT_VERT, ///< All possible tracks |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
92 TRACK_BIT_MASK = 0x3FU, ///< Bitmask for the first 6 bits |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
93 TRACK_BIT_WORMHOLE = 0x40U, ///< Bitflag for a wormhole (used for tunnels) |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
94 TRACK_BIT_DEPOT = 0x80U, ///< Bitflag for a depot |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
95 INVALID_TRACK_BIT = 0xFF ///< Flag for an invalid trackbits value |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6162
diff
changeset
|
96 }; |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
97 |
5587
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
98 /** Define basic enum properties */ |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
99 template <> struct EnumPropsT<TrackBits> : MakeEnumPropsT<TrackBits, byte, TRACK_BIT_NONE, TRACK_BIT_ALL, INVALID_TRACK_BIT> {}; |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
100 typedef TinyEnumT<TrackBits> TrackBitsByte; |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
101 |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
102 DECLARE_ENUM_AS_BIT_SET(TrackBits); |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
103 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
104 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
105 * Maps a Track to the corresponding TrackBits value |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
106 * @param track the track to convert |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
107 * @return the converted TrackBits value of the track |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
108 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
109 static inline TrackBits TrackToTrackBits(Track track) |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
110 { |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
111 return (TrackBits)(1 << track); |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
112 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
113 |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
114 /** |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
115 * Maps an Axis to the corresponding TrackBits value |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
116 * @param a the axis to convert |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
117 * @return the converted TrackBits value of the axis |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
118 */ |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
119 static inline TrackBits AxisToTrackBits(Axis a) |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
120 { |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
121 return TrackToTrackBits(AxisToTrack(a)); |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
122 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
123 |
7703
b20195746c34
(svn r11237) -Codechange: reduce code duplication between GetRailFoundation() and CheckRailSlope(). Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
124 /** |
b20195746c34
(svn r11237) -Codechange: reduce code duplication between GetRailFoundation() and CheckRailSlope(). Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
125 * Returns a single horizontal/vertical trackbit, that is in a specific tile corner. |
b20195746c34
(svn r11237) -Codechange: reduce code duplication between GetRailFoundation() and CheckRailSlope(). Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
126 * |
b20195746c34
(svn r11237) -Codechange: reduce code duplication between GetRailFoundation() and CheckRailSlope(). Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
127 * @param corner The corner of a tile. |
b20195746c34
(svn r11237) -Codechange: reduce code duplication between GetRailFoundation() and CheckRailSlope(). Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
128 * @return The TrackBits of the track in the corner. |
b20195746c34
(svn r11237) -Codechange: reduce code duplication between GetRailFoundation() and CheckRailSlope(). Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
129 */ |
b20195746c34
(svn r11237) -Codechange: reduce code duplication between GetRailFoundation() and CheckRailSlope(). Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
130 static inline TrackBits CornerToTrackBits(Corner corner) |
b20195746c34
(svn r11237) -Codechange: reduce code duplication between GetRailFoundation() and CheckRailSlope(). Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
131 { |
b20195746c34
(svn r11237) -Codechange: reduce code duplication between GetRailFoundation() and CheckRailSlope(). Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
132 extern const TrackBits _corner_to_trackbits[]; |
b20195746c34
(svn r11237) -Codechange: reduce code duplication between GetRailFoundation() and CheckRailSlope(). Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
133 assert(IsValidCorner(corner)); |
b20195746c34
(svn r11237) -Codechange: reduce code duplication between GetRailFoundation() and CheckRailSlope(). Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
134 return _corner_to_trackbits[corner]; |
b20195746c34
(svn r11237) -Codechange: reduce code duplication between GetRailFoundation() and CheckRailSlope(). Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
135 } |
b20195746c34
(svn r11237) -Codechange: reduce code duplication between GetRailFoundation() and CheckRailSlope(). Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
136 |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
137 |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
138 /** |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
139 * Enumeration for tracks and directions. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
140 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
141 * These are a combination of tracks and directions. Values are 0-5 in one |
5999
943dea0ea975
(svn r8712) -Codechange/cleanup: replace 'magic' constants with enums, use proper types instead of byte, uint etc., give variables more descriptive names and add some comments.
rubidium <rubidium@openttd.org>
parents:
5993
diff
changeset
|
142 * direction (corresponding to the Track enum) and 8-13 in the other direction. |
943dea0ea975
(svn r8712) -Codechange/cleanup: replace 'magic' constants with enums, use proper types instead of byte, uint etc., give variables more descriptive names and add some comments.
rubidium <rubidium@openttd.org>
parents:
5993
diff
changeset
|
143 * 6, 7, 14 and 15 are used to encode the reversing of road vehicles. Those |
943dea0ea975
(svn r8712) -Codechange/cleanup: replace 'magic' constants with enums, use proper types instead of byte, uint etc., give variables more descriptive names and add some comments.
rubidium <rubidium@openttd.org>
parents:
5993
diff
changeset
|
144 * reversing track dirs are not considered to be 'valid' except in a small |
943dea0ea975
(svn r8712) -Codechange/cleanup: replace 'magic' constants with enums, use proper types instead of byte, uint etc., give variables more descriptive names and add some comments.
rubidium <rubidium@openttd.org>
parents:
5993
diff
changeset
|
145 * corner in the road vehicle controller. |
943dea0ea975
(svn r8712) -Codechange/cleanup: replace 'magic' constants with enums, use proper types instead of byte, uint etc., give variables more descriptive names and add some comments.
rubidium <rubidium@openttd.org>
parents:
5993
diff
changeset
|
146 */ |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6162
diff
changeset
|
147 enum Trackdir { |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
148 TRACKDIR_BEGIN = 0, ///< Used for iterations |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
149 TRACKDIR_X_NE = 0, ///< X-axis and direction to north-east |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
150 TRACKDIR_Y_SE = 1, ///< Y-axis and direction to south-east |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
151 TRACKDIR_UPPER_E = 2, ///< Upper track and direction to east |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
152 TRACKDIR_LOWER_E = 3, ///< Lower track and direction to east |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
153 TRACKDIR_LEFT_S = 4, ///< Left track and direction to south |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
154 TRACKDIR_RIGHT_S = 5, ///< Right track and direction to south |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
155 TRACKDIR_RVREV_NE = 6, ///< (Road vehicle) reverse direction north-east |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
156 TRACKDIR_RVREV_SE = 7, ///< (Road vehicle) reverse direction south-east |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
157 TRACKDIR_X_SW = 8, ///< X-axis and direction to south-west |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
158 TRACKDIR_Y_NW = 9, ///< Y-axis and direction to north-west |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
159 TRACKDIR_UPPER_W = 10, ///< Upper track and direction to west |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
160 TRACKDIR_LOWER_W = 11, ///< Lower track and direction to west |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
161 TRACKDIR_LEFT_N = 12, ///< Left track and direction to north |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
162 TRACKDIR_RIGHT_N = 13, ///< Right track and direction to north |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
163 TRACKDIR_RVREV_SW = 14, ///< (Road vehicle) reverse direction south-west |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
164 TRACKDIR_RVREV_NW = 15, ///< (Road vehicle) reverse direction north-west |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
165 TRACKDIR_END, ///< Used for iterations |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
166 INVALID_TRACKDIR = 0xFF, ///< Flag for an invalid trackdir |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6162
diff
changeset
|
167 }; |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
168 |
5587
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
169 /** Define basic enum properties */ |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
170 template <> struct EnumPropsT<Trackdir> : MakeEnumPropsT<Trackdir, byte, TRACKDIR_BEGIN, TRACKDIR_END, INVALID_TRACKDIR> {}; |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
171 typedef TinyEnumT<Trackdir> TrackdirByte; |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
172 |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
173 /** |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
174 * Enumeration of bitmasks for the TrackDirs |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
175 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
176 * These are a combination of tracks and directions. Values are 0-5 in one |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
177 * direction (corresponding to the Track enum) and 8-13 in the other direction. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
178 */ |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6162
diff
changeset
|
179 enum TrackdirBits { |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
180 TRACKDIR_BIT_NONE = 0x0000, ///< No track build |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
181 TRACKDIR_BIT_X_NE = 0x0001, ///< Track x-axis, direction north-east |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
182 TRACKDIR_BIT_Y_SE = 0x0002, ///< Track y-axis, direction south-east |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
183 TRACKDIR_BIT_UPPER_E = 0x0004, ///< Track upper, direction east |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
184 TRACKDIR_BIT_LOWER_E = 0x0008, ///< Track lower, direction east |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
185 TRACKDIR_BIT_LEFT_S = 0x0010, ///< Track left, direction south |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
186 TRACKDIR_BIT_RIGHT_S = 0x0020, ///< Track right, direction south |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
187 /* Again, note the two missing values here. This enables trackdir -> track conversion by doing (trackdir & 0xFF) */ |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
188 TRACKDIR_BIT_X_SW = 0x0100, ///< Track x-axis, direction south-west |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
189 TRACKDIR_BIT_Y_NW = 0x0200, ///< Track y-axis, direction north-west |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
190 TRACKDIR_BIT_UPPER_W = 0x0400, ///< Track upper, direction west |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
191 TRACKDIR_BIT_LOWER_W = 0x0800, ///< Track lower, direction west |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
192 TRACKDIR_BIT_LEFT_N = 0x1000, ///< Track left, direction north |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
193 TRACKDIR_BIT_RIGHT_N = 0x2000, ///< Track right, direction north |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
194 TRACKDIR_BIT_MASK = 0x3F3F, ///< Bitmask for bit-operations |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
195 INVALID_TRACKDIR_BIT = 0xFFFF, ///< Flag for an invalid trackdirbit value |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6162
diff
changeset
|
196 }; |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
197 |
5587
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
198 /** Define basic enum properties */ |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
199 template <> struct EnumPropsT<TrackdirBits> : MakeEnumPropsT<TrackdirBits, uint16, TRACKDIR_BIT_NONE, TRACKDIR_BIT_MASK, INVALID_TRACKDIR_BIT> {}; |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
200 typedef TinyEnumT<TrackdirBits> TrackdirBitsShort; |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
201 DECLARE_ENUM_AS_BIT_SET(TrackdirBits); |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
202 |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
203 /** This struct contains all the info that is needed to draw and construct tracks. |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
204 */ |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6162
diff
changeset
|
205 struct RailtypeInfo { |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
206 /** Struct containing the main sprites. @note not all sprites are listed, but only |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
207 * the ones used directly in the code */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
208 struct { |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
209 SpriteID track_y; ///< single piece of rail in Y direction, with ground |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
210 SpriteID track_ns; ///< two pieces of rail in North and South corner (East-West direction) |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
211 SpriteID ground; ///< ground sprite for a 3-way switch |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
212 SpriteID single_y; ///< single piece of rail in Y direction, without ground |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
213 SpriteID single_x; ///< single piece of rail in X direction |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
214 SpriteID single_n; ///< single piece of rail in the northern corner |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
215 SpriteID single_s; ///< single piece of rail in the southern corner |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
216 SpriteID single_e; ///< single piece of rail in the eastern corner |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
217 SpriteID single_w; ///< single piece of rail in the western corner |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
218 SpriteID crossing; ///< level crossing, rail in X direction |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
219 SpriteID tunnel; ///< tunnel sprites base |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
220 } base_sprites; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
221 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
222 /** struct containing the sprites for the rail GUI. @note only sprites referred to |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
223 * directly in the code are listed */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
224 struct { |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
225 SpriteID build_ns_rail; ///< button for building single rail in N-S direction |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
226 SpriteID build_x_rail; ///< button for building single rail in X direction |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
227 SpriteID build_ew_rail; ///< button for building single rail in E-W direction |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
228 SpriteID build_y_rail; ///< button for building single rail in Y direction |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
229 SpriteID auto_rail; ///< button for the autorail construction |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
230 SpriteID build_depot; ///< button for building depots |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
231 SpriteID build_tunnel; ///< button for building a tunnel |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
232 SpriteID convert_rail; ///< button for converting rail |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
233 } gui_sprites; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
234 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
235 struct { |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
236 CursorID rail_ns; ///< Cursor for building rail in N-S direction |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
237 CursorID rail_swne; ///< Cursor for building rail in X direction |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
238 CursorID rail_ew; ///< Cursor for building rail in E-W direction |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
239 CursorID rail_nwse; ///< Cursor for building rail in Y direction |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
240 CursorID autorail; ///< Cursor for autorail tool |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
241 CursorID depot; ///< Cursor for building a depot |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
242 CursorID tunnel; ///< Cursor for building a tunnel |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
243 CursorID convert; ///< Cursor for converting track |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
244 } cursor; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
245 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
246 struct { |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
247 StringID toolbar_caption; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
248 } strings; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
249 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
250 /** sprite number difference between a piece of track on a snowy ground and the corresponding one on normal ground */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
251 SpriteID snow_offset; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
252 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
253 /** bitmask to the OTHER railtypes on which an engine of THIS railtype generates power */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
254 RailTypeMask powered_railtypes; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
255 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
256 /** bitmask to the OTHER railtypes on which an engine of THIS railtype can physically travel */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
257 RailTypeMask compatible_railtypes; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
258 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
259 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
260 * Offset between the current railtype and normal rail. This means that:<p> |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
261 * 1) All the sprites in a railset MUST be in the same order. This order |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
262 * is determined by normal rail. Check sprites 1005 and following for this order<p> |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
263 * 2) The position where the railtype is loaded must always be the same, otherwise |
6420
080aae477331
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
264 * the offset will fail. |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
265 * @note: Something more flexible might be desirable in the future. |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
266 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
267 SpriteID total_offset; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
268 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
269 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
270 * Bridge offset |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
271 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
272 SpriteID bridge_offset; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
273 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
274 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
275 * Offset to add to ground sprite when drawing custom waypoints / stations |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
276 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
277 byte custom_ground_offset; |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6162
diff
changeset
|
278 }; |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
279 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
280 |
6420
080aae477331
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
281 /** these are the maximums used for updating signal blocks, and checking if a depot is in a pbs block */ |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
282 enum { |
6420
080aae477331
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
283 NUM_SSD_ENTRY = 256, ///< max amount of blocks |
080aae477331
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
284 NUM_SSD_STACK = 32, ///< max amount of blocks to check recursively |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
285 }; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
286 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
287 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
288 * Maps a Trackdir to the corresponding TrackdirBits value |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
289 * @param trackdir the track direction to convert |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
290 * @return the converted TrackdirBits value |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
291 */ |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
292 static inline TrackdirBits TrackdirToTrackdirBits(Trackdir trackdir) |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
293 { |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
294 return (TrackdirBits)(1 << trackdir); |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
295 } |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
296 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
297 /** |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
298 * Removes first Track from TrackBits and returns it |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
299 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
300 * This function searchs for the first bit in the TrackBits, |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
301 * remove this bit from the parameter and returns the found |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
302 * bit as Track value. It returns INVALID_TRACK if the |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
303 * parameter was TRACK_BIT_NONE or INVALID_TRACK_BIT. This |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
304 * is basically used in while-loops to get up to 6 possible |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
305 * tracks on a tile until the parameter becomes TRACK_BIT_NONE. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
306 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
307 * @param tracks The value with the TrackBits |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
308 * @return The first Track from the TrackBits value |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
309 * @see FindFirstTrack |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
310 */ |
5598
b73ad40222d0
(svn r8052) - Codechange: RemoveFirstTrack() and RemoveFirstTrackdir() now accept pointer to TrackBits/TrackdirBits instead of reference.
KUDr <KUDr@openttd.org>
parents:
5587
diff
changeset
|
311 static inline Track RemoveFirstTrack(TrackBits *tracks) |
5587
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
312 { |
5598
b73ad40222d0
(svn r8052) - Codechange: RemoveFirstTrack() and RemoveFirstTrackdir() now accept pointer to TrackBits/TrackdirBits instead of reference.
KUDr <KUDr@openttd.org>
parents:
5587
diff
changeset
|
313 if (*tracks != TRACK_BIT_NONE && *tracks != INVALID_TRACK_BIT) { |
b73ad40222d0
(svn r8052) - Codechange: RemoveFirstTrack() and RemoveFirstTrackdir() now accept pointer to TrackBits/TrackdirBits instead of reference.
KUDr <KUDr@openttd.org>
parents:
5587
diff
changeset
|
314 Track first = (Track)FIND_FIRST_BIT(*tracks); |
6127
a8303346cd9c
(svn r8864) -Codechange: make ClrBitT(), SetBitT() and ToggleBitT more like CLRBIT() and so on (modify value of the first parameter instead or returning the result)
KUDr <KUDr@openttd.org>
parents:
5999
diff
changeset
|
315 ClrBitT(*tracks, first); |
5587
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
316 return first; |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
317 } |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
318 return INVALID_TRACK; |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
319 } |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
320 |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
321 /** |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
322 * Removes first Trackdir from TrackdirBits and returns it |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
323 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
324 * This function searchs for the first bit in the TrackdirBits parameter, |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
325 * remove this bit from the parameter and returns the fnound bit as |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
326 * Trackdir value. It returns INVALID_TRACKDIR if the trackdirs is |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
327 * TRACKDIR_BIT_NONE or INVALID_TRACKDIR_BIT. This is basically used in a |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
328 * while-loop to get all track-directions step by step until the value |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
329 * reaches TRACKDIR_BIT_NONE. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
330 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
331 * @param trackdirs The value with the TrackdirBits |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
332 * @return The first Trackdir from the TrackdirBits value |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
333 * @see FindFirstTrackdir |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
334 */ |
5598
b73ad40222d0
(svn r8052) - Codechange: RemoveFirstTrack() and RemoveFirstTrackdir() now accept pointer to TrackBits/TrackdirBits instead of reference.
KUDr <KUDr@openttd.org>
parents:
5587
diff
changeset
|
335 static inline Trackdir RemoveFirstTrackdir(TrackdirBits *trackdirs) |
5587
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
336 { |
5598
b73ad40222d0
(svn r8052) - Codechange: RemoveFirstTrack() and RemoveFirstTrackdir() now accept pointer to TrackBits/TrackdirBits instead of reference.
KUDr <KUDr@openttd.org>
parents:
5587
diff
changeset
|
337 if (*trackdirs != TRACKDIR_BIT_NONE && *trackdirs != INVALID_TRACKDIR_BIT) { |
b73ad40222d0
(svn r8052) - Codechange: RemoveFirstTrack() and RemoveFirstTrackdir() now accept pointer to TrackBits/TrackdirBits instead of reference.
KUDr <KUDr@openttd.org>
parents:
5587
diff
changeset
|
338 Trackdir first = (Trackdir)FindFirstBit2x64(*trackdirs); |
6127
a8303346cd9c
(svn r8864) -Codechange: make ClrBitT(), SetBitT() and ToggleBitT more like CLRBIT() and so on (modify value of the first parameter instead or returning the result)
KUDr <KUDr@openttd.org>
parents:
5999
diff
changeset
|
339 ClrBitT(*trackdirs, first); |
5587
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
340 return first; |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
341 } |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
342 return INVALID_TRACKDIR; |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
343 } |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
344 |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
345 /** |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
346 * Returns first Track from TrackBits or INVALID_TRACK |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
347 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
348 * This function returns the first Track found in the TrackBits value as Track-value. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
349 * It returns INVALID_TRACK if the parameter is TRACK_BIT_NONE or INVALID_TRACK_BIT. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
350 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
351 * @param tracks The TrackBits value |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
352 * @return The first Track found or INVALID_TRACK |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
353 * @see RemoveFirstTrack |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
354 */ |
5587
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
355 static inline Track FindFirstTrack(TrackBits tracks) |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
356 { |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
357 return (tracks != TRACK_BIT_NONE && tracks != INVALID_TRACK_BIT) ? (Track)FIND_FIRST_BIT(tracks) : INVALID_TRACK; |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
358 } |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
359 |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
360 /** |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
361 * Converts TrackBits to Track. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
362 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
363 * This function converts a TrackBits value to a Track value. As it |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
364 * is not possible to convert two or more tracks to one track the |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
365 * parameter must contain only one track or be the INVALID_TRACK_BIT value. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
366 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
367 * @param tracks The TrackBits value to convert |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
368 * @return The Track from the value or INVALID_TRACK |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
369 * @pre tracks must contains only one Track or be INVALID_TRACK_BIT |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
370 */ |
5587
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
371 static inline Track TrackBitsToTrack(TrackBits tracks) |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
372 { |
7833
f79d18d560b2
(svn r11383) -Codechange: fixed all the mess around KillFirstBit (tnx to Rubidium and skidd13)
truelight <truelight@openttd.org>
parents:
7771
diff
changeset
|
373 assert(tracks == INVALID_TRACK_BIT || (tracks != TRACK_BIT_NONE && KillFirstBit(tracks & TRACK_BIT_MASK) == TRACK_BIT_NONE)); |
7155
2db6c3a78a30
(svn r10429) -Fix: VC8 Code Analyzer warning: buffer overrun
KUDr <KUDr@openttd.org>
parents:
6420
diff
changeset
|
374 return tracks != INVALID_TRACK_BIT ? (Track)FIND_FIRST_BIT(tracks & TRACK_BIT_MASK) : INVALID_TRACK; |
5587
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
375 } |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
376 |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
377 /** |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
378 * Returns first Trackdir from TrackdirBits or INVALID_TRACKDIR |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
379 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
380 * This function returns the first Trackdir in the given TrackdirBits value or |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
381 * INVALID_TRACKDIR if the value is TRACKDIR_BIT_NONE. The TrackdirBits must |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
382 * not be INVALID_TRACKDIR_BIT. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
383 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
384 * @param trackdirs The TrackdirBits value |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
385 * @return The first Trackdir from the TrackdirBits or INVALID_TRACKDIR on TRACKDIR_BIT_NONE. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
386 * @pre trackdirs must not be INVALID_TRACKDIR_BIT |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
387 * @see RemoveFirstTrackdir |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
388 */ |
5587
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
389 static inline Trackdir FindFirstTrackdir(TrackdirBits trackdirs) |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
390 { |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
391 assert((trackdirs & ~TRACKDIR_BIT_MASK) == TRACKDIR_BIT_NONE); |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
392 return (trackdirs != TRACKDIR_BIT_NONE) ? (Trackdir)FindFirstBit2x64(trackdirs) : INVALID_TRACKDIR; |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
393 } |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
394 |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
395 /** |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
396 * Checks if a Track is valid. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
397 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
398 * @param track The value to check |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
399 * @return true if the given value is a valid track. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
400 * @note Use this in an assert() |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
401 */ |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
402 static inline bool IsValidTrack(Track track) |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
403 { |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
404 return track < TRACK_END; |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
405 } |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
406 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
407 /** |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
408 * Checks if a Trackdir is valid. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
409 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
410 * @param trackdir The value to check |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
411 * @return true if the given valie is a valid Trackdir |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
412 * @note Use this in an assert() |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
413 */ |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
414 static inline bool IsValidTrackdir(Trackdir trackdir) |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
415 { |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
416 return (TrackdirToTrackdirBits(trackdir) & TRACKDIR_BIT_MASK) != 0; |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
417 } |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
418 |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
419 /* |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
420 * Functions to map tracks to the corresponding bits in the signal |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
421 * presence/status bytes in the map. You should not use these directly, but |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
422 * wrapper functions below instead. XXX: Which are these? |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
423 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
424 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
425 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
426 * Maps a trackdir to the bit that stores its status in the map arrays, in the |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
427 * direction along with the trackdir. |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
428 */ |
6162
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
429 static inline byte SignalAlongTrackdir(Trackdir trackdir) |
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
430 { |
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
431 extern const byte _signal_along_trackdir[TRACKDIR_END]; |
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
432 return _signal_along_trackdir[trackdir]; |
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
433 } |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
434 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
435 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
436 * Maps a trackdir to the bit that stores its status in the map arrays, in the |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
437 * direction against the trackdir. |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
438 */ |
6162
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
439 static inline byte SignalAgainstTrackdir(Trackdir trackdir) |
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
440 { |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
441 extern const byte _signal_against_trackdir[TRACKDIR_END]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
442 return _signal_against_trackdir[trackdir]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
443 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
444 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
445 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
446 * Maps a Track to the bits that store the status of the two signals that can |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
447 * be present on the given track. |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
448 */ |
6162
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
449 static inline byte SignalOnTrack(Track track) |
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
450 { |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
451 extern const byte _signal_on_track[TRACK_END]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
452 return _signal_on_track[track]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
453 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
454 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
455 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
456 /* |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
457 * Functions describing logical relations between Tracks, TrackBits, Trackdirs |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
458 * TrackdirBits, Direction and DiagDirections. |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
459 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
460 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
461 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
462 * Maps a trackdir to the reverse trackdir. |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
463 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
464 * Returns the reverse trackdir of a Trackdir value. The reverse trackdir |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
465 * is the same track with the other direction on it. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
466 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
467 * @param trackdir The Trackdir value |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
468 * @return The reverse trackdir |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
469 * @pre trackdir must not be INVALID_TRACKDIR |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
470 */ |
5587
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
471 static inline Trackdir ReverseTrackdir(Trackdir trackdir) |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
472 { |
c44c070c5032
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents:
5475
diff
changeset
|
473 assert(trackdir != INVALID_TRACKDIR); |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
474 return (Trackdir)(trackdir ^ 8); |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
475 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
476 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
477 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
478 * Returns the Track that a given Trackdir represents |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
479 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
480 * This function filters the Track which is used in the Trackdir value and |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
481 * returns it as a Track value. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
482 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
483 * @param trackdir The trackdir value |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
484 * @return The Track which is used in the value |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
485 */ |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
486 static inline Track TrackdirToTrack(Trackdir trackdir) |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
487 { |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
488 return (Track)(trackdir & 0x7); |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
489 } |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
490 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
491 /** |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
492 * Returns a Trackdir for the given Track |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
493 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
494 * Since every Track corresponds to two Trackdirs, we choose the |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
495 * one which points between NE and S. Note that the actual |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
496 * implementation is quite futile, but this might change |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
497 * in the future. |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
498 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
499 * @param track The given Track |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
500 * @return The Trackdir from the given Track |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
501 */ |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
502 static inline Trackdir TrackToTrackdir(Track track) |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
503 { |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
504 return (Trackdir)track; |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
505 } |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
506 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
507 /** |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
508 * Returns a TrackdirBit mask from a given Track |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
509 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
510 * The TrackdirBit mask contains the two TrackdirBits that |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
511 * correspond with the given Track (one for each direction). |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
512 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
513 * @param track The track to get the TrackdirBits from |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
514 * @return The TrackdirBits which the selected tracks |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
515 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
516 static inline TrackdirBits TrackToTrackdirBits(Track track) |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
517 { |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
518 Trackdir td = TrackToTrackdir(track); |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
519 return (TrackdirBits)(TrackdirToTrackdirBits(td) | TrackdirToTrackdirBits(ReverseTrackdir(td))); |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
520 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
521 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
522 /** |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
523 * Discards all directional information from a TrackdirBits value |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
524 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
525 * Any Track which is present in either direction will be present in the result. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
526 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
527 * @param bits The TrackdirBits to get the TrackBits from |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
528 * @return The TrackBits |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
529 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
530 static inline TrackBits TrackdirBitsToTrackBits(TrackdirBits bits) |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
531 { |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
532 return (TrackBits)((bits | (bits >> 8)) & TRACK_BIT_MASK); |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
533 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
534 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
535 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
536 * Maps a trackdir to the trackdir that you will end up on if you go straight |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
537 * ahead. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
538 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
539 * This will be the same trackdir for diagonal trackdirs, but a |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
540 * different (alternating) one for straight trackdirs |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
541 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
542 * @param trackdir The given trackdir |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
543 * @return The next Trackdir value of the next tile. |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
544 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
545 static inline Trackdir NextTrackdir(Trackdir trackdir) |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
546 { |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
547 extern const Trackdir _next_trackdir[TRACKDIR_END]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
548 return _next_trackdir[trackdir]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
549 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
550 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
551 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
552 * Maps a track to all tracks that make 90 deg turns with it. |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
553 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
554 * For the diagonal directions these are the complement of the |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
555 * direction, for the straight directions these are the |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
556 * two vertical or horizontal tracks, depend on the given direction |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
557 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
558 * @param track The given track |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
559 * @return The TrackBits with the tracks marked which cross the given track by 90 deg. |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
560 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
561 static inline TrackBits TrackCrossesTracks(Track track) |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
562 { |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
563 extern const TrackBits _track_crosses_tracks[TRACK_END]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
564 return _track_crosses_tracks[track]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
565 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
566 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
567 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
568 * Maps a trackdir to the (4-way) direction the tile is exited when following |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
569 * that trackdir. |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
570 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
571 * For the diagonal directions these are the same directions. For |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
572 * the straight directions these are the directions from the imagined |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
573 * base-tile to the bordering tile which will be joined if the given |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
574 * straight direction is leaved from the base-tile. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
575 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
576 * @param trackdir The given track direction |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
577 * @return The direction which points to the resulting tile if following the Trackdir |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
578 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
579 static inline DiagDirection TrackdirToExitdir(Trackdir trackdir) |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
580 { |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
581 extern const DiagDirection _trackdir_to_exitdir[TRACKDIR_END]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
582 return _trackdir_to_exitdir[trackdir]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
583 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
584 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
585 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
586 * Maps a track and an (4-way) dir to the trackdir that represents the track |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
587 * with the exit in the given direction. |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
588 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
589 * For the diagonal tracks the resulting track direction are clear for a given |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
590 * DiagDirection. It either matches the direction or it returns INVALID_TRACKDIR, |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
591 * as a TRACK_X cannot be applied with DIAG_SE. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
592 * For the straight tracks the resulting track direction will be the |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
593 * direction which the DiagDirection is pointing. But this will be INVALID_TRACKDIR |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
594 * if the DiagDirection is pointing 'away' the track. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
595 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
596 * @param track The track to applie an direction on |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
597 * @param diagdir The DiagDirection to applie on |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
598 * @return The resulting track direction or INVALID_TRACKDIR if not possible. |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
599 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
600 static inline Trackdir TrackExitdirToTrackdir(Track track, DiagDirection diagdir) |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
601 { |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
602 extern const Trackdir _track_exitdir_to_trackdir[TRACK_END][DIAGDIR_END]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
603 return _track_exitdir_to_trackdir[track][diagdir]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
604 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
605 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
606 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
607 * Maps a track and an (4-way) dir to the trackdir that represents the track |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
608 * with the entry in the given direction. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
609 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
610 * For the diagonal tracks the return value is clear, its either the matching |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
611 * track direction or INVALID_TRACKDIR. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
612 * For the straight tracks this returns the track direction which results if |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
613 * you follow the DiagDirection and then turn by 45 deg left or right on the |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
614 * next tile. The new direction on the new track will be the returning Trackdir |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
615 * value. If the parameters makes no sense like the track TRACK_UPPER and the |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
616 * diraction DIAGDIR_NE (target track cannot be reached) this function returns |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
617 * INVALID_TRACKDIR. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
618 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
619 * @param track The target track |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
620 * @param diagdir The direction to "come from" |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
621 * @return the resulting Trackdir or INVALID_TRACKDIR if not possible. |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
622 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
623 static inline Trackdir TrackEnterdirToTrackdir(Track track, DiagDirection diagdir) |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
624 { |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
625 extern const Trackdir _track_enterdir_to_trackdir[TRACK_END][DIAGDIR_END]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
626 return _track_enterdir_to_trackdir[track][diagdir]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
627 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
628 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
629 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
630 * Maps a track and a full (8-way) direction to the trackdir that represents |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
631 * the track running in the given direction. |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
632 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
633 static inline Trackdir TrackDirectionToTrackdir(Track track, Direction dir) |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
634 { |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
635 extern const Trackdir _track_direction_to_trackdir[TRACK_END][DIR_END]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
636 return _track_direction_to_trackdir[track][dir]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
637 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
638 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
639 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
640 * Maps a (4-way) direction to the diagonal trackdir that runs in that |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
641 * direction. |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
642 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
643 * @param diagdir The direction |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
644 * @return The resulting Trackdir direction |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
645 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
646 static inline Trackdir DiagdirToDiagTrackdir(DiagDirection diagdir) |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
647 { |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
648 extern const Trackdir _dir_to_diag_trackdir[DIAGDIR_END]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
649 return _dir_to_diag_trackdir[diagdir]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
650 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
651 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
652 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
653 * Returns all trackdirs that can be reached when entering a tile from a given |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
654 * (diagonal) direction. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
655 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
656 * This will obviously include 90 degree turns, since no information is available |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
657 * about the exact angle of entering |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
658 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
659 * @param diagdir The joining direction |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
660 * @return The TrackdirBits which can be used from the given direction |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
661 * @see DiagdirReachesTracks |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
662 */ |
6162
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
663 static inline TrackdirBits DiagdirReachesTrackdirs(DiagDirection diagdir) |
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
664 { |
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
665 extern const TrackdirBits _exitdir_reaches_trackdirs[DIAGDIR_END]; |
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
666 return _exitdir_reaches_trackdirs[diagdir]; |
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
667 } |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
668 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
669 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
670 * Returns all tracks that can be reached when entering a tile from a given |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
671 * (diagonal) direction. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
672 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
673 * This will obviously include 90 degree turns, since no |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
674 * information is available about the exact angle of entering |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
675 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
676 * @param diagdir The joining irection |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
677 * @return The tracks which can be used |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
678 * @see DiagdirReachesTrackdirs |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
679 */ |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
680 static inline TrackBits DiagdirReachesTracks(DiagDirection diagdir) { return TrackdirBitsToTrackBits(DiagdirReachesTrackdirs(diagdir)); } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
681 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
682 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
683 * Maps a trackdir to the trackdirs that can be reached from it (ie, when |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
684 * entering the next tile. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
685 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
686 * This will include 90 degree turns! |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
687 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
688 * @param trackdir The track direction which will be leaved |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
689 * @return The track directions which can be used from this direction (in the next tile) |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
690 */ |
6162
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
691 static inline TrackdirBits TrackdirReachesTrackdirs(Trackdir trackdir) |
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
692 { |
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
693 extern const TrackdirBits _exitdir_reaches_trackdirs[DIAGDIR_END]; |
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
694 return _exitdir_reaches_trackdirs[TrackdirToExitdir(trackdir)]; |
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
695 } |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
696 /* Note that there is no direct table for this function (there used to be), |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
697 * but it uses two simpeler tables to achieve the result */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
698 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
699 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
700 * Maps a trackdir to all trackdirs that make 90 deg turns with it. |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
701 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
702 * For the diagonal tracks this returns the track direction bits |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
703 * of the other axis in both directions, which cannot be joined by |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
704 * the given track direction. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
705 * For the straight tracks this returns all possible 90 deg turns |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
706 * either on the current tile (which no train can joined) or on the |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
707 * bordering tiles. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
708 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
709 * @param trackdir The track direction |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
710 * @return The TrackdirBits which are (more or less) 90 deg turns. |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
711 */ |
6162
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
712 static inline TrackdirBits TrackdirCrossesTrackdirs(Trackdir trackdir) |
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
713 { |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
714 extern const TrackdirBits _track_crosses_trackdirs[TRACKDIR_END]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
715 return _track_crosses_trackdirs[TrackdirToTrack(trackdir)]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
716 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
717 |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
718 /** |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
719 * Checks if a given Track is diagonal |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
720 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
721 * @param track The given track to check |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
722 * @return true if diagonal, else false |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
723 */ |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
724 static inline bool IsDiagonalTrack(Track track) |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
725 { |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
726 return (track == TRACK_X) || (track == TRACK_Y); |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
727 } |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
728 |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
729 /** |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
730 * Checks if a given Trackdir is diagonal. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
731 * |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
732 * @param trackdir The given trackdir |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
733 * @return true if the trackdir use a diagonal track |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
734 */ |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
735 static inline bool IsDiagonalTrackdir(Trackdir trackdir) |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
736 { |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
737 return IsDiagonalTrack(TrackdirToTrack(trackdir)); |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
738 } |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
739 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
740 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
741 * Returns a pointer to the Railtype information for a given railtype |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
742 * @param railtype the rail type which the information is requested for |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
743 * @return The pointer to the RailtypeInfo |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
744 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
745 static inline const RailtypeInfo *GetRailTypeInfo(RailType railtype) |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
746 { |
6162
d7bcc0708818
(svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents:
6156
diff
changeset
|
747 extern RailtypeInfo _railtypes[RAILTYPE_END]; |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
748 assert(railtype < RAILTYPE_END); |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
749 return &_railtypes[railtype]; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
750 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
751 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
752 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
753 * Checks if an engine of the given RailType can drive on a tile with a given |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
754 * RailType. This would normally just be an equality check, but for electric |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
755 * rails (which also support non-electric engines). |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
756 * @return Whether the engine can drive on this tile. |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
757 * @param enginetype The RailType of the engine we are considering. |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
758 * @param tiletype The RailType of the tile we are considering. |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
759 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
760 static inline bool IsCompatibleRail(RailType enginetype, RailType tiletype) |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
761 { |
7928
4e8dfd103163
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents:
7833
diff
changeset
|
762 return HasBit(GetRailTypeInfo(enginetype)->compatible_railtypes, tiletype); |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
763 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
764 |
7396
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
765 /** |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
766 * Checks if an engine of the given RailType got power on a tile with a given |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
767 * RailType. This would normally just be an equality check, but for electric |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
768 * rails (which also support non-electric engines). |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
769 * @return Whether the engine got power on this tile. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
770 * @param enginetype The RailType of the engine we are considering. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
771 * @param tiletype The RailType of the tile we are considering. |
57ff3c1c55de
(svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7335
diff
changeset
|
772 */ |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
773 static inline bool HasPowerOnRail(RailType enginetype, RailType tiletype) |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
774 { |
7928
4e8dfd103163
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents:
7833
diff
changeset
|
775 return HasBit(GetRailTypeInfo(enginetype)->powered_railtypes, tiletype); |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
776 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
777 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
778 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
779 * Checks if the given tracks overlap, ie form a crossing. Basically this |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
780 * means when there is more than one track on the tile, exept when there are |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
781 * two parallel tracks. |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
782 * @param bits The tracks present. |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
783 * @return Whether the tracks present overlap in any way. |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
784 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
785 static inline bool TracksOverlap(TrackBits bits) |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
786 { |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
787 /* With no, or only one track, there is no overlap */ |
7833
f79d18d560b2
(svn r11383) -Codechange: fixed all the mess around KillFirstBit (tnx to Rubidium and skidd13)
truelight <truelight@openttd.org>
parents:
7771
diff
changeset
|
788 if (bits == TRACK_BIT_NONE || KillFirstBit(bits) == TRACK_BIT_NONE) return false; |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
789 /* We know that there are at least two tracks present. When there are more |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
790 * than 2 tracks, they will surely overlap. When there are two, they will |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
791 * always overlap unless they are lower & upper or right & left. */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
792 return bits != TRACK_BIT_HORZ && bits != TRACK_BIT_VERT; |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
793 } |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
794 |
7730
b2ca338938ed
(svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents:
7703
diff
changeset
|
795 |
b2ca338938ed
(svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents:
7703
diff
changeset
|
796 extern int _railtype_cost_multiplier[RAILTYPE_END]; |
b2ca338938ed
(svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents:
7703
diff
changeset
|
797 extern const int _default_railtype_cost_multiplier[RAILTYPE_END]; |
b2ca338938ed
(svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents:
7703
diff
changeset
|
798 |
b2ca338938ed
(svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents:
7703
diff
changeset
|
799 /** |
b2ca338938ed
(svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents:
7703
diff
changeset
|
800 * Returns the cost of building the specified railtype. |
b2ca338938ed
(svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents:
7703
diff
changeset
|
801 * @param railtype The railtype being built. |
b2ca338938ed
(svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents:
7703
diff
changeset
|
802 * @return The cost multiplier. |
b2ca338938ed
(svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents:
7703
diff
changeset
|
803 */ |
b2ca338938ed
(svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents:
7703
diff
changeset
|
804 static inline Money RailBuildCost(RailType railtype) |
b2ca338938ed
(svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents:
7703
diff
changeset
|
805 { |
b2ca338938ed
(svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents:
7703
diff
changeset
|
806 assert(railtype < RAILTYPE_END); |
b2ca338938ed
(svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents:
7703
diff
changeset
|
807 return (_price.build_rail * _railtype_cost_multiplier[railtype]) >> 3; |
b2ca338938ed
(svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents:
7703
diff
changeset
|
808 } |
b2ca338938ed
(svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents:
7703
diff
changeset
|
809 |
7539
2695ac2e8baa
(svn r11059) -Fix [FS#1182]: inconsistency between Rail<->ElRail conversions of different kinds of rail containing tiles (normal rail, stations, depots, etc). Patch by SmatZ.
rubidium <rubidium@openttd.org>
parents:
7396
diff
changeset
|
810 void *UpdateTrainPowerProc(Vehicle *v, void *data); |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
811 void DrawTrainDepotSprite(int x, int y, int image, RailType railtype); |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
812 void DrawDefaultWaypointSprite(int x, int y, RailType railtype); |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
813 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
814 /** |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
815 * Draws overhead wires and pylons for electric railways. |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
816 * @param ti The TileInfo struct of the tile being drawn |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
817 * @see DrawCatenaryRailway |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
818 */ |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
819 void DrawCatenary(const TileInfo *ti); |
7601
b5ee57f72673
(svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7539
diff
changeset
|
820 void DrawCatenaryOnTunnel(const TileInfo *ti); |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
821 |
7335
0090d1c6b978
(svn r10698) -Codechange [FS#1082]: simplify the code related to foundations. Primarily removal of (duplicated|magic) code and introduction of few helper functions to ease foundation determination. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7155
diff
changeset
|
822 Foundation GetRailFoundation(Slope tileh, TrackBits bits); |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
823 |
7771
004a597e91a1
(svn r11320) -Codechange: make lower halftiles at coast floodable. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7730
diff
changeset
|
824 void FloodHalftile(TileIndex t); |
004a597e91a1
(svn r11320) -Codechange: make lower halftiles at coast floodable. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7730
diff
changeset
|
825 |
5475
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
826 int32 SettingsDisableElrail(int32 p1); ///< _patches.disable_elrail callback |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
827 |
eabf4b86aed6
(svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
828 #endif /* RAIL_H */ |