OpenTTD
track_type.h
Go to the documentation of this file.
1 /* $Id$ */
2 
3 /*
4  * This file is part of OpenTTD.
5  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
6  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
8  */
9 
12 #ifndef TRACK_TYPE_H
13 #define TRACK_TYPE_H
14 
15 #include "core/enum_type.hpp"
16 
21 enum Track : byte {
23  TRACK_X = 0,
24  TRACK_Y = 1,
27  TRACK_LEFT = 4,
30  INVALID_TRACK = 0xFF,
31 };
32 
36 template <> struct EnumPropsT<Track> : MakeEnumPropsT<Track, byte, TRACK_BEGIN, TRACK_END, INVALID_TRACK, 3> {};
37 
38 
40 enum TrackBits : byte {
42  TRACK_BIT_X = 1U << TRACK_X,
43  TRACK_BIT_Y = 1U << TRACK_Y,
56  TRACK_BIT_MASK = 0x3FU,
58  TRACK_BIT_DEPOT = 0x80U,
60 };
62 
63 
72 enum Trackdir : byte {
92 };
93 
95 template <> struct EnumPropsT<Trackdir> : MakeEnumPropsT<Trackdir, byte, TRACKDIR_BEGIN, TRACKDIR_END, INVALID_TRACKDIR, 4> {};
96 
103 enum TrackdirBits : uint16 {
111  /* Again, note the two missing values here. This enables trackdir -> track conversion by doing (trackdir & 0xFF) */
118  TRACKDIR_BIT_MASK = 0x3F3F,
120 };
122 
123 typedef uint32 TrackStatus;
124 
125 #endif /* TRACK_TYPE_H */
Helper template class that makes basic properties of given enumeration type visible from outsize...
Definition: enum_type.hpp:64
DECLARE_ENUM_AS_BIT_SET(GenderEthnicity) enum CompanyManagerFaceVariable
Bitgroups of the CompanyManagerFace variable.
TrackdirBits
Enumeration of bitmasks for the TrackDirs.
Definition: track_type.h:103
No track build.
Definition: track_type.h:104
Track upper, direction west.
Definition: track_type.h:114
Flag for an invalid track.
Definition: track_type.h:30
(Road vehicle) reverse direction south-west
Definition: track_type.h:88
"Arrow" to the south-west
Definition: track_type.h:53
Track along the x-axis (north-east to south-west)
Definition: track_type.h:23
All possible tracks.
Definition: track_type.h:55
Track in the lower corner of the tile (south)
Definition: track_type.h:26
Lower track and direction to west.
Definition: track_type.h:85
Bitmask for the first 6 bits.
Definition: track_type.h:56
X-axis and direction to north-east.
Definition: track_type.h:74
Left track.
Definition: track_type.h:46
Trackdir
Enumeration for tracks and directions.
Definition: track_type.h:72
X-axis track.
Definition: track_type.h:42
Upper track and direction to west.
Definition: track_type.h:84
"Arrow" to the north-east
Definition: track_type.h:51
Type (helpers) for enums.
Used for iterations.
Definition: track_type.h:29
Right track.
Definition: track_type.h:47
X-Y-axis cross.
Definition: track_type.h:48
Track in the right corner of the tile (east)
Definition: track_type.h:28
(Road vehicle) reverse direction north-east
Definition: track_type.h:80
Y-axis and direction to north-west.
Definition: track_type.h:83
Y-axis and direction to south-east.
Definition: track_type.h:75
Used for iterations.
Definition: track_type.h:90
Right track and direction to south.
Definition: track_type.h:79
Track right, direction north.
Definition: track_type.h:117
Left and right track.
Definition: track_type.h:50
Track left, direction south.
Definition: track_type.h:109
Track y-axis, direction south-east.
Definition: track_type.h:106
Informative template class exposing basic enumeration properties used by several other templates belo...
Definition: enum_type.hpp:50
Flag for an invalid trackdir.
Definition: track_type.h:91
TrackBits
Bitfield corresponding to Track.
Definition: track_type.h:40
Left track and direction to south.
Definition: track_type.h:78
Track left, direction north.
Definition: track_type.h:116
(Road vehicle) reverse direction south-east
Definition: track_type.h:81
Bitflag for a wormhole (used for tunnels)
Definition: track_type.h:57
Upper track and direction to east.
Definition: track_type.h:76
Bitflag for a depot.
Definition: track_type.h:58
Used for iterations.
Definition: track_type.h:73
Lower track.
Definition: track_type.h:45
Flag for an invalid trackbits value.
Definition: track_type.h:59
No track.
Definition: track_type.h:41
Track along the y-axis (north-west to south-east)
Definition: track_type.h:24
Track lower, direction east.
Definition: track_type.h:108
Upper track.
Definition: track_type.h:44
Track
These are used to specify a single track.
Definition: track_type.h:21
"Arrow" to the south-east
Definition: track_type.h:52
Track x-axis, direction south-west.
Definition: track_type.h:112
Track y-axis, direction north-west.
Definition: track_type.h:113
Used for iterations.
Definition: track_type.h:22
X-axis and direction to south-west.
Definition: track_type.h:82
Track lower, direction west.
Definition: track_type.h:115
(Road vehicle) reverse direction north-west
Definition: track_type.h:89
Bitmask for bit-operations.
Definition: track_type.h:118
Track upper, direction east.
Definition: track_type.h:107
#define DECLARE_POSTFIX_INCREMENT(enum_type)
Some enums need to have allowed incrementing (i.e.
Definition: enum_type.hpp:16
Track x-axis, direction north-east.
Definition: track_type.h:105
Left track and direction to north.
Definition: track_type.h:86
Track in the left corner of the tile (west)
Definition: track_type.h:27
Right track and direction to north.
Definition: track_type.h:87
Flag for an invalid trackdirbit value.
Definition: track_type.h:119
Y-axis track.
Definition: track_type.h:43
"Arrow" to the north-west
Definition: track_type.h:54
Lower track and direction to east.
Definition: track_type.h:77
Track right, direction south.
Definition: track_type.h:110
Track in the upper corner of the tile (north)
Definition: track_type.h:25
Upper and lower track.
Definition: track_type.h:49