diff --git a/src/ai/api/ai_airport.cpp b/src/ai/api/ai_airport.cpp --- a/src/ai/api/ai_airport.cpp +++ b/src/ai/api/ai_airport.cpp @@ -109,7 +109,7 @@ if (st->owner != _current_company) return INVALID_TILE; if ((st->facilities & FACIL_AIRPORT) == 0) return INVALID_TILE; - return ::ToTileIndexDiff(st->GetAirportSpec()->depot_table[0]) + st->airport_tile; + return st->GetHangarTile(0); } /* static */ AIAirport::AirportType AIAirport::GetAirportType(TileIndex tile) diff --git a/src/ai/api/ai_depotlist.cpp b/src/ai/api/ai_depotlist.cpp --- a/src/ai/api/ai_depotlist.cpp +++ b/src/ai/api/ai_depotlist.cpp @@ -31,7 +31,7 @@ AIDepotList::AIDepotList(AITile::Transpo if (st->owner == ::_current_company) { const AirportSpec *as = st->GetAirportSpec(); for (uint i = 0; i < as->nof_depots; i++) { - this->AddItem(st->airport_tile + ToTileIndexDiff(as->depot_table[i])); + this->AddItem(st->GetHangarTile(i)); } } } diff --git a/src/ai/api/ai_order.cpp b/src/ai/api/ai_order.cpp --- a/src/ai/api/ai_order.cpp +++ b/src/ai/api/ai_order.cpp @@ -181,9 +181,8 @@ static const Order *ResolveOrder(Vehicle if (v->type != VEH_AIRCRAFT) return ::Depot::Get(order->GetDestination())->xy; /* Aircraft's hangars are referenced by StationID, not DepotID */ const Station *st = ::Station::Get(order->GetDestination()); - const AirportSpec *as = st->GetAirportSpec(); - if (as == NULL || as->nof_depots == 0) return INVALID_TILE; - return st->airport_tile + ::ToTileIndexDiff(as->depot_table[0]); + if (st->GetAirportSpec()->nof_depots == 0) return INVALID_TILE; + return st->GetHangarTile(0); } case OT_GOTO_STATION: { diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -334,11 +334,9 @@ CommandCost CmdBuildAircraft(TileIndex t * of all depots, it is simple */ for (uint i = 0;; i++) { const Station *st = Station::GetByTile(tile); - const AirportSpec *as = st->GetAirportSpec(); const AirportFTAClass *apc = st->Airport(); - assert(i != as->nof_depots); - if (st->airport_tile + ToTileIndexDiff(as->depot_table[i]) == tile) { + if (st->GetHangarTile(i) == tile) { assert(apc->layout[i].heading == HANGAR); v->pos = apc->layout[i].position; break; diff --git a/src/station_base.h b/src/station_base.h --- a/src/station_base.h +++ b/src/station_base.h @@ -121,11 +121,18 @@ public: return IsRailStationTile(tile) && GetStationIndex(tile) == this->index; } - /* virtual */ FORCEINLINE bool TileBelongsToAirport(TileIndex tile) const + FORCEINLINE bool TileBelongsToAirport(TileIndex tile) const { return IsAirportTile(tile) && GetStationIndex(tile) == this->index; } + FORCEINLINE TileIndex GetHangarTile(uint hangar_num) const + { + assert(this->airport_tile != INVALID_TILE); + assert(hangar_num < this->GetAirportSpec()->nof_depots); + return this->airport_tile + ToTileIndexDiff(this->GetAirportSpec()->depot_table[hangar_num]); + } + /* virtual */ uint32 GetNewGRFVariable(const ResolverObject *object, byte variable, byte parameter, bool *available) const; /* virtual */ void GetTileArea(TileArea *ta, StationType type) const; diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -66,7 +66,7 @@ bool IsHangar(TileIndex t) const AirportSpec *as = st->GetAirportSpec(); for (uint i = 0; i < as->nof_depots; i++) { - if (st->airport_tile + ToTileIndexDiff(as->depot_table[i]) == t) return true; + if (st->GetHangarTile(i) == t) return true; } return false; @@ -2090,7 +2090,7 @@ static CommandCost RemoveAirport(TileInd if (flags & DC_EXEC) { for (uint i = 0; i < as->nof_depots; ++i) { DeleteWindowById( - WC_VEHICLE_DEPOT, tile + ToTileIndexDiff(as->depot_table[i]) + WC_VEHICLE_DEPOT, st->GetHangarTile(i) ); }