equal
deleted
inserted
replaced
8 #include "rail_type.h" |
8 #include "rail_type.h" |
9 #include "signal_func.h" |
9 #include "signal_func.h" |
10 #include "direction_func.h" |
10 #include "direction_func.h" |
11 #include "track_func.h" |
11 #include "track_func.h" |
12 #include "tile_map.h" |
12 #include "tile_map.h" |
|
13 #include "signal_type.h" |
13 |
14 |
14 |
15 |
15 /** Different types of Rail-related tiles */ |
16 /** Different types of Rail-related tiles */ |
16 enum RailTileType { |
17 enum RailTileType { |
17 RAIL_TILE_NORMAL = 0, ///< Normal rail tile without signals |
18 RAIL_TILE_NORMAL = 0, ///< Normal rail tile without signals |
199 static inline WaypointID GetWaypointIndex(TileIndex t) |
200 static inline WaypointID GetWaypointIndex(TileIndex t) |
200 { |
201 { |
201 return (WaypointID)_m[t].m2; |
202 return (WaypointID)_m[t].m2; |
202 } |
203 } |
203 |
204 |
204 /** Type of signal, i.e. how does the signal behave? */ |
|
205 enum SignalType { |
|
206 SIGTYPE_NORMAL = 0, ///< normal signal |
|
207 SIGTYPE_ENTRY = 1, ///< presignal block entry |
|
208 SIGTYPE_EXIT = 2, ///< presignal block exit |
|
209 SIGTYPE_COMBO = 3 ///< presignal inter-block |
|
210 }; |
|
211 |
|
212 static inline SignalType GetSignalType(TileIndex t, Track track) |
205 static inline SignalType GetSignalType(TileIndex t, Track track) |
213 { |
206 { |
214 assert(GetRailTileType(t) == RAIL_TILE_SIGNALS); |
207 assert(GetRailTileType(t) == RAIL_TILE_SIGNALS); |
215 byte pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 4 : 0; |
208 byte pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 4 : 0; |
216 return (SignalType)GB(_m[t].m2, pos, 2); |
209 return (SignalType)GB(_m[t].m2, pos, 2); |
241 |
234 |
242 sig = GB(_m[t].m3, pos, 2); |
235 sig = GB(_m[t].m3, pos, 2); |
243 if (--sig == 0) sig = 3; |
236 if (--sig == 0) sig = 3; |
244 SB(_m[t].m3, pos, 2, sig); |
237 SB(_m[t].m3, pos, 2, sig); |
245 } |
238 } |
246 |
|
247 /** Variant of the signal, i.e. how does the signal look? */ |
|
248 enum SignalVariant { |
|
249 SIG_ELECTRIC = 0, ///< Light signal |
|
250 SIG_SEMAPHORE = 1 ///< Old-fashioned semaphore signal |
|
251 }; |
|
252 |
239 |
253 static inline SignalVariant GetSignalVariant(TileIndex t, Track track) |
240 static inline SignalVariant GetSignalVariant(TileIndex t, Track track) |
254 { |
241 { |
255 byte pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 6 : 2; |
242 byte pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 6 : 2; |
256 return (SignalVariant)GB(_m[t].m2, pos, 1); |
243 return (SignalVariant)GB(_m[t].m2, pos, 1); |