(svn r16938) -Codechange: introduce helper function to tell whether a tile is either a rail station or rail waypoint tile

This commit is contained in:
rubidium 2009-07-24 11:15:11 +00:00
parent 07447a1766
commit 2c6b5237f6
12 changed files with 36 additions and 14 deletions

View File

@ -17,7 +17,7 @@
if (!::IsValidTile(tile)) return false; if (!::IsValidTile(tile)) return false;
return (::IsTileType(tile, MP_RAILWAY) && !::IsRailDepot(tile)) || return (::IsTileType(tile, MP_RAILWAY) && !::IsRailDepot(tile)) ||
(::IsRailwayStationTile(tile) && !::IsStationTileBlocked(tile)) || ::IsLevelCrossingTile(tile); (::HasStationTileRail(tile) && !::IsStationTileBlocked(tile)) || ::IsLevelCrossingTile(tile);
} }
/* static */ bool AIRail::IsLevelCrossingTile(TileIndex tile) /* static */ bool AIRail::IsLevelCrossingTile(TileIndex tile)

View File

@ -99,7 +99,7 @@ static TrackBits GetRailTrackBitsUniversal(TileIndex t, byte *override)
return GetCrossingRailBits(t); return GetCrossingRailBits(t);
case MP_STATION: case MP_STATION:
if (!IsRailwayStation(t) && !IsRailWaypoint(t)) return TRACK_BIT_NONE; if (!HasStationRail(t)) return TRACK_BIT_NONE;
if (!HasCatenary(GetRailType(t))) return TRACK_BIT_NONE; if (!HasCatenary(GetRailType(t))) return TRACK_BIT_NONE;
if (!IsStationTileElectrifiable(t)) return TRACK_BIT_NONE; if (!IsStationTileElectrifiable(t)) return TRACK_BIT_NONE;
return TrackToTrackBits(GetRailStationTrack(t)); return TrackToTrackBits(GetRailStationTrack(t));

View File

@ -291,7 +291,7 @@ TileIndex GetNearbyTile(byte parameter, TileIndex tile)
if (y >= 8) y -= 16; if (y >= 8) y -= 16;
/* Swap width and height depending on axis for railway stations */ /* Swap width and height depending on axis for railway stations */
if (IsRailwayStationTile(tile) && GetRailStationAxis(tile) == AXIS_Y) Swap(x, y); if (HasStationTileRail(tile) && GetRailStationAxis(tile) == AXIS_Y) Swap(x, y);
/* Make sure we never roam outside of the map, better wrap in that case */ /* Make sure we never roam outside of the map, better wrap in that case */
return TILE_MASK(tile + TileDiffXY(x, y)); return TILE_MASK(tile + TileDiffXY(x, y));

View File

