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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 */