1
0
Fork 0

(svn r18860) -Codechange: introduce a wrapper to get an hangar tile from a station

release/1.0
yexo 2010-01-18 14:32:47 +00:00
parent 565ad802b1
commit a1f28ec88b
6 changed files with 15 additions and 11 deletions

View File

@ -109,7 +109,7 @@
if (st->owner != _current_company) return INVALID_TILE; if (st->owner != _current_company) return INVALID_TILE;
if ((st->facilities & FACIL_AIRPORT) == 0) 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) /* static */ AIAirport::AirportType AIAirport::GetAirportType(TileIndex tile)

View File

@ -31,7 +31,7 @@ AIDepotList::AIDepotList(AITile::TransportType transport_type)
if (st->owner == ::_current_company) { if (st->owner == ::_current_company) {
const AirportSpec *as = st->GetAirportSpec(); const AirportSpec *as = st->GetAirportSpec();
for (uint i = 0; i < as->nof_depots; i++) { for (uint i = 0; i < as->nof_depots; i++) {
this->AddItem(st->airport_tile + ToTileIndexDiff(as->depot_table[i])); this->AddItem(st->GetHangarTile(i));
} }
} }
} }

View File

@ -181,9 +181,8 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
if (v->type != VEH_AIRCRAFT) return ::Depot::Get(order->GetDestination())->xy; if (v->type != VEH_AIRCRAFT) return ::Depot::Get(order->GetDestination())->xy;
/* Aircraft's hangars are referenced by StationID, not DepotID */ /* Aircraft's hangars are referenced by StationID, not DepotID */
const Station *st = ::Station::Get(order->GetDestination()); const Station *st = ::Station::Get(order->GetDestination());
const AirportSpec *as = st->GetAirportSpec(); if (st->GetAirportSpec()->nof_depots == 0) return INVALID_TILE;
if (as == NULL || as->nof_depots == 0) return INVALID_TILE; return st->GetHangarTile(0);
return st->airport_tile + ::ToTileIndexDiff(as->depot_table[0]);
} }
case OT_GOTO_STATION: { case OT_GOTO_STATION: {

View File

@ -334,11 +334,9 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
* of all depots, it is simple */ * of all depots, it is simple */
for (uint i = 0;; i++) { for (uint i = 0;; i++) {
const Station *st = Station::GetByTile(tile); const Station *st = Station::GetByTile(tile);
const AirportSpec *as = st->GetAirportSpec();
const AirportFTAClass *apc = st->Airport(); const AirportFTAClass *apc = st->Airport();
assert(i != as->nof_depots); if (st->GetHangarTile(i) == tile) {
if (st->airport_tile + ToTileIndexDiff(as->depot_table[i]) == tile) {
assert(apc->layout[i].heading == HANGAR); assert(apc->layout[i].heading == HANGAR);
v->pos = apc->layout[i].position; v->pos = apc->layout[i].position;
break; break;

View File

@ -121,11 +121,18 @@ public:
return IsRailStationTile(tile) && GetStationIndex(tile) == this->index; 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; 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 */ uint32 GetNewGRFVariable(const ResolverObject *object, byte variable, byte parameter, bool *available) const;
/* virtual */ void GetTileArea(TileArea *ta, StationType type) const; /* virtual */ void GetTileArea(TileArea *ta, StationType type) const;

View File

@ -66,7 +66,7 @@ bool IsHangar(TileIndex t)
const AirportSpec *as = st->GetAirportSpec(); const AirportSpec *as = st->GetAirportSpec();
for (uint i = 0; i < as->nof_depots; i++) { 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; return false;
@ -2090,7 +2090,7 @@ static CommandCost RemoveAirport(TileIndex tile, DoCommandFlag flags)
if (flags & DC_EXEC) { if (flags & DC_EXEC) {
for (uint i = 0; i < as->nof_depots; ++i) { for (uint i = 0; i < as->nof_depots; ++i) {
DeleteWindowById( DeleteWindowById(
WC_VEHICLE_DEPOT, tile + ToTileIndexDiff(as->depot_table[i]) WC_VEHICLE_DEPOT, st->GetHangarTile(i)
); );
} }