@ -283,7 +283,7 @@ static TileIndex FindRailStationEnd(TileIndex tile, TileIndexDiff delta, bool ch
TileIndex new_tile = TILE_ADD(tile, delta); TileIndex new_tile = TILE_ADD(tile, delta);
if (!IsTileType(new_tile, MP_STATION) || GetStationIndex(new_tile) != sid) break; if (!IsTileType(new_tile, MP_STATION) || GetStationIndex(new_tile) != sid) break;
if (!IsRailwayStation(new_tile) && !IsRailWaypoint(new_tile)) break; if (!HasStationRail(new_tile)) break;
if (check_type && GetCustomStationSpecIndex(new_tile) != orig_type) break; if (check_type && GetCustomStationSpecIndex(new_tile) != orig_type) break;
if (check_axis && GetRailStationAxis(new_tile) != orig_axis) break; if (check_axis && GetRailStationAxis(new_tile) != orig_axis) break;
@ -479,7 +479,7 @@ static uint32 StationGetVariable(const ResolverObject *object, byte variable, by
case 0x68: { // Station info of nearby tiles case 0x68: { // Station info of nearby tiles
TileIndex nearby_tile = GetNearbyTile(parameter, tile); TileIndex nearby_tile = GetNearbyTile(parameter, tile);
if (!IsRailwayStationTile(nearby_tile)) return 0xFFFFFFFF; if (!HasStationTileRail(nearby_tile)) return 0xFFFFFFFF;
uint32 grfid = st->speclist[GetCustomStationSpecIndex(tile)].grfid; uint32 grfid = st->speclist[GetCustomStationSpecIndex(tile)].grfid;
bool perpendicular = GetRailStationAxis(tile) != GetRailStationAxis(nearby_tile); bool perpendicular = GetRailStationAxis(tile) != GetRailStationAxis(nearby_tile);

View File

@ -550,7 +550,7 @@ static void NPFSaveTargetData(AyStar *as, OpenListNode *current)
static bool CanEnterTileOwnerCheck(Owner owner, TileIndex tile, DiagDirection enterdir) static bool CanEnterTileOwnerCheck(Owner owner, TileIndex tile, DiagDirection enterdir)
{ {
if (IsTileType(tile, MP_RAILWAY) || // Rail tile (also rail depot) if (IsTileType(tile, MP_RAILWAY) || // Rail tile (also rail depot)
IsRailwayStationTile(tile) || // Rail station tile HasStationTileRail(tile) || // Rail station tile/waypoint
IsRoadDepotTile(tile) || // Road depot tile IsRoadDepotTile(tile) || // Road depot tile
IsStandardRoadStopTile(tile)) { // Road station tile (but not drive-through stops) IsStandardRoadStopTile(tile)) { // Road station tile (but not drive-through stops)
return IsTileOwner(tile, owner); // You need to own these tiles entirely to use them return IsTileOwner(tile, owner); // You need to own these tiles entirely to use them

View File

@ -26,7 +26,7 @@ TrackBits GetReservedTrackbits(TileIndex t)
break; break;
case MP_STATION: case MP_STATION:
if (IsRailwayStation(t) || IsRailWaypoint(t)) return GetStationReservationTrackBits(t); if (HasStationRail(t)) return GetStationReservationTrackBits(t);
break; break;
case MP_TUNNELBRIDGE: case MP_TUNNELBRIDGE:
@ -99,7 +99,7 @@ bool TryReserveRailTrack(TileIndex tile, Track t)
break; break;
case MP_STATION: case MP_STATION:
if ((IsRailwayStation(tile) || IsRailWaypoint(tile)) && !HasStationReservation(tile)) { if (HasStationRail(tile) && !HasStationReservation(tile)) {
SetRailwayStationReservation(tile, true); SetRailwayStationReservation(tile, true);
MarkTileDirtyByTile(tile); // some GRFs need redraw after reserving track MarkTileDirtyByTile(tile); // some GRFs need redraw after reserving track
return true; return true;
@ -150,7 +150,7 @@ bool TryReserveRailTrack(TileIndex tile, Track t)
break; break;
case MP_STATION: case MP_STATION:
if (IsRailwayStation(tile) || IsRailWaypoint(tile)) { if (HasStationRail(tile)) {
SetRailwayStationReservation(tile, false); SetRailwayStationReservation(tile, false);
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
} }

View File

@ -155,7 +155,7 @@ RailType GetTileRailType(TileIndex tile)
break; break;
case MP_STATION: case MP_STATION:
if (IsRailwayStation(tile) || IsRailWaypoint(tile)) return GetRailType(tile); if (HasStationRail(tile)) return GetRailType(tile);
break; break;
case MP_TUNNELBRIDGE: case MP_TUNNELBRIDGE:

View File

@ -1280,7 +1280,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
case MP_RAILWAY: case MP_RAILWAY:
break; break;
case MP_STATION: case MP_STATION:
if (!IsRailwayStation(tile) && !IsRailWaypoint(tile)) continue; if (!HasStationRail(tile)) continue;
break; break;
case MP_ROAD: case MP_ROAD:
if (!IsLevelCrossing(tile)) continue; if (!IsLevelCrossing(tile)) continue;

View File

@ -1858,7 +1858,7 @@ static void SetDefaultRailGui()
RailType count[RAILTYPE_END]; RailType count[RAILTYPE_END];
memset(count, 0, sizeof(count)); memset(count, 0, sizeof(count));
for (TileIndex t = 0; t < MapSize(); t++) { for (TileIndex t = 0; t < MapSize(); t++) {
if (IsTileType(t, MP_RAILWAY) || IsLevelCrossingTile(t) || IsRailwayStationTile(t) || if (IsTileType(t, MP_RAILWAY) || IsLevelCrossingTile(t) || HasStationTileRail(t) ||
(IsTileType(t, MP_TUNNELBRIDGE) && GetTunnelBridgeTransportType(t) == TRANSPORT_RAIL)) { (IsTileType(t, MP_TUNNELBRIDGE) && GetTunnelBridgeTransportType(t) == TRANSPORT_RAIL)) {
count[GetRailType(t)]++; count[GetRailType(t)]++;
} }

View File

@ -959,7 +959,7 @@ bool AfterLoadGame()
break; break;
case MP_STATION: case MP_STATION:
if (IsRailwayStation(t)) { if (HasStationRail(t)) {
SetRailType(t, UpdateRailType(GetRailType(t), min_rail)); SetRailType(t, UpdateRailType(GetRailType(t), min_rail));
} }
break; break;

View File

@ -343,7 +343,7 @@ static SigFlags ExploreSegment(Owner owner)
} }
case MP_STATION: case MP_STATION:
if (!IsRailwayStation(tile) && !IsRailWaypoint(tile)) continue; if (!HasStationRail(tile)) continue;
if (GetTileOwner(tile) != owner) continue; if (GetTileOwner(tile) != owner) continue;
if (DiagDirToAxis(enterdir) != GetRailStationAxis(tile)) continue; // different axis if (DiagDirToAxis(enterdir) != GetRailStationAxis(tile)) continue; // different axis
if (IsStationTileBlocked(tile)) continue; // 'eye-candy' station tile if (IsStationTileBlocked(tile)) continue; // 'eye-candy' station tile

View File

@ -109,6 +109,28 @@ static inline bool IsRailWaypointTile(TileIndex t)
return IsTileType(t, MP_STATION) && IsRailWaypoint(t); return IsTileType(t, MP_STATION) && IsRailWaypoint(t);
} }
/**
* Has this station tile a rail? In other words, is this station
* tile a rail station or rail waypoint?
* @param t the tile to check
* @pre IsTileType(t, MP_STATION)
* @return true if and only if the tile has rail
*/
static inline bool HasStationRail(TileIndex t)
{
return IsRailwayStation(t) || IsRailWaypoint(t);
}
/**
* Has this station tile a rail? In other words, is this station
* tile a rail station or rail waypoint?
* @param t the tile to check
* @return true if and only if the tile is a station tile and has rail
*/
static inline bool HasStationTileRail(TileIndex t)
{
return IsTileType(t, MP_STATION) && HasStationRail(t);
}
static inline bool IsAirport(TileIndex t) static inline bool IsAirport(TileIndex t)
{ {