src/rail_map.h
changeset 8761 40d9db82a895
parent 8632 2b48de850547
child 8775 fd5e36ec9f6c
equal deleted inserted replaced
8760:753172e17411 8761:40d9db82a895
     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);