/* virtual */ uint32 RailTypeScopeResolver::GetVariable(byte variable, uint32 parameter, bool *available) const { if (this->tile == INVALID_TILE) { switch (variable) { case 0x40: return 0; case 0x41: return 0; case 0x42: return 0; case 0x43: return _date; case 0x44: return HZB_TOWN_EDGE; } } switch (variable) { case 0x40: return GetTerrainType(this->tile, this->context); case 0x41: return 0; case 0x42: return IsLevelCrossingTile(this->tile) && IsCrossingBarred(this->tile); case 0x43: if (IsRailDepotTile(this->tile)) return Depot::GetByTile(this->tile)->build_date; return _date; case 0x44: { const Town *t = NULL; if (IsRailDepotTile(this->tile)) { t = Depot::GetByTile(this->tile)->town; } else if (IsLevelCrossingTile(this->tile)) { t = ClosestTownFromTile(this->tile, UINT_MAX); } return t != NULL ? GetTownRadiusGroup(t, this->tile) : HZB_TOWN_EDGE; } } DEBUG(grf, 1, "Unhandled rail type tile variable 0x%X", variable); *available = false; return UINT_MAX; }
static uint32 RailTypeGetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available) { TileIndex tile = object->u.routes.tile; if (tile == INVALID_TILE) { switch (variable) { case 0x40: return 0; case 0x41: return 0; case 0x42: return 0; case 0x43: return _date; } } switch (variable) { case 0x40: return GetTerrainType(tile, object->u.routes.context); case 0x41: return 0; case 0x42: return IsLevelCrossingTile(tile) && IsCrossingBarred(tile); case 0x43: if (IsRailDepotTile(tile)) return Depot::GetByTile(tile)->build_date; return _date; } DEBUG(grf, 1, "Unhandled rail type tile variable 0x%X", variable); *available = false; return UINT_MAX; }
/* static */ uint ScriptRail::GetRailTracks(TileIndex tile) { if (!IsRailTile(tile)) return RAILTRACK_INVALID; if (IsRailStationTile(tile) || IsRailWaypointTile(tile)) return ::TrackToTrackBits(::GetRailStationTrack(tile)); if (IsLevelCrossingTile(tile)) return ::GetCrossingRailBits(tile); if (IsRailDepotTile(tile)) return ::TRACK_BIT_NONE; return ::GetTrackBits(tile); }