rail_map.h
changeset 3792 67c865c9315c
parent 3772 f2cf079d7afe
child 3900 2c84ed52709d
equal deleted inserted replaced
3791:caa92ffecb02 3792:67c865c9315c
     6 #include "direction.h"
     6 #include "direction.h"
     7 #include "tile.h"
     7 #include "tile.h"
     8 
     8 
     9 
     9 
    10 typedef enum RailTileType {
    10 typedef enum RailTileType {
    11 	RAIL_TYPE_NORMAL         = 0x0,
    11 	RAIL_TILE_NORMAL         = 0x0,
    12 	RAIL_TYPE_SIGNALS        = 0x40,
    12 	RAIL_TILE_SIGNALS        = 0x40,
    13 	RAIL_TYPE_UNUSED         = 0x80, /* XXX: Maybe this could become waypoints? */
    13 	RAIL_TILE_UNUSED         = 0x80, /* XXX: Maybe this could become waypoints? */
    14 	RAIL_TYPE_DEPOT_WAYPOINT = 0xC0, /* Is really depots and waypoints... */
    14 	RAIL_TILE_DEPOT_WAYPOINT = 0xC0, /* Is really depots and waypoints... */
    15 	RAIL_TILE_TYPE_MASK      = 0xC0
    15 	RAIL_TILE_TYPE_MASK      = 0xC0
    16 } RailTileType;
    16 } RailTileType;
    17 
    17 
    18 static inline RailTileType GetRailTileType(TileIndex t)
    18 static inline RailTileType GetRailTileType(TileIndex t)
    19 {
    19 {
    21 	return _m[t].m5 & RAIL_TILE_TYPE_MASK;
    21 	return _m[t].m5 & RAIL_TILE_TYPE_MASK;
    22 }
    22 }
    23 
    23 
    24 /**
    24 /**
    25  * Returns whether this is plain rails, with or without signals. Iow, if this
    25  * Returns whether this is plain rails, with or without signals. Iow, if this
    26  * tiles RailTileType is RAIL_TYPE_NORMAL or RAIL_TYPE_SIGNALS.
    26  * tiles RailTileType is RAIL_TILE_NORMAL or RAIL_TILE_SIGNALS.
    27  */
    27  */
    28 static inline bool IsPlainRailTile(TileIndex tile)
    28 static inline bool IsPlainRailTile(TileIndex tile)
    29 {
    29 {
    30 	RailTileType rtt = GetRailTileType(tile);
    30 	RailTileType rtt = GetRailTileType(tile);
    31 	return rtt == RAIL_TYPE_NORMAL || rtt == RAIL_TYPE_SIGNALS;
    31 	return rtt == RAIL_TILE_NORMAL || rtt == RAIL_TILE_SIGNALS;
    32 }
    32 }
    33 
    33 
    34 /**
    34 /**
    35  * Checks if a rail tile has signals.
    35  * Checks if a rail tile has signals.
    36  */
    36  */
    37 static inline bool HasSignals(TileIndex tile)
    37 static inline bool HasSignals(TileIndex tile)
    38 {
    38 {
    39 	return GetRailTileType(tile) == RAIL_TYPE_SIGNALS;
    39 	return GetRailTileType(tile) == RAIL_TILE_SIGNALS;
    40 }
    40 }
    41 
    41 
    42 
    42 
    43 /** These specify the subtype when the main rail type is
    43 /** These specify the subtype when the main rail type is
    44  * RAIL_TYPE_DEPOT_WAYPOINT */
    44  * RAIL_TILE_DEPOT_WAYPOINT */
    45 typedef enum RailTileSubtypes {
    45 typedef enum RailTileSubtypes {
    46 	RAIL_SUBTYPE_DEPOT    = 0x00,
    46 	RAIL_SUBTYPE_DEPOT    = 0x00,
    47 	RAIL_SUBTYPE_WAYPOINT = 0x04,
    47 	RAIL_SUBTYPE_WAYPOINT = 0x04,
    48 	RAIL_SUBTYPE_MASK     = 0x3C
    48 	RAIL_SUBTYPE_MASK     = 0x3C
    49 } RailTileSubtype;
    49 } RailTileSubtype;
    50 
    50 
    51 /**
    51 /**
    52  * Returns the RailTileSubtype of a given rail tile with type
    52  * Returns the RailTileSubtype of a given rail tile with type
    53  * RAIL_TYPE_DEPOT_WAYPOINT
    53  * RAIL_TILE_DEPOT_WAYPOINT
    54  */
    54  */
    55 static inline RailTileSubtype GetRailTileSubtype(TileIndex tile)
    55 static inline RailTileSubtype GetRailTileSubtype(TileIndex tile)
    56 {
    56 {
    57 	assert(GetRailTileType(tile) == RAIL_TYPE_DEPOT_WAYPOINT);
    57 	assert(GetRailTileType(tile) == RAIL_TILE_DEPOT_WAYPOINT);
    58 	return (RailTileSubtype)(_m[tile].m5 & RAIL_SUBTYPE_MASK);
    58 	return (RailTileSubtype)(_m[tile].m5 & RAIL_SUBTYPE_MASK);
    59 }
    59 }
    60 
    60 
    61 
    61 
    62 typedef enum RailTypes {
    62 typedef enum RailTypes {
   199 	SIGTYPE_COMBO   = 3  // presignal inter-block
   199 	SIGTYPE_COMBO   = 3  // presignal inter-block
   200 } SignalType;
   200 } SignalType;
   201 
   201 
   202 static inline SignalType GetSignalType(TileIndex t)
   202 static inline SignalType GetSignalType(TileIndex t)
   203 {
   203 {
   204 	assert(GetRailTileType(t) == RAIL_TYPE_SIGNALS);
   204 	assert(GetRailTileType(t) == RAIL_TILE_SIGNALS);
   205 	return (SignalType)GB(_m[t].m4, 0, 2);
   205 	return (SignalType)GB(_m[t].m4, 0, 2);
   206 }
   206 }
   207 
   207 
   208 static inline void SetSignalType(TileIndex t, SignalType s)
   208 static inline void SetSignalType(TileIndex t, SignalType s)
   209 {
   209 {
   210 	assert(GetRailTileType(t) == RAIL_TYPE_SIGNALS);
   210 	assert(GetRailTileType(t) == RAIL_TILE_SIGNALS);
   211 	SB(_m[t].m4, 0, 2, s);
   211 	SB(_m[t].m4, 0, 2, s);
   212 }
   212 }
   213 
   213 
   214 static inline bool IsPresignalEntry(TileIndex t)
   214 static inline bool IsPresignalEntry(TileIndex t)
   215 {
   215 {
   285 	RAIL_GROUND_ICE_DESERT = 12,
   285 	RAIL_GROUND_ICE_DESERT = 12,
   286 } RailGroundType;
   286 } RailGroundType;
   287 
   287 
   288 static inline void SetRailGroundType(TileIndex t, RailGroundType rgt)
   288 static inline void SetRailGroundType(TileIndex t, RailGroundType rgt)
   289 {
   289 {
   290 	if (GetRailTileType(t) == RAIL_TYPE_DEPOT_WAYPOINT) {
   290 	if (GetRailTileType(t) == RAIL_TILE_DEPOT_WAYPOINT) {
   291 		SB(_m[t].m4, 0, 4, rgt);
   291 		SB(_m[t].m4, 0, 4, rgt);
   292 		return;
   292 		return;
   293 	}
   293 	}
   294 	SB(_m[t].m2, 0, 4, rgt);
   294 	SB(_m[t].m2, 0, 4, rgt);
   295 }
   295 }
   296 
   296 
   297 static inline RailGroundType GetRailGroundType(TileIndex t)
   297 static inline RailGroundType GetRailGroundType(TileIndex t)
   298 {
   298 {
   299 	/* TODO Unify this */
   299 	/* TODO Unify this */
   300 	if (GetRailTileType(t) == RAIL_TYPE_DEPOT_WAYPOINT) return GB(_m[t].m4, 0, 4);
   300 	if (GetRailTileType(t) == RAIL_TILE_DEPOT_WAYPOINT) return GB(_m[t].m4, 0, 4);
   301 	return GB(_m[t].m2, 0, 4);
   301 	return GB(_m[t].m2, 0, 4);
   302 }
   302 }
   303 
   303 
   304 static inline bool IsBarrenRailGround(TileIndex t)
   304 static inline bool IsBarrenRailGround(TileIndex t)
   305 {
   305 {
   317 	SetTileType(t, MP_RAILWAY);
   317 	SetTileType(t, MP_RAILWAY);
   318 	SetTileOwner(t, o);
   318 	SetTileOwner(t, o);
   319 	_m[t].m2 = 0;
   319 	_m[t].m2 = 0;
   320 	_m[t].m3 = r;
   320 	_m[t].m3 = r;
   321 	_m[t].m4 = 0;
   321 	_m[t].m4 = 0;
   322 	_m[t].m5 = RAIL_TYPE_NORMAL | b;
   322 	_m[t].m5 = RAIL_TILE_NORMAL | b;
   323 }
   323 }
   324 
   324 
   325 
   325 
   326 static inline void MakeRailDepot(TileIndex t, Owner o, DiagDirection d, RailType r)
   326 static inline void MakeRailDepot(TileIndex t, Owner o, DiagDirection d, RailType r)
   327 {
   327 {
   328 	SetTileType(t, MP_RAILWAY);
   328 	SetTileType(t, MP_RAILWAY);
   329 	SetTileOwner(t, o);
   329 	SetTileOwner(t, o);
   330 	_m[t].m2 = 0;
   330 	_m[t].m2 = 0;
   331 	_m[t].m3 = r;
   331 	_m[t].m3 = r;
   332 	_m[t].m4 = 0;
   332 	_m[t].m4 = 0;
   333 	_m[t].m5 = RAIL_TYPE_DEPOT_WAYPOINT | RAIL_SUBTYPE_DEPOT | d;
   333 	_m[t].m5 = RAIL_TILE_DEPOT_WAYPOINT | RAIL_SUBTYPE_DEPOT | d;
   334 }
   334 }
   335 
   335 
   336 
   336 
   337 static inline void MakeRailWaypoint(TileIndex t, Owner o, Axis a, RailType r, uint index)
   337 static inline void MakeRailWaypoint(TileIndex t, Owner o, Axis a, RailType r, uint index)
   338 {
   338 {
   339 	SetTileType(t, MP_RAILWAY);
   339 	SetTileType(t, MP_RAILWAY);
   340 	SetTileOwner(t, o);
   340 	SetTileOwner(t, o);
   341 	_m[t].m2 = index;
   341 	_m[t].m2 = index;
   342 	_m[t].m3 = r;
   342 	_m[t].m3 = r;
   343 	_m[t].m4 = 0;
   343 	_m[t].m4 = 0;
   344 	_m[t].m5 = RAIL_TYPE_DEPOT_WAYPOINT | RAIL_SUBTYPE_WAYPOINT | a;
   344 	_m[t].m5 = RAIL_TILE_DEPOT_WAYPOINT | RAIL_SUBTYPE_WAYPOINT | a;
   345 }
   345 }
   346 
   346 
   347 #endif
   347 #endif