diff options
-rw-r--r-- | src/aircraft_cmd.cpp | 15 | ||||
-rw-r--r-- | src/airport.cpp | 23 | ||||
-rw-r--r-- | src/airport.h | 2 |
3 files changed, 26 insertions, 14 deletions
diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 52a011673..cce161e15 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -315,20 +315,7 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, uint32 p1, uin _new_vehicle_id = v->index; - /* When we click on hangar we know the tile it is on. By that we know - * its position in the array of depots the airport has.....we can search - * layout for #th position of depot. Since layout must start with a listing - * of all depots, it is simple */ - for (uint i = 0;; i++) { - const Station *st = Station::GetByTile(tile); - const AirportFTAClass *apc = st->Airport(); - - if (st->GetHangarTile(i) == tile) { - assert(apc->layout[i].heading == HANGAR); - v->pos = apc->layout[i].position; - break; - } - } + v->pos = GetVehiclePosOnBuild(tile); v->state = HANGAR; v->previous_pos = v->pos; diff --git a/src/airport.cpp b/src/airport.cpp index 2db4b8af0..e84250282 100644 --- a/src/airport.cpp +++ b/src/airport.cpp @@ -18,6 +18,7 @@ #include "date_func.h" #include "settings_type.h" #include "newgrf_airport.h" +#include "station_base.h" #include "table/strings.h" #include "table/airporttile_ids.h" @@ -381,3 +382,25 @@ const AirportFTAClass *GetAirport(const byte airport_type) if (airport_type == AT_DUMMY) return &_airportfta_dummy; return AirportSpec::Get(airport_type)->fsm; } + +/** + * Get the vehicle position when an aircraft is build at the given tile + * @param hangar_tile The tile on which the vehicle is build + * @return The position (index in airport node array) where the aircraft ends up + */ +byte GetVehiclePosOnBuild(TileIndex hangar_tile) +{ + const Station *st = Station::GetByTile(hangar_tile); + const AirportFTAClass *apc = st->Airport(); + /* When we click on hangar we know the tile it is on. By that we know + * its position in the array of depots the airport has.....we can search + * layout for #th position of depot. Since layout must start with a listing + * of all depots, it is simple */ + for (uint i = 0;; i++) { + if (st->GetHangarTile(i) == hangar_tile) { + assert(apc->layout[i].heading == HANGAR); + return apc->layout[i].position; + } + } + NOT_REACHED(); +} diff --git a/src/airport.h b/src/airport.h index e6eb5bbc2..1422d3886 100644 --- a/src/airport.h +++ b/src/airport.h @@ -13,6 +13,7 @@ #define AIRPORT_H #include "direction_type.h" +#include "tile_type.h" /** Some airport-related constants */ enum { @@ -186,5 +187,6 @@ struct AirportFTA { }; const AirportFTAClass *GetAirport(const byte airport_type); +byte GetVehiclePosOnBuild(TileIndex hangar_tile); #endif /* AIRPORT_H */ |