summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/aircraft_cmd.cpp15
-rw-r--r--src/airport.cpp23
-rw-r--r--src/airport.h2
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 */