mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 06:15:04 +00:00
(svn r18807) -Codechange: introduce AirportSpec and move several non-statemachine-related variables to there
This commit is contained in:
parent
c37d69d161
commit
d669801f1d
@ -2167,6 +2167,10 @@
|
|||||||
<Filter
|
<Filter
|
||||||
Name="Tables"
|
Name="Tables"
|
||||||
>
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\table\airport_defaults.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\table\airport_movement.h"
|
RelativePath=".\..\src\table\airport_movement.h"
|
||||||
>
|
>
|
||||||
|
@ -2164,6 +2164,10 @@
|
|||||||
<Filter
|
<Filter
|
||||||
Name="Tables"
|
Name="Tables"
|
||||||
>
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\table\airport_defaults.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\table\airport_movement.h"
|
RelativePath=".\..\src\table\airport_movement.h"
|
||||||
>
|
>
|
||||||
|
@ -472,6 +472,7 @@ saveload/vehicle_sl.cpp
|
|||||||
saveload/waypoint_sl.cpp
|
saveload/waypoint_sl.cpp
|
||||||
|
|
||||||
# Tables
|
# Tables
|
||||||
|
table/airport_defaults.h
|
||||||
table/airport_movement.h
|
table/airport_movement.h
|
||||||
table/animcursors.h
|
table/animcursors.h
|
||||||
table/autorail.h
|
table/autorail.h
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
/* static */ bool AIAirport::IsValidAirportType(AirportType type)
|
/* static */ bool AIAirport::IsValidAirportType(AirportType type)
|
||||||
{
|
{
|
||||||
return IsAirportInformationAvailable(type) && ::GetAirport(type)->IsAvailable();
|
return IsAirportInformationAvailable(type) && ::AirportSpec::Get(type)->IsAvailable();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ bool AIAirport::IsAirportInformationAvailable(AirportType type)
|
/* static */ bool AIAirport::IsAirportInformationAvailable(AirportType type)
|
||||||
@ -29,8 +29,8 @@
|
|||||||
{
|
{
|
||||||
if (!IsValidAirportType(type)) return -1;
|
if (!IsValidAirportType(type)) return -1;
|
||||||
|
|
||||||
const AirportFTAClass *afc = ::GetAirport(type);
|
const AirportSpec *as = ::AirportSpec::Get(type);
|
||||||
return _price[PR_BUILD_STATION_AIRPORT] * afc->size_x * afc->size_y;
|
return _price[PR_BUILD_STATION_AIRPORT] * as->size_x * as->size_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ bool AIAirport::IsHangarTile(TileIndex tile)
|
/* static */ bool AIAirport::IsHangarTile(TileIndex tile)
|
||||||
@ -51,21 +51,21 @@
|
|||||||
{
|
{
|
||||||
if (!IsAirportInformationAvailable(type)) return -1;
|
if (!IsAirportInformationAvailable(type)) return -1;
|
||||||
|
|
||||||
return ::GetAirport(type)->size_x;
|
return ::AirportSpec::Get(type)->size_x;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ int32 AIAirport::GetAirportHeight(AirportType type)
|
/* static */ int32 AIAirport::GetAirportHeight(AirportType type)
|
||||||
{
|
{
|
||||||
if (!IsAirportInformationAvailable(type)) return -1;
|
if (!IsAirportInformationAvailable(type)) return -1;
|
||||||
|
|
||||||
return ::GetAirport(type)->size_y;
|
return ::AirportSpec::Get(type)->size_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ int32 AIAirport::GetAirportCoverageRadius(AirportType type)
|
/* static */ int32 AIAirport::GetAirportCoverageRadius(AirportType type)
|
||||||
{
|
{
|
||||||
if (!IsAirportInformationAvailable(type)) return -1;
|
if (!IsAirportInformationAvailable(type)) return -1;
|
||||||
|
|
||||||
return _settings_game.station.modified_catchment ? ::GetAirport(type)->catchment : (uint)CA_UNMODIFIED;
|
return _settings_game.station.modified_catchment ? ::AirportSpec::Get(type)->catchment : (uint)CA_UNMODIFIED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ bool AIAirport::BuildAirport(TileIndex tile, AirportType type, StationID station_id)
|
/* static */ bool AIAirport::BuildAirport(TileIndex tile, AirportType type, StationID station_id)
|
||||||
@ -96,7 +96,7 @@
|
|||||||
if (st->owner != _current_company) return -1;
|
if (st->owner != _current_company) return -1;
|
||||||
if ((st->facilities & FACIL_AIRPORT) == 0) return -1;
|
if ((st->facilities & FACIL_AIRPORT) == 0) return -1;
|
||||||
|
|
||||||
return st->Airport()->nof_depots;
|
return st->GetAirportSpec()->nof_depots;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ TileIndex AIAirport::GetHangarOfAirport(TileIndex tile)
|
/* static */ TileIndex AIAirport::GetHangarOfAirport(TileIndex tile)
|
||||||
@ -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->Airport()->airport_depots[0]) + st->airport_tile;
|
return ::ToTileIndexDiff(st->GetAirportSpec()->depot_table[0]) + st->airport_tile;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ AIAirport::AirportType AIAirport::GetAirportType(TileIndex tile)
|
/* static */ AIAirport::AirportType AIAirport::GetAirportType(TileIndex tile)
|
||||||
@ -126,16 +126,16 @@
|
|||||||
|
|
||||||
/* static */ int AIAirport::GetNoiseLevelIncrease(TileIndex tile, AirportType type)
|
/* static */ int AIAirport::GetNoiseLevelIncrease(TileIndex tile, AirportType type)
|
||||||
{
|
{
|
||||||
extern Town *AirportGetNearestTown(const AirportFTAClass *afc, TileIndex airport_tile);
|
extern Town *AirportGetNearestTown(const AirportSpec *as, TileIndex airport_tile);
|
||||||
extern uint8 GetAirportNoiseLevelForTown(const AirportFTAClass *afc, TileIndex town_tile, TileIndex tile);
|
extern uint8 GetAirportNoiseLevelForTown(const AirportSpec *as, TileIndex town_tile, TileIndex tile);
|
||||||
|
|
||||||
if (!::IsValidTile(tile)) return -1;
|
if (!::IsValidTile(tile)) return -1;
|
||||||
if (!IsValidAirportType(type)) return -1;
|
if (!IsValidAirportType(type)) return -1;
|
||||||
|
|
||||||
if (_settings_game.economy.station_noise_level) {
|
if (_settings_game.economy.station_noise_level) {
|
||||||
const AirportFTAClass *afc = ::GetAirport(type);
|
const AirportSpec *as = ::AirportSpec::Get(type);
|
||||||
const Town *t = AirportGetNearestTown(afc, tile);
|
const Town *t = AirportGetNearestTown(as, tile);
|
||||||
return GetAirportNoiseLevelForTown(afc, t->xy, tile);
|
return GetAirportNoiseLevelForTown(as, t->xy, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@ -143,10 +143,10 @@
|
|||||||
|
|
||||||
/* static */ TownID AIAirport::GetNearestTown(TileIndex tile, AirportType type)
|
/* static */ TownID AIAirport::GetNearestTown(TileIndex tile, AirportType type)
|
||||||
{
|
{
|
||||||
extern Town *AirportGetNearestTown(const AirportFTAClass *afc, TileIndex airport_tile);
|
extern Town *AirportGetNearestTown(const AirportSpec *as, TileIndex airport_tile);
|
||||||
|
|
||||||
if (!::IsValidTile(tile)) return INVALID_TOWN;
|
if (!::IsValidTile(tile)) return INVALID_TOWN;
|
||||||
if (!IsAirportInformationAvailable(type)) return INVALID_TOWN;
|
if (!IsAirportInformationAvailable(type)) return INVALID_TOWN;
|
||||||
|
|
||||||
return AirportGetNearestTown(GetAirport(type), tile)->index;
|
return AirportGetNearestTown(AirportSpec::Get(type), tile)->index;
|
||||||
}
|
}
|
||||||
|
@ -29,9 +29,9 @@ AIDepotList::AIDepotList(AITile::TransportType transport_type)
|
|||||||
const Station *st;
|
const Station *st;
|
||||||
FOR_ALL_STATIONS(st) {
|
FOR_ALL_STATIONS(st) {
|
||||||
if (st->owner == ::_current_company) {
|
if (st->owner == ::_current_company) {
|
||||||
const AirportFTAClass *afc = st->Airport();
|
const AirportSpec *as = st->GetAirportSpec();
|
||||||
for (uint i = 0; i < afc->nof_depots; i++) {
|
for (uint i = 0; i < as->nof_depots; i++) {
|
||||||
this->AddItem(st->airport_tile + ToTileIndexDiff(afc->airport_depots[i]));
|
this->AddItem(st->airport_tile + ToTileIndexDiff(as->depot_table[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -181,9 +181,9 @@ 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 AirportFTAClass *airport = st->Airport();
|
const AirportSpec *as = st->GetAirportSpec();
|
||||||
if (airport == NULL || airport->nof_depots == 0) return INVALID_TILE;
|
if (as == NULL || as->nof_depots == 0) return INVALID_TILE;
|
||||||
return st->airport_tile + ::ToTileIndexDiff(st->Airport()->airport_depots[0]);
|
return st->airport_tile + ::ToTileIndexDiff(as->depot_table[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
case OT_GOTO_STATION: {
|
case OT_GOTO_STATION: {
|
||||||
@ -200,8 +200,8 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
|
|||||||
} else if (st->truck_stops != NULL) {
|
} else if (st->truck_stops != NULL) {
|
||||||
return st->truck_stops->xy;
|
return st->truck_stops->xy;
|
||||||
} else if (st->airport_tile != INVALID_TILE) {
|
} else if (st->airport_tile != INVALID_TILE) {
|
||||||
const AirportFTAClass *fta = st->Airport();
|
const AirportSpec *as = st->GetAirportSpec();
|
||||||
TILE_LOOP(tile, fta->size_x, fta->size_y, st->airport_tile) {
|
TILE_LOOP(tile, as->size_x, as->size_y, st->airport_tile) {
|
||||||
if (!::IsHangar(tile)) return tile;
|
if (!::IsHangar(tile)) return tile;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -116,7 +116,8 @@ static StationID FindNearestHangar(const Aircraft *v)
|
|||||||
if (st->owner != v->owner || !(st->facilities & FACIL_AIRPORT)) continue;
|
if (st->owner != v->owner || !(st->facilities & FACIL_AIRPORT)) continue;
|
||||||
|
|
||||||
const AirportFTAClass *afc = st->Airport();
|
const AirportFTAClass *afc = st->Airport();
|
||||||
if (afc->nof_depots == 0 || (
|
const AirportSpec *as = st->GetAirportSpec();
|
||||||
|
if (as->nof_depots == 0 || (
|
||||||
/* don't crash the plane if we know it can't land at the airport */
|
/* don't crash the plane if we know it can't land at the airport */
|
||||||
(afc->flags & AirportFTAClass::SHORT_STRIP) &&
|
(afc->flags & AirportFTAClass::SHORT_STRIP) &&
|
||||||
(avi->subtype & AIR_FAST) &&
|
(avi->subtype & AIR_FAST) &&
|
||||||
@ -332,10 +333,11 @@ 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 != apc->nof_depots);
|
assert(i != as->nof_depots);
|
||||||
if (st->airport_tile + ToTileIndexDiff(apc->airport_depots[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;
|
||||||
@ -436,7 +438,7 @@ bool Aircraft::FindClosestDepot(TileIndex *location, DestinationID *destination,
|
|||||||
{
|
{
|
||||||
const Station *st = GetTargetAirportIfValid(this);
|
const Station *st = GetTargetAirportIfValid(this);
|
||||||
/* If the station is not a valid airport or if it has no hangars */
|
/* If the station is not a valid airport or if it has no hangars */
|
||||||
if (st == NULL || st->Airport()->nof_depots == 0) {
|
if (st == NULL || st->GetAirportSpec()->nof_depots == 0) {
|
||||||
/* the aircraft has to search for a hangar on its own */
|
/* the aircraft has to search for a hangar on its own */
|
||||||
StationID station = FindNearestHangar(this);
|
StationID station = FindNearestHangar(this);
|
||||||
|
|
||||||
@ -1474,7 +1476,7 @@ static void AircraftEventHandler_AtTerminal(Aircraft *v, const AirportFTAClass *
|
|||||||
return;
|
return;
|
||||||
default: // orders have been deleted (no orders), goto depot and don't bother us
|
default: // orders have been deleted (no orders), goto depot and don't bother us
|
||||||
v->current_order.Free();
|
v->current_order.Free();
|
||||||
go_to_hangar = Station::Get(v->targetairport)->Airport()->nof_depots != 0;
|
go_to_hangar = Station::Get(v->targetairport)->GetAirportSpec()->nof_depots != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (go_to_hangar) {
|
if (go_to_hangar) {
|
||||||
@ -1615,7 +1617,8 @@ static void AircraftEventHandler_HeliEndLanding(Aircraft *v, const AirportFTACla
|
|||||||
if (v->current_order.IsType(OT_GOTO_STATION)) {
|
if (v->current_order.IsType(OT_GOTO_STATION)) {
|
||||||
if (AirportFindFreeHelipad(v, apc)) return;
|
if (AirportFindFreeHelipad(v, apc)) return;
|
||||||
}
|
}
|
||||||
v->state = (apc->nof_depots != 0) ? HANGAR : HELITAKEOFF;
|
const AirportSpec *as = Station::Get(v->targetairport)->GetAirportSpec();
|
||||||
|
v->state = (as->nof_depots != 0) ? HANGAR : HELITAKEOFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef void AircraftStateHandler(Aircraft *v, const AirportFTAClass *apc);
|
typedef void AircraftStateHandler(Aircraft *v, const AirportFTAClass *apc);
|
||||||
|
196
src/airport.cpp
196
src/airport.cpp
@ -122,98 +122,9 @@ enum AirportTiles {
|
|||||||
/* 141-143 used for flag animation */
|
/* 141-143 used for flag animation */
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Tiles for Country Airfield (small) */
|
#include "table/airport_defaults.h"
|
||||||
static const byte _airport_sections_country[] = {
|
|
||||||
APT_SMALL_BUILDING_1, APT_SMALL_BUILDING_2, APT_SMALL_BUILDING_3, APT_SMALL_DEPOT_SE,
|
|
||||||
APT_GRASS_FENCE_NE_FLAG, APT_GRASS_1, APT_GRASS_2, APT_GRASS_FENCE_SW,
|
|
||||||
APT_RUNWAY_SMALL_FAR_END, APT_RUNWAY_SMALL_MIDDLE, APT_RUNWAY_SMALL_MIDDLE, APT_RUNWAY_SMALL_NEAR_END
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Tiles for City Airport (large) */
|
AirportSpec AirportSpec::dummy = {NULL, NULL, 0, 0, 0, 0, 0, MIN_YEAR, MIN_YEAR};
|
||||||
static const byte _airport_sections_town[] = {
|
|
||||||
APT_BUILDING_1, APT_APRON_FENCE_NW, APT_STAND_1, APT_APRON_FENCE_NW, APT_APRON_FENCE_NW, APT_DEPOT_SE,
|
|
||||||
APT_BUILDING_2, APT_PIER, APT_ROUND_TERMINAL, APT_STAND_PIER_NE, APT_APRON, APT_APRON_FENCE_SW,
|
|
||||||
APT_BUILDING_3, APT_STAND, APT_PIER_NW_NE, APT_APRON_S, APT_APRON_HOR, APT_APRON_N_FENCE_SW,
|
|
||||||
APT_RADIO_TOWER_FENCE_NE, APT_APRON_W, APT_APRON_VER_CROSSING_S, APT_APRON_HOR_CROSSING_E, APT_ARPON_N, APT_TOWER_FENCE_SW,
|
|
||||||
APT_EMPTY_FENCE_NE, APT_APRON_S, APT_APRON_HOR_CROSSING_W, APT_APRON_VER_CROSSING_N, APT_APRON_E, APT_RADAR_GRASS_FENCE_SW,
|
|
||||||
APT_RUNWAY_END_FENCE_SE, APT_RUNWAY_1, APT_RUNWAY_2, APT_RUNWAY_3, APT_RUNWAY_4, APT_RUNWAY_END_FENCE_SE
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Tiles for Metropolitain Airport (large) - 2 runways */
|
|
||||||
static const byte _airport_sections_metropolitan[] = {
|
|
||||||
APT_BUILDING_1, APT_APRON_FENCE_NW, APT_STAND_1, APT_APRON_FENCE_NW, APT_APRON_FENCE_NW, APT_DEPOT_SE,
|
|
||||||
APT_BUILDING_2, APT_PIER, APT_ROUND_TERMINAL, APT_STAND_PIER_NE, APT_APRON, APT_APRON_FENCE_SW,
|
|
||||||
APT_BUILDING_3, APT_STAND, APT_PIER_NW_NE, APT_APRON_S, APT_APRON_HOR, APT_APRON_N_FENCE_SW,
|
|
||||||
APT_RADAR_FENCE_NE, APT_APRON, APT_APRON, APT_APRON, APT_APRON, APT_TOWER_FENCE_SW,
|
|
||||||
APT_RUNWAY_END, APT_RUNWAY_5, APT_RUNWAY_5, APT_RUNWAY_5, APT_RUNWAY_5, APT_RUNWAY_END,
|
|
||||||
APT_RUNWAY_END_FENCE_SE, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_END_FENCE_SE
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Tiles for International Airport (large) - 2 runways */
|
|
||||||
static const byte _airport_sections_international[] = {
|
|
||||||
APT_RUNWAY_END_FENCE_NW, APT_RUNWAY_FENCE_NW, APT_RUNWAY_FENCE_NW, APT_RUNWAY_FENCE_NW, APT_RUNWAY_FENCE_NW, APT_RUNWAY_FENCE_NW, APT_RUNWAY_END_FENCE_NW,
|
|
||||||
APT_RADIO_TOWER_FENCE_NE, APT_APRON, APT_APRON, APT_APRON, APT_APRON, APT_APRON, APT_DEPOT_SE,
|
|
||||||
APT_BUILDING_3, APT_APRON, APT_STAND, APT_BUILDING_2, APT_STAND, APT_APRON, APT_APRON_FENCE_SW,
|
|
||||||
APT_DEPOT_SE, APT_APRON, APT_STAND, APT_BUILDING_2, APT_STAND, APT_APRON, APT_HELIPAD_1,
|
|
||||||
APT_APRON_FENCE_NE, APT_APRON, APT_STAND, APT_TOWER, APT_STAND, APT_APRON, APT_HELIPAD_1,
|
|
||||||
APT_APRON_FENCE_NE, APT_APRON, APT_APRON, APT_APRON, APT_APRON, APT_APRON, APT_RADAR_FENCE_SW,
|
|
||||||
APT_RUNWAY_END_FENCE_SE, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_END_FENCE_SE
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Tiles for Intercontinental Airport (vlarge) - 4 runways */
|
|
||||||
static const byte _airport_sections_intercontinental[] = {
|
|
||||||
APT_RADAR_FENCE_NE, APT_RUNWAY_END_FENCE_NE_NW, APT_RUNWAY_FENCE_NW, APT_RUNWAY_FENCE_NW, APT_RUNWAY_FENCE_NW, APT_RUNWAY_FENCE_NW, APT_RUNWAY_FENCE_NW, APT_RUNWAY_FENCE_NW, APT_RUNWAY_END_FENCE_NW_SW,
|
|
||||||
APT_RUNWAY_END_FENCE_NE_NW, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_END_FENCE_SE_SW, APT_APRON_FENCE_NE_SW,
|
|
||||||
APT_APRON_FENCE_NE, APT_SMALL_BUILDING_1, APT_APRON_FENCE_NE, APT_APRON, APT_APRON, APT_APRON, APT_APRON, APT_RADIO_TOWER_FENCE_NE, APT_APRON_FENCE_NE_SW,
|
|
||||||
APT_APRON_FENCE_NE, APT_APRON_HALF_EAST, APT_APRON_FENCE_NE, APT_TOWER, APT_HELIPAD_2, APT_HELIPAD_2, APT_APRON, APT_APRON_FENCE_NW, APT_APRON_FENCE_SW,
|
|
||||||
APT_APRON_FENCE_NE, APT_APRON, APT_APRON, APT_STAND, APT_BUILDING_1, APT_STAND, APT_APRON, APT_LOW_BUILDING, APT_DEPOT_SE,
|
|
||||||
APT_DEPOT_SE, APT_LOW_BUILDING, APT_APRON, APT_STAND, APT_BUILDING_2, APT_STAND, APT_APRON, APT_APRON, APT_APRON_FENCE_SW,
|
|
||||||
APT_APRON_FENCE_NE, APT_APRON, APT_APRON, APT_STAND, APT_BUILDING_3, APT_STAND, APT_APRON, APT_APRON, APT_APRON_FENCE_SW,
|
|
||||||
APT_APRON_FENCE_NE, APT_APRON_FENCE_SE, APT_APRON, APT_STAND, APT_ROUND_TERMINAL, APT_STAND, APT_APRON_FENCE_SW, APT_APRON_HALF_WEST, APT_APRON_FENCE_SW,
|
|
||||||
APT_APRON_FENCE_NE, APT_GRASS_FENCE_NE_FLAG_2, APT_APRON_FENCE_NE, APT_APRON, APT_APRON, APT_APRON, APT_APRON_FENCE_SW, APT_EMPTY, APT_APRON_FENCE_NE_SW,
|
|
||||||
APT_APRON_FENCE_NE, APT_RUNWAY_END_FENCE_NE_NW, APT_RUNWAY_FENCE_NW, APT_RUNWAY_FENCE_NW, APT_RUNWAY_FENCE_NW, APT_RUNWAY_FENCE_NW, APT_RUNWAY_FENCE_NW, APT_RUNWAY_FENCE_NW, APT_RUNWAY_END_FENCE_SE_SW,
|
|
||||||
APT_RUNWAY_END_FENCE_NE_SE, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_END_FENCE_SE_SW, APT_EMPTY
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/** Tiles for Commuter Airfield (small) */
|
|
||||||
static const byte _airport_sections_commuter[] = {
|
|
||||||
APT_TOWER, APT_BUILDING_3, APT_HELIPAD_2_FENCE_NW, APT_HELIPAD_2_FENCE_NW, APT_DEPOT_SE,
|
|
||||||
APT_APRON_FENCE_NE, APT_APRON, APT_APRON, APT_APRON, APT_APRON_FENCE_SW,
|
|
||||||
APT_APRON_FENCE_NE, APT_STAND, APT_STAND, APT_STAND, APT_APRON_FENCE_SW,
|
|
||||||
APT_RUNWAY_END_FENCE_SE, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_2, APT_RUNWAY_END_FENCE_SE
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Tiles for Heliport */
|
|
||||||
static const byte _airport_sections_heliport[] = {
|
|
||||||
APT_HELIPORT,
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Tiles for Helidepot */
|
|
||||||
static const byte _airport_sections_helidepot[] = {
|
|
||||||
APT_LOW_BUILDING_FENCE_N, APT_DEPOT_SE,
|
|
||||||
APT_HELIPAD_2_FENCE_NE_SE, APT_APRON_FENCE_SE_SW
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Tiles for Helistation */
|
|
||||||
static const byte _airport_sections_helistation[] = {
|
|
||||||
APT_DEPOT_SE, APT_LOW_BUILDING_FENCE_NW, APT_HELIPAD_3_FENCE_NW, APT_HELIPAD_3_FENCE_NW_SW,
|
|
||||||
APT_APRON_FENCE_NE_SE, APT_APRON_FENCE_SE, APT_APRON_FENCE_SE, APT_HELIPAD_3_FENCE_SE_SW
|
|
||||||
};
|
|
||||||
|
|
||||||
const byte * const _airport_sections[] = {
|
|
||||||
_airport_sections_country, // Country Airfield (small)
|
|
||||||
_airport_sections_town, // City Airport (large)
|
|
||||||
_airport_sections_heliport, // Heliport
|
|
||||||
_airport_sections_metropolitan, // Metropolitain Airport (large)
|
|
||||||
_airport_sections_international, // International Airport (xlarge)
|
|
||||||
_airport_sections_commuter, // Commuter Airport (small)
|
|
||||||
_airport_sections_helidepot, // Helidepot
|
|
||||||
_airport_sections_intercontinental, // Intercontinental Airport (xxlarge)
|
|
||||||
_airport_sections_helistation, // Helistation
|
|
||||||
};
|
|
||||||
|
|
||||||
assert_compile(NUM_AIRPORTS == lengthof(_airport_sections));
|
|
||||||
|
|
||||||
/* Uncomment this to print out a full report of the airport-structure
|
/* Uncomment this to print out a full report of the airport-structure
|
||||||
* You should either use
|
* You should either use
|
||||||
@ -244,12 +155,7 @@ void InitializeAirports()
|
|||||||
_airport_entries_dummy,
|
_airport_entries_dummy,
|
||||||
AirportFTAClass::ALL,
|
AirportFTAClass::ALL,
|
||||||
_airport_fta_dummy,
|
_airport_fta_dummy,
|
||||||
NULL,
|
0
|
||||||
0,
|
|
||||||
0, 0, 0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
MAX_YEAR + 1, MAX_YEAR + 1
|
|
||||||
);
|
);
|
||||||
|
|
||||||
_country_airport = new AirportFTAClass(
|
_country_airport = new AirportFTAClass(
|
||||||
@ -259,12 +165,7 @@ void InitializeAirports()
|
|||||||
_airport_entries_country,
|
_airport_entries_country,
|
||||||
AirportFTAClass::ALL | AirportFTAClass::SHORT_STRIP,
|
AirportFTAClass::ALL | AirportFTAClass::SHORT_STRIP,
|
||||||
_airport_fta_country,
|
_airport_fta_country,
|
||||||
_airport_depots_country,
|
0
|
||||||
lengthof(_airport_depots_country),
|
|
||||||
4, 3, 3,
|
|
||||||
0,
|
|
||||||
4,
|
|
||||||
0, 1959
|
|
||||||
);
|
);
|
||||||
|
|
||||||
_city_airport = new AirportFTAClass(
|
_city_airport = new AirportFTAClass(
|
||||||
@ -274,12 +175,7 @@ void InitializeAirports()
|
|||||||
_airport_entries_city,
|
_airport_entries_city,
|
||||||
AirportFTAClass::ALL,
|
AirportFTAClass::ALL,
|
||||||
_airport_fta_city,
|
_airport_fta_city,
|
||||||
_airport_depots_city,
|
0
|
||||||
lengthof(_airport_depots_city),
|
|
||||||
6, 6, 5,
|
|
||||||
0,
|
|
||||||
5,
|
|
||||||
1955, MAX_YEAR
|
|
||||||
);
|
);
|
||||||
|
|
||||||
_metropolitan_airport = new AirportFTAClass(
|
_metropolitan_airport = new AirportFTAClass(
|
||||||
@ -289,12 +185,7 @@ void InitializeAirports()
|
|||||||
_airport_entries_metropolitan,
|
_airport_entries_metropolitan,
|
||||||
AirportFTAClass::ALL,
|
AirportFTAClass::ALL,
|
||||||
_airport_fta_metropolitan,
|
_airport_fta_metropolitan,
|
||||||
_airport_depots_metropolitan,
|
0
|
||||||
lengthof(_airport_depots_metropolitan),
|
|
||||||
6, 6, 8,
|
|
||||||
0,
|
|
||||||
6,
|
|
||||||
1980, MAX_YEAR
|
|
||||||
);
|
);
|
||||||
|
|
||||||
_international_airport = new AirportFTAClass(
|
_international_airport = new AirportFTAClass(
|
||||||
@ -304,12 +195,7 @@ void InitializeAirports()
|
|||||||
_airport_entries_international,
|
_airport_entries_international,
|
||||||
AirportFTAClass::ALL,
|
AirportFTAClass::ALL,
|
||||||
_airport_fta_international,
|
_airport_fta_international,
|
||||||
_airport_depots_international,
|
0
|
||||||
lengthof(_airport_depots_international),
|
|
||||||
7, 7, 17,
|
|
||||||
0,
|
|
||||||
8,
|
|
||||||
1990, MAX_YEAR
|
|
||||||
);
|
);
|
||||||
|
|
||||||
_intercontinental_airport = new AirportFTAClass(
|
_intercontinental_airport = new AirportFTAClass(
|
||||||
@ -319,12 +205,7 @@ void InitializeAirports()
|
|||||||
_airport_entries_intercontinental,
|
_airport_entries_intercontinental,
|
||||||
AirportFTAClass::ALL,
|
AirportFTAClass::ALL,
|
||||||
_airport_fta_intercontinental,
|
_airport_fta_intercontinental,
|
||||||
_airport_depots_intercontinental,
|
0
|
||||||
lengthof(_airport_depots_intercontinental),
|
|
||||||
9, 11, 25,
|
|
||||||
0,
|
|
||||||
10,
|
|
||||||
2002, MAX_YEAR
|
|
||||||
);
|
);
|
||||||
|
|
||||||
_heliport = new AirportFTAClass(
|
_heliport = new AirportFTAClass(
|
||||||
@ -334,12 +215,7 @@ void InitializeAirports()
|
|||||||
_airport_entries_heliport_oilrig,
|
_airport_entries_heliport_oilrig,
|
||||||
AirportFTAClass::HELICOPTERS,
|
AirportFTAClass::HELICOPTERS,
|
||||||
_airport_fta_heliport_oilrig,
|
_airport_fta_heliport_oilrig,
|
||||||
NULL,
|
60
|
||||||
0,
|
|
||||||
1, 1, 1,
|
|
||||||
60,
|
|
||||||
4,
|
|
||||||
1963, MAX_YEAR
|
|
||||||
);
|
);
|
||||||
|
|
||||||
_oilrig = new AirportFTAClass(
|
_oilrig = new AirportFTAClass(
|
||||||
@ -349,12 +225,7 @@ void InitializeAirports()
|
|||||||
_airport_entries_heliport_oilrig,
|
_airport_entries_heliport_oilrig,
|
||||||
AirportFTAClass::HELICOPTERS,
|
AirportFTAClass::HELICOPTERS,
|
||||||
_airport_fta_heliport_oilrig,
|
_airport_fta_heliport_oilrig,
|
||||||
NULL,
|
54
|
||||||
0,
|
|
||||||
1, 1, 0,
|
|
||||||
54,
|
|
||||||
3,
|
|
||||||
MAX_YEAR + 1, MAX_YEAR + 1
|
|
||||||
);
|
);
|
||||||
|
|
||||||
_commuter_airport = new AirportFTAClass(
|
_commuter_airport = new AirportFTAClass(
|
||||||
@ -364,12 +235,7 @@ void InitializeAirports()
|
|||||||
_airport_entries_commuter,
|
_airport_entries_commuter,
|
||||||
AirportFTAClass::ALL | AirportFTAClass::SHORT_STRIP,
|
AirportFTAClass::ALL | AirportFTAClass::SHORT_STRIP,
|
||||||
_airport_fta_commuter,
|
_airport_fta_commuter,
|
||||||
_airport_depots_commuter,
|
0
|
||||||
lengthof(_airport_depots_commuter),
|
|
||||||
5, 4, 4,
|
|
||||||
0,
|
|
||||||
4,
|
|
||||||
1983, MAX_YEAR
|
|
||||||
);
|
);
|
||||||
|
|
||||||
_heli_depot = new AirportFTAClass(
|
_heli_depot = new AirportFTAClass(
|
||||||
@ -379,12 +245,7 @@ void InitializeAirports()
|
|||||||
_airport_entries_helidepot,
|
_airport_entries_helidepot,
|
||||||
AirportFTAClass::HELICOPTERS,
|
AirportFTAClass::HELICOPTERS,
|
||||||
_airport_fta_helidepot,
|
_airport_fta_helidepot,
|
||||||
_airport_depots_helidepot,
|
0
|
||||||
lengthof(_airport_depots_helidepot),
|
|
||||||
2, 2, 2,
|
|
||||||
0,
|
|
||||||
4,
|
|
||||||
1976, MAX_YEAR
|
|
||||||
);
|
);
|
||||||
|
|
||||||
_heli_station = new AirportFTAClass(
|
_heli_station = new AirportFTAClass(
|
||||||
@ -394,12 +255,7 @@ void InitializeAirports()
|
|||||||
_airport_entries_helistation,
|
_airport_entries_helistation,
|
||||||
AirportFTAClass::HELICOPTERS,
|
AirportFTAClass::HELICOPTERS,
|
||||||
_airport_fta_helistation,
|
_airport_fta_helistation,
|
||||||
_airport_depots_helistation,
|
0
|
||||||
lengthof(_airport_depots_helistation),
|
|
||||||
4, 2, 3,
|
|
||||||
0,
|
|
||||||
4,
|
|
||||||
1980, MAX_YEAR
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -435,31 +291,15 @@ AirportFTAClass::AirportFTAClass(
|
|||||||
const byte *entry_points_,
|
const byte *entry_points_,
|
||||||
Flags flags_,
|
Flags flags_,
|
||||||
const AirportFTAbuildup *apFA,
|
const AirportFTAbuildup *apFA,
|
||||||
const TileIndexDiffC *depots_,
|
byte delta_z_
|
||||||
const byte nof_depots_,
|
|
||||||
uint size_x_,
|
|
||||||
uint size_y_,
|
|
||||||
byte noise_level_,
|
|
||||||
byte delta_z_,
|
|
||||||
byte catchment_,
|
|
||||||
Year first_available_,
|
|
||||||
Year last_available_
|
|
||||||
) :
|
) :
|
||||||
moving_data(moving_data_),
|
moving_data(moving_data_),
|
||||||
terminals(terminals_),
|
terminals(terminals_),
|
||||||
helipads(helipads_),
|
helipads(helipads_),
|
||||||
airport_depots(depots_),
|
|
||||||
flags(flags_),
|
flags(flags_),
|
||||||
nof_depots(nof_depots_),
|
|
||||||
nofelements(AirportGetNofElements(apFA)),
|
nofelements(AirportGetNofElements(apFA)),
|
||||||
entry_points(entry_points_),
|
entry_points(entry_points_),
|
||||||
size_x(size_x_),
|
delta_z(delta_z_)
|
||||||
size_y(size_y_),
|
|
||||||
noise_level(noise_level_),
|
|
||||||
delta_z(delta_z_),
|
|
||||||
catchment(catchment_),
|
|
||||||
first_available(first_available_),
|
|
||||||
last_available(last_available_)
|
|
||||||
{
|
{
|
||||||
byte nofterminalgroups, nofhelipadgroups;
|
byte nofterminalgroups, nofhelipadgroups;
|
||||||
|
|
||||||
@ -519,11 +359,11 @@ AirportFTAClass::~AirportFTAClass()
|
|||||||
free(layout);
|
free(layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AirportFTAClass::IsAvailable() const
|
bool AirportSpec::IsAvailable() const
|
||||||
{
|
{
|
||||||
if (_cur_year < this->first_available) return false;
|
if (_cur_year < this->min_year) return false;
|
||||||
if (_settings_game.station.never_expire_airports) return true;
|
if (_settings_game.station.never_expire_airports) return true;
|
||||||
return _cur_year <= this->last_available;
|
return _cur_year <= this->max_year;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get the number of elements of a source Airport state automata
|
/** Get the number of elements of a source Airport state automata
|
||||||
|
@ -40,6 +40,40 @@ enum {
|
|||||||
AT_DUMMY = 255
|
AT_DUMMY = 255
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Copy from station_map.h */
|
||||||
|
typedef byte StationGfx;
|
||||||
|
|
||||||
|
struct AirportTileTable {
|
||||||
|
TileIndexDiffC ti;
|
||||||
|
StationGfx gfx;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the data structure for an airport.
|
||||||
|
*/
|
||||||
|
struct AirportSpec {
|
||||||
|
const AirportTileTable * const *table; ///< list of the tiles composing the airport
|
||||||
|
const TileIndexDiffC *depot_table; ///< gives the position of the depots on the airports
|
||||||
|
byte nof_depots; ///< the number of depots in this airport
|
||||||
|
byte size_x; ///< size of airport in x direction
|
||||||
|
byte size_y; ///< size of airport in y direction
|
||||||
|
byte noise_level; ///< noise that this airport generates
|
||||||
|
byte catchment; ///< catchment area of this airport
|
||||||
|
Year min_year; ///< first year the airport is available
|
||||||
|
Year max_year; ///< last year the airport is available
|
||||||
|
|
||||||
|
static AirportSpec *Get(byte type)
|
||||||
|
{
|
||||||
|
assert(type < NUM_AIRPORTS);
|
||||||
|
extern AirportSpec _origin_airport_specs[NUM_AIRPORTS];
|
||||||
|
return &_origin_airport_specs[type];
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsAvailable() const;
|
||||||
|
|
||||||
|
static AirportSpec dummy;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
AMED_NOSPDCLAMP = 1 << 0,
|
AMED_NOSPDCLAMP = 1 << 0,
|
||||||
@ -153,15 +187,7 @@ public:
|
|||||||
const byte *entry_points,
|
const byte *entry_points,
|
||||||
Flags flags,
|
Flags flags,
|
||||||
const AirportFTAbuildup *apFA,
|
const AirportFTAbuildup *apFA,
|
||||||
const TileIndexDiffC *depots,
|
byte delta_z
|
||||||
byte nof_depots,
|
|
||||||
uint size_x,
|
|
||||||
uint size_y,
|
|
||||||
uint8 noise_level,
|
|
||||||
byte delta_z,
|
|
||||||
byte catchment,
|
|
||||||
Year first_available,
|
|
||||||
Year last_available
|
|
||||||
);
|
);
|
||||||
|
|
||||||
~AirportFTAClass();
|
~AirportFTAClass();
|
||||||
@ -172,25 +198,14 @@ public:
|
|||||||
return &moving_data[position];
|
return &moving_data[position];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Is this airport available at this date? */
|
|
||||||
bool IsAvailable() const;
|
|
||||||
|
|
||||||
const AirportMovingData *moving_data;
|
const AirportMovingData *moving_data;
|
||||||
struct AirportFTA *layout; ///< state machine for airport
|
struct AirportFTA *layout; ///< state machine for airport
|
||||||
const byte *terminals;
|
const byte *terminals;
|
||||||
const byte *helipads;
|
const byte *helipads;
|
||||||
const TileIndexDiffC *airport_depots; ///< gives the position of the depots on the airports
|
|
||||||
Flags flags;
|
Flags flags;
|
||||||
byte nof_depots; ///< number of depots this airport has
|
|
||||||
byte nofelements; ///< number of positions the airport consists of
|
byte nofelements; ///< number of positions the airport consists of
|
||||||
const byte *entry_points; ///< when an airplane arrives at this airport, enter it at position entry_point, index depends on direction
|
const byte *entry_points; ///< when an airplane arrives at this airport, enter it at position entry_point, index depends on direction
|
||||||
byte size_x;
|
|
||||||
byte size_y;
|
|
||||||
uint8 noise_level; ///< noise that this airport generates
|
|
||||||
byte delta_z; ///< Z adjustment for helicopter pads
|
byte delta_z; ///< Z adjustment for helicopter pads
|
||||||
byte catchment;
|
|
||||||
Year first_available; ///< the year this airport becomes available
|
|
||||||
Year last_available; ///< the year this airport expires
|
|
||||||
};
|
};
|
||||||
|
|
||||||
DECLARE_ENUM_AS_BIT_SET(AirportFTAClass::Flags)
|
DECLARE_ENUM_AS_BIT_SET(AirportFTAClass::Flags)
|
||||||
|
@ -202,8 +202,8 @@ public:
|
|||||||
{
|
{
|
||||||
this->DrawWidgets();
|
this->DrawWidgets();
|
||||||
|
|
||||||
const AirportFTAClass *airport = GetAirport(_selected_airport_type);
|
const AirportSpec *as = AirportSpec::Get(_selected_airport_type);
|
||||||
int rad = _settings_game.station.modified_catchment ? airport->catchment : (uint)CA_UNMODIFIED;
|
int rad = _settings_game.station.modified_catchment ? as->catchment : (uint)CA_UNMODIFIED;
|
||||||
|
|
||||||
uint16 top = this->GetWidget<NWidgetBase>(BAW_BTN_DOHILIGHT)->pos_y + this->GetWidget<NWidgetBase>(BAW_BTN_DOHILIGHT)->current_y + WD_PAR_VSEP_NORMAL;
|
uint16 top = this->GetWidget<NWidgetBase>(BAW_BTN_DOHILIGHT)->pos_y + this->GetWidget<NWidgetBase>(BAW_BTN_DOHILIGHT)->current_y + WD_PAR_VSEP_NORMAL;
|
||||||
NWidgetBase *panel_nwi = this->GetWidget<NWidgetBase>(BAW_BOTTOMPANEL);
|
NWidgetBase *panel_nwi = this->GetWidget<NWidgetBase>(BAW_BOTTOMPANEL);
|
||||||
@ -212,7 +212,7 @@ public:
|
|||||||
/* only show the station (airport) noise, if the noise option is activated */
|
/* only show the station (airport) noise, if the noise option is activated */
|
||||||
if (_settings_game.economy.station_noise_level) {
|
if (_settings_game.economy.station_noise_level) {
|
||||||
/* show the noise of the selected airport */
|
/* show the noise of the selected airport */
|
||||||
SetDParam(0, airport->noise_level);
|
SetDParam(0, as->noise_level);
|
||||||
DrawString(panel_nwi->pos_x + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, top, STR_STATION_BUILD_NOISE);
|
DrawString(panel_nwi->pos_x + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, top, STR_STATION_BUILD_NOISE);
|
||||||
top += FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL;
|
top += FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL;
|
||||||
}
|
}
|
||||||
@ -232,10 +232,10 @@ public:
|
|||||||
_selected_airport_type = airport_id;
|
_selected_airport_type = airport_id;
|
||||||
this->LowerWidget(airport_id + BAW_SMALL_AIRPORT);
|
this->LowerWidget(airport_id + BAW_SMALL_AIRPORT);
|
||||||
|
|
||||||
const AirportFTAClass *airport = GetAirport(airport_id);
|
const AirportSpec *as = AirportSpec::Get(airport_id);
|
||||||
SetTileSelectSize(airport->size_x, airport->size_y);
|
SetTileSelectSize(as->size_x, as->size_y);
|
||||||
|
|
||||||
int rad = _settings_game.station.modified_catchment ? airport->catchment : (uint)CA_UNMODIFIED;
|
int rad = _settings_game.station.modified_catchment ? as->catchment : (uint)CA_UNMODIFIED;
|
||||||
if (_settings_client.gui.station_show_coverage) SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
|
if (_settings_client.gui.station_show_coverage) SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
|
||||||
|
|
||||||
this->SetDirty();
|
this->SetDirty();
|
||||||
@ -243,16 +243,16 @@ public:
|
|||||||
|
|
||||||
virtual void OnInvalidateData(int data = 0)
|
virtual void OnInvalidateData(int data = 0)
|
||||||
{
|
{
|
||||||
if (!GetAirport(_selected_airport_type)->IsAvailable()) {
|
if (!AirportSpec::Get(_selected_airport_type)->IsAvailable()) {
|
||||||
for (int i = 0; i < BAW_AIRPORT_COUNT; i++) {
|
for (int i = 0; i < BAW_AIRPORT_COUNT; i++) {
|
||||||
if (GetAirport(i)->IsAvailable()) {
|
if (AirportSpec::Get(i)->IsAvailable()) {
|
||||||
this->SelectOtherAirport(i);
|
this->SelectOtherAirport(i);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int i = 0; i < BAW_AIRPORT_COUNT; i++) {
|
for (int i = 0; i < BAW_AIRPORT_COUNT; i++) {
|
||||||
this->SetWidgetDisabledState(i + BAW_SMALL_AIRPORT, !GetAirport(i)->IsAvailable());
|
this->SetWidgetDisabledState(i + BAW_SMALL_AIRPORT, !AirportSpec::Get(i)->IsAvailable());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -510,7 +510,7 @@ CommandCost CmdInsertOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
|||||||
|
|
||||||
if (st == NULL || !CheckOwnership(st->owner) ||
|
if (st == NULL || !CheckOwnership(st->owner) ||
|
||||||
!CanVehicleUseStation(v, st) ||
|
!CanVehicleUseStation(v, st) ||
|
||||||
st->Airport()->nof_depots == 0) {
|
st->GetAirportSpec()->nof_depots == 0) {
|
||||||
return CMD_ERROR;
|
return CMD_ERROR;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -222,7 +222,7 @@ uint Station::GetCatchmentRadius() const
|
|||||||
if (this->truck_stops != NULL) ret = max<uint>(ret, CA_TRUCK);
|
if (this->truck_stops != NULL) ret = max<uint>(ret, CA_TRUCK);
|
||||||
if (this->train_station.tile != INVALID_TILE) ret = max<uint>(ret, CA_TRAIN);
|
if (this->train_station.tile != INVALID_TILE) ret = max<uint>(ret, CA_TRAIN);
|
||||||
if (this->dock_tile != INVALID_TILE) ret = max<uint>(ret, CA_DOCK);
|
if (this->dock_tile != INVALID_TILE) ret = max<uint>(ret, CA_DOCK);
|
||||||
if (this->airport_tile != INVALID_TILE) ret = max<uint>(ret, this->Airport()->catchment);
|
if (this->airport_tile != INVALID_TILE) ret = max<uint>(ret, this->GetAirportSpec()->catchment);
|
||||||
} else {
|
} else {
|
||||||
if (this->bus_stops != NULL || this->truck_stops != NULL || this->train_station.tile != INVALID_TILE || this->dock_tile != INVALID_TILE || this->airport_tile != INVALID_TILE) {
|
if (this->bus_stops != NULL || this->truck_stops != NULL || this->train_station.tile != INVALID_TILE || this->dock_tile != INVALID_TILE || this->airport_tile != INVALID_TILE) {
|
||||||
ret = CA_UNMODIFIED;
|
ret = CA_UNMODIFIED;
|
||||||
|
@ -66,6 +66,12 @@ public:
|
|||||||
return GetAirport(airport_type);
|
return GetAirport(airport_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const AirportSpec *GetAirportSpec() const
|
||||||
|
{
|
||||||
|
if (airport_tile == INVALID_TILE) return &AirportSpec::dummy;
|
||||||
|
return AirportSpec::Get(this->airport_type);
|
||||||
|
}
|
||||||
|
|
||||||
RoadStop *bus_stops; ///< All the road stops
|
RoadStop *bus_stops; ///< All the road stops
|
||||||
TileArea bus_station; ///< Tile area the bus 'station' part covers
|
TileArea bus_station; ///< Tile area the bus 'station' part covers
|
||||||
RoadStop *truck_stops; ///< All the truck stops
|
RoadStop *truck_stops; ///< All the truck stops
|
||||||
|
@ -62,10 +62,10 @@ bool IsHangar(TileIndex t)
|
|||||||
if (!IsAirport(t)) return false;
|
if (!IsAirport(t)) return false;
|
||||||
|
|
||||||
const Station *st = Station::GetByTile(t);
|
const Station *st = Station::GetByTile(t);
|
||||||
const AirportFTAClass *apc = st->Airport();
|
const AirportSpec *as = st->GetAirportSpec();
|
||||||
|
|
||||||
for (uint i = 0; i < apc->nof_depots; i++) {
|
for (uint i = 0; i < as->nof_depots; i++) {
|
||||||
if (st->airport_tile + ToTileIndexDiff(apc->airport_depots[i]) == t) return true;
|
if (st->airport_tile + ToTileIndexDiff(as->depot_table[i]) == t) return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -380,8 +380,8 @@ void Station::GetTileArea(TileArea *ta, StationType type) const
|
|||||||
|
|
||||||
case STATION_AIRPORT:
|
case STATION_AIRPORT:
|
||||||
ta->tile = this->airport_tile;
|
ta->tile = this->airport_tile;
|
||||||
ta->w = this->Airport()->size_x;
|
ta->w = this->GetAirportSpec()->size_x;
|
||||||
ta->h = this->Airport()->size_y;
|
ta->h = this->GetAirportSpec()->size_y;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case STATION_TRUCK:
|
case STATION_TRUCK:
|
||||||
@ -1795,12 +1795,12 @@ CommandCost CmdRemoveRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, ui
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Computes the minimal distance from town's xy to any airport's tile.
|
* Computes the minimal distance from town's xy to any airport's tile.
|
||||||
* @param afc airport's description
|
* @param as airport's description
|
||||||
* @param town_tile town's tile (t->xy)
|
* @param town_tile town's tile (t->xy)
|
||||||
* @param airport_tile st->airport_tile
|
* @param airport_tile st->airport_tile
|
||||||
* @return minimal manhattan distance from town_tile to any airport's tile
|
* @return minimal manhattan distance from town_tile to any airport's tile
|
||||||
*/
|
*/
|
||||||
static uint GetMinimalAirportDistanceToTile(const AirportFTAClass *afc, TileIndex town_tile, TileIndex airport_tile)
|
static uint GetMinimalAirportDistanceToTile(const AirportSpec *as, TileIndex town_tile, TileIndex airport_tile)
|
||||||
{
|
{
|
||||||
uint ttx = TileX(town_tile); // X, Y of town
|
uint ttx = TileX(town_tile); // X, Y of town
|
||||||
uint tty = TileY(town_tile);
|
uint tty = TileY(town_tile);
|
||||||
@ -1808,8 +1808,8 @@ static uint GetMinimalAirportDistanceToTile(const AirportFTAClass *afc, TileInde
|
|||||||
uint atx = TileX(airport_tile); // X, Y of northern airport corner
|
uint atx = TileX(airport_tile); // X, Y of northern airport corner
|
||||||
uint aty = TileY(airport_tile);
|
uint aty = TileY(airport_tile);
|
||||||
|
|
||||||
uint btx = TileX(airport_tile) + afc->size_x - 1; // X, Y of southern corner
|
uint btx = TileX(airport_tile) + as->size_x - 1; // X, Y of southern corner
|
||||||
uint bty = TileY(airport_tile) + afc->size_y - 1;
|
uint bty = TileY(airport_tile) + as->size_y - 1;
|
||||||
|
|
||||||
/* if ttx < atx, dx = atx - ttx
|
/* if ttx < atx, dx = atx - ttx
|
||||||
* if atx <= ttx <= btx, dx = 0
|
* if atx <= ttx <= btx, dx = 0
|
||||||
@ -1823,18 +1823,18 @@ static uint GetMinimalAirportDistanceToTile(const AirportFTAClass *afc, TileInde
|
|||||||
/** Get a possible noise reduction factor based on distance from town center.
|
/** Get a possible noise reduction factor based on distance from town center.
|
||||||
* The further you get, the less noise you generate.
|
* The further you get, the less noise you generate.
|
||||||
* So all those folks at city council can now happily slee... work in their offices
|
* So all those folks at city council can now happily slee... work in their offices
|
||||||
* @param afc AirportFTAClass pointer of the class being proposed
|
* @param as airport information
|
||||||
* @param town_tile TileIndex of town's center, the one who will receive the airport's candidature
|
* @param town_tile TileIndex of town's center, the one who will receive the airport's candidature
|
||||||
* @param tile TileIndex of northern tile of an airport (present or to-be-built), NOT the station tile
|
* @param tile TileIndex of northern tile of an airport (present or to-be-built), NOT the station tile
|
||||||
* @return the noise that will be generated, according to distance
|
* @return the noise that will be generated, according to distance
|
||||||
*/
|
*/
|
||||||
uint8 GetAirportNoiseLevelForTown(const AirportFTAClass *afc, TileIndex town_tile, TileIndex tile)
|
uint8 GetAirportNoiseLevelForTown(const AirportSpec *as, TileIndex town_tile, TileIndex tile)
|
||||||
{
|
{
|
||||||
/* 0 cannot be accounted, and 1 is the lowest that can be reduced from town.
|
/* 0 cannot be accounted, and 1 is the lowest that can be reduced from town.
|
||||||
* So no need to go any further*/
|
* So no need to go any further*/
|
||||||
if (afc->noise_level < 2) return afc->noise_level;
|
if (as->noise_level < 2) return as->noise_level;
|
||||||
|
|
||||||
uint distance = GetMinimalAirportDistanceToTile(afc, town_tile, tile);
|
uint distance = GetMinimalAirportDistanceToTile(as, town_tile, tile);
|
||||||
|
|
||||||
/* The steps for measuring noise reduction are based on the "magical" (and arbitrary) 8 base distance
|
/* The steps for measuring noise reduction are based on the "magical" (and arbitrary) 8 base distance
|
||||||
* adding the town_council_tolerance 4 times, as a way to graduate, depending of the tolerance.
|
* adding the town_council_tolerance 4 times, as a way to graduate, depending of the tolerance.
|
||||||
@ -1848,24 +1848,24 @@ uint8 GetAirportNoiseLevelForTown(const AirportFTAClass *afc, TileIndex town_til
|
|||||||
|
|
||||||
/* If the noise reduction equals the airport noise itself, don't give it for free.
|
/* If the noise reduction equals the airport noise itself, don't give it for free.
|
||||||
* Otherwise, simply reduce the airport's level. */
|
* Otherwise, simply reduce the airport's level. */
|
||||||
return noise_reduction >= afc->noise_level ? 1 : afc->noise_level - noise_reduction;
|
return noise_reduction >= as->noise_level ? 1 : as->noise_level - noise_reduction;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finds the town nearest to given airport. Based on minimal manhattan distance to any airport's tile.
|
* Finds the town nearest to given airport. Based on minimal manhattan distance to any airport's tile.
|
||||||
* If two towns have the same distance, town with lower index is returned.
|
* If two towns have the same distance, town with lower index is returned.
|
||||||
* @param afc airport's description
|
* @param as airport's description
|
||||||
* @param airport_tile st->airport_tile
|
* @param airport_tile st->airport_tile
|
||||||
* @return nearest town to airport
|
* @return nearest town to airport
|
||||||
*/
|
*/
|
||||||
Town *AirportGetNearestTown(const AirportFTAClass *afc, TileIndex airport_tile)
|
Town *AirportGetNearestTown(const AirportSpec *as, TileIndex airport_tile)
|
||||||
{
|
{
|
||||||
Town *t, *nearest = NULL;
|
Town *t, *nearest = NULL;
|
||||||
uint add = afc->size_x + afc->size_y - 2; // GetMinimalAirportDistanceToTile can differ from DistanceManhattan by this much
|
uint add = as->size_x + as->size_y - 2; // GetMinimalAirportDistanceToTile can differ from DistanceManhattan by this much
|
||||||
uint mindist = UINT_MAX - add; // prevent overflow
|
uint mindist = UINT_MAX - add; // prevent overflow
|
||||||
FOR_ALL_TOWNS(t) {
|
FOR_ALL_TOWNS(t) {
|
||||||
if (DistanceManhattan(t->xy, airport_tile) < mindist + add) { // avoid calling GetMinimalAirportDistanceToTile too often
|
if (DistanceManhattan(t->xy, airport_tile) < mindist + add) { // avoid calling GetMinimalAirportDistanceToTile too often
|
||||||
uint dist = GetMinimalAirportDistanceToTile(afc, t->xy, airport_tile);
|
uint dist = GetMinimalAirportDistanceToTile(as, t->xy, airport_tile);
|
||||||
if (dist < mindist) {
|
if (dist < mindist) {
|
||||||
nearest = t;
|
nearest = t;
|
||||||
mindist = dist;
|
mindist = dist;
|
||||||
@ -1887,9 +1887,9 @@ void UpdateAirportsNoise()
|
|||||||
|
|
||||||
FOR_ALL_STATIONS(st) {
|
FOR_ALL_STATIONS(st) {
|
||||||
if (st->airport_tile != INVALID_TILE) {
|
if (st->airport_tile != INVALID_TILE) {
|
||||||
const AirportFTAClass *afc = GetAirport(st->airport_type);
|
const AirportSpec *as = st->GetAirportSpec();
|
||||||
Town *nearest = AirportGetNearestTown(afc, st->airport_tile);
|
Town *nearest = AirportGetNearestTown(as, st->airport_tile);
|
||||||
nearest->noise_reached += GetAirportNoiseLevelForTown(afc, nearest->xy, st->airport_tile);
|
nearest->noise_reached += GetAirportNoiseLevelForTown(as, nearest->xy, st->airport_tile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1921,12 +1921,12 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Check if a valid, buildable airport was chosen for construction */
|
/* Check if a valid, buildable airport was chosen for construction */
|
||||||
const AirportFTAClass *afc = GetAirport(p1);
|
const AirportSpec *as = AirportSpec::Get(p1);
|
||||||
if (!afc->IsAvailable()) return CMD_ERROR;
|
if (!as->IsAvailable()) return CMD_ERROR;
|
||||||
|
|
||||||
Town *t = ClosestTownFromTile(tile, UINT_MAX);
|
Town *t = ClosestTownFromTile(tile, UINT_MAX);
|
||||||
int w = afc->size_x;
|
int w = as->size_x;
|
||||||
int h = afc->size_y;
|
int h = as->size_y;
|
||||||
|
|
||||||
if (w > _settings_game.station.station_spread || h > _settings_game.station.station_spread) {
|
if (w > _settings_game.station.station_spread || h > _settings_game.station.station_spread) {
|
||||||
_error_message = STR_ERROR_STATION_TOO_SPREAD_OUT;
|
_error_message = STR_ERROR_STATION_TOO_SPREAD_OUT;
|
||||||
@ -1937,8 +1937,8 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
|
|||||||
if (CmdFailed(cost)) return cost;
|
if (CmdFailed(cost)) return cost;
|
||||||
|
|
||||||
/* Go get the final noise level, that is base noise minus factor from distance to town center */
|
/* Go get the final noise level, that is base noise minus factor from distance to town center */
|
||||||
Town *nearest = AirportGetNearestTown(afc, tile);
|
Town *nearest = AirportGetNearestTown(as, tile);
|
||||||
uint newnoise_level = GetAirportNoiseLevelForTown(afc, nearest->xy, tile);
|
uint newnoise_level = GetAirportNoiseLevelForTown(as, nearest->xy, tile);
|
||||||
|
|
||||||
/* Check if local auth would allow a new airport */
|
/* Check if local auth would allow a new airport */
|
||||||
StringID authority_refuse_message = STR_NULL;
|
StringID authority_refuse_message = STR_NULL;
|
||||||
@ -1994,7 +1994,7 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
|
|||||||
st = new Station(tile);
|
st = new Station(tile);
|
||||||
|
|
||||||
st->town = t;
|
st->town = t;
|
||||||
st->string_id = GenerateStationName(st, tile, !(afc->flags & AirportFTAClass::AIRPLANES) ? STATIONNAMING_HELIPORT : STATIONNAMING_AIRPORT);
|
st->string_id = GenerateStationName(st, tile, !(GetAirport(p1)->flags & AirportFTAClass::AIRPLANES) ? STATIONNAMING_HELIPORT : STATIONNAMING_AIRPORT);
|
||||||
|
|
||||||
if (Company::IsValidID(_current_company)) {
|
if (Company::IsValidID(_current_company)) {
|
||||||
SetBit(st->town->have_ratings, _current_company);
|
SetBit(st->town->have_ratings, _current_company);
|
||||||
@ -2024,14 +2024,11 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
|
|||||||
*/
|
*/
|
||||||
if (airport_upgrade) UpdateAirplanesOnNewStation(st);
|
if (airport_upgrade) UpdateAirplanesOnNewStation(st);
|
||||||
|
|
||||||
{
|
const AirportTileTable *it = as->table[0];
|
||||||
const byte *b = _airport_sections[p1];
|
do {
|
||||||
|
TileIndex cur_tile = tile + ToTileIndexDiff(it->ti);
|
||||||
TILE_LOOP(tile_cur, w, h, tile) {
|
MakeAirport(cur_tile, st->owner, st->index, it->gfx);
|
||||||
MakeAirport(tile_cur, st->owner, st->index, *b);
|
} while ((++it)->ti.x != -0x80);
|
||||||
b++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
st->UpdateVirtCoord();
|
st->UpdateVirtCoord();
|
||||||
UpdateStationAcceptance(st, false);
|
UpdateStationAcceptance(st, false);
|
||||||
@ -2064,9 +2061,9 @@ static CommandCost RemoveAirport(TileIndex tile, DoCommandFlag flags)
|
|||||||
|
|
||||||
tile = st->airport_tile;
|
tile = st->airport_tile;
|
||||||
|
|
||||||
const AirportFTAClass *afc = st->Airport();
|
const AirportSpec *as = st->GetAirportSpec();
|
||||||
int w = afc->size_x;
|
int w = as->size_x;
|
||||||
int h = afc->size_y;
|
int h = as->size_y;
|
||||||
|
|
||||||
CommandCost cost(EXPENSES_CONSTRUCTION, w * h * _price[PR_CLEAR_STATION_AIRPORT]);
|
CommandCost cost(EXPENSES_CONSTRUCTION, w * h * _price[PR_CLEAR_STATION_AIRPORT]);
|
||||||
|
|
||||||
@ -2086,17 +2083,17 @@ static CommandCost RemoveAirport(TileIndex tile, DoCommandFlag flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
for (uint i = 0; i < afc->nof_depots; ++i) {
|
for (uint i = 0; i < as->nof_depots; ++i) {
|
||||||
DeleteWindowById(
|
DeleteWindowById(
|
||||||
WC_VEHICLE_DEPOT, tile + ToTileIndexDiff(afc->airport_depots[i])
|
WC_VEHICLE_DEPOT, tile + ToTileIndexDiff(as->depot_table[i])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Go get the final noise level, that is base noise minus factor from distance to town center.
|
/* Go get the final noise level, that is base noise minus factor from distance to town center.
|
||||||
* And as for construction, always remove it, even if the setting is not set, in order to avoid the
|
* And as for construction, always remove it, even if the setting is not set, in order to avoid the
|
||||||
* need of recalculation */
|
* need of recalculation */
|
||||||
Town *nearest = AirportGetNearestTown(afc, tile);
|
Town *nearest = AirportGetNearestTown(as, tile);
|
||||||
nearest->noise_reached -= GetAirportNoiseLevelForTown(afc, nearest->xy, tile);
|
nearest->noise_reached -= GetAirportNoiseLevelForTown(as, nearest->xy, tile);
|
||||||
|
|
||||||
st->rect.AfterRemoveRect(st, tile, w, h);
|
st->rect.AfterRemoveRect(st, tile, w, h);
|
||||||
|
|
||||||
|
400
src/table/airport_defaults.h
Normal file
400
src/table/airport_defaults.h
Normal file
@ -0,0 +1,400 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/** @file airport_defaults.h Tables with default values for airports and airport tiles. */
|
||||||
|
|
||||||
|
#ifndef AIRPORT_DEFAULTS_H
|
||||||
|
#define AIRPORT_DEFAULTS_H
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Definition of an airport tiles layout.
|
||||||
|
* @param x offset x of this tile
|
||||||
|
* @param y offset y of this tile
|
||||||
|
* @param m AirportGfx of the tile
|
||||||
|
* @see _airport_specs
|
||||||
|
* @see AirportTileTable
|
||||||
|
*/
|
||||||
|
#define MK(x, y, m) {{x, y}, m}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Terminator of airport tiles layout definition
|
||||||
|
*/
|
||||||
|
#define MKEND {{-0x80, 0}, 0}
|
||||||
|
|
||||||
|
/** Tiles for Country Airfield (small) */
|
||||||
|
static AirportTileTable _tile_table_country_0[] = {
|
||||||
|
MK(0, 0, APT_SMALL_BUILDING_1),
|
||||||
|
MK(1, 0, APT_SMALL_BUILDING_2),
|
||||||
|
MK(2, 0, APT_SMALL_BUILDING_3),
|
||||||
|
MK(3, 0, APT_SMALL_DEPOT_SE),
|
||||||
|
MK(0, 1, APT_GRASS_FENCE_NE_FLAG),
|
||||||
|
MK(1, 1, APT_GRASS_1),
|
||||||
|
MK(2, 1, APT_GRASS_2),
|
||||||
|
MK(3, 1, APT_GRASS_FENCE_SW),
|
||||||
|
MK(0, 2, APT_RUNWAY_SMALL_FAR_END),
|
||||||
|
MK(1, 2, APT_RUNWAY_SMALL_MIDDLE),
|
||||||
|
MK(2, 2, APT_RUNWAY_SMALL_MIDDLE),
|
||||||
|
MK(3, 2, APT_RUNWAY_SMALL_NEAR_END),
|
||||||
|
MKEND
|
||||||
|
};
|
||||||
|
|
||||||
|
static AirportTileTable *_tile_table_country[] = {
|
||||||
|
_tile_table_country_0,
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Tiles for Commuter Airfield (small) */
|
||||||
|
static AirportTileTable _tile_table_commuter_0[] = {
|
||||||
|
MK(0, 0, APT_TOWER),
|
||||||
|
MK(1, 0, APT_BUILDING_3),
|
||||||
|
MK(2, 0, APT_HELIPAD_2_FENCE_NW),
|
||||||
|
MK(3, 0, APT_HELIPAD_2_FENCE_NW),
|
||||||
|
MK(4, 0, APT_DEPOT_SE),
|
||||||
|
MK(0, 1, APT_APRON_FENCE_NE),
|
||||||
|
MK(1, 1, APT_APRON),
|
||||||
|
MK(2, 1, APT_APRON),
|
||||||
|
MK(3, 1, APT_APRON),
|
||||||
|
MK(4, 1, APT_APRON_FENCE_SW),
|
||||||
|
MK(0, 2, APT_APRON_FENCE_NE),
|
||||||
|
MK(1, 2, APT_STAND),
|
||||||
|
MK(2, 2, APT_STAND),
|
||||||
|
MK(3, 2, APT_STAND),
|
||||||
|
MK(4, 2, APT_APRON_FENCE_SW),
|
||||||
|
MK(0, 3, APT_RUNWAY_END_FENCE_SE),
|
||||||
|
MK(1, 3, APT_RUNWAY_2),
|
||||||
|
MK(2, 3, APT_RUNWAY_2),
|
||||||
|
MK(3, 3, APT_RUNWAY_2),
|
||||||
|
MK(4, 3, APT_RUNWAY_END_FENCE_SE),
|
||||||
|
MKEND
|
||||||
|
};
|
||||||
|
|
||||||
|
static AirportTileTable *_tile_table_commuter[] = {
|
||||||
|
_tile_table_commuter_0,
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Tiles for City Airport (large) */
|
||||||
|
static AirportTileTable _tile_table_city_0[] = {
|
||||||
|
MK(0, 0, APT_BUILDING_1),
|
||||||
|
MK(1, 0, APT_APRON_FENCE_NW),
|
||||||
|
MK(2, 0, APT_STAND_1),
|
||||||
|
MK(3, 0, APT_APRON_FENCE_NW),
|
||||||
|
MK(4, 0, APT_APRON_FENCE_NW),
|
||||||
|
MK(5, 0, APT_DEPOT_SE),
|
||||||
|
MK(0, 1, APT_BUILDING_2),
|
||||||
|
MK(1, 1, APT_PIER),
|
||||||
|
MK(2, 1, APT_ROUND_TERMINAL),
|
||||||
|
MK(3, 1, APT_STAND_PIER_NE),
|
||||||
|
MK(4, 1, APT_APRON),
|
||||||
|
MK(5, 1, APT_APRON_FENCE_SW),
|
||||||
|
MK(0, 2, APT_BUILDING_3),
|
||||||
|
MK(1, 2, APT_STAND),
|
||||||
|
MK(2, 2, APT_PIER_NW_NE),
|
||||||
|
MK(3, 2, APT_APRON_S),
|
||||||
|
MK(4, 2, APT_APRON_HOR),
|
||||||
|
MK(5, 2, APT_APRON_N_FENCE_SW),
|
||||||
|
MK(0, 3, APT_RADIO_TOWER_FENCE_NE),
|
||||||
|
MK(1, 3, APT_APRON_W),
|
||||||
|
MK(2, 3, APT_APRON_VER_CROSSING_S),
|
||||||
|
MK(3, 3, APT_APRON_HOR_CROSSING_E),
|
||||||
|
MK(4, 3, APT_ARPON_N),
|
||||||
|
MK(5, 3, APT_TOWER_FENCE_SW),
|
||||||
|
MK(0, 4, APT_EMPTY_FENCE_NE),
|
||||||
|
MK(1, 4, APT_APRON_S),
|
||||||
|
MK(2, 4, APT_APRON_HOR_CROSSING_W),
|
||||||
|
MK(3, 4, APT_APRON_VER_CROSSING_N),
|
||||||
|
MK(4, 4, APT_APRON_E),
|
||||||
|
MK(5, 4, APT_RADAR_GRASS_FENCE_SW),
|
||||||
|
MK(0, 5, APT_RUNWAY_END_FENCE_SE),
|
||||||
|
MK(1, 5, APT_RUNWAY_1),
|
||||||
|
MK(2, 5, APT_RUNWAY_2),
|
||||||
|
MK(3, 5, APT_RUNWAY_3),
|
||||||
|
MK(4, 5, APT_RUNWAY_4),
|
||||||
|
MK(5, 5, APT_RUNWAY_END_FENCE_SE),
|
||||||
|
MKEND
|
||||||
|
};
|
||||||
|
|
||||||
|
static AirportTileTable *_tile_table_city[] = {
|
||||||
|
_tile_table_city_0,
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Tiles for Metropolitain Airport (large) - 2 runways */
|
||||||
|
static AirportTileTable _tile_table_metropolitan_0[] = {
|
||||||
|
MK(0, 0, APT_BUILDING_1),
|
||||||
|
MK(1, 0, APT_APRON_FENCE_NW),
|
||||||
|
MK(2, 0, APT_STAND_1),
|
||||||
|
MK(3, 0, APT_APRON_FENCE_NW),
|
||||||
|
MK(4, 0, APT_APRON_FENCE_NW),
|
||||||
|
MK(5, 0, APT_DEPOT_SE),
|
||||||
|
MK(0, 1, APT_BUILDING_2),
|
||||||
|
MK(1, 1, APT_PIER),
|
||||||
|
MK(2, 1, APT_ROUND_TERMINAL),
|
||||||
|
MK(3, 1, APT_STAND_PIER_NE),
|
||||||
|
MK(4, 1, APT_APRON),
|
||||||
|
MK(5, 1, APT_APRON_FENCE_SW),
|
||||||
|
MK(0, 2, APT_BUILDING_3),
|
||||||
|
MK(1, 2, APT_STAND),
|
||||||
|
MK(2, 2, APT_PIER_NW_NE),
|
||||||
|
MK(3, 2, APT_APRON_S),
|
||||||
|
MK(4, 2, APT_APRON_HOR),
|
||||||
|
MK(5, 2, APT_APRON_N_FENCE_SW),
|
||||||
|
MK(0, 3, APT_RADAR_FENCE_NE),
|
||||||
|
MK(1, 3, APT_APRON),
|
||||||
|
MK(2, 3, APT_APRON),
|
||||||
|
MK(3, 3, APT_APRON),
|
||||||
|
MK(4, 3, APT_APRON),
|
||||||
|
MK(5, 3, APT_TOWER_FENCE_SW),
|
||||||
|
MK(0, 4, APT_RUNWAY_END),
|
||||||
|
MK(1, 4, APT_RUNWAY_5),
|
||||||
|
MK(2, 4, APT_RUNWAY_5),
|
||||||
|
MK(3, 4, APT_RUNWAY_5),
|
||||||
|
MK(4, 4, APT_RUNWAY_5),
|
||||||
|
MK(5, 4, APT_RUNWAY_END),
|
||||||
|
MK(0, 5, APT_RUNWAY_END_FENCE_SE),
|
||||||
|
MK(1, 5, APT_RUNWAY_2),
|
||||||
|
MK(2, 5, APT_RUNWAY_2),
|
||||||
|
MK(3, 5, APT_RUNWAY_2),
|
||||||
|
MK(4, 5, APT_RUNWAY_2),
|
||||||
|
MK(5, 5, APT_RUNWAY_END_FENCE_SE),
|
||||||
|
MKEND
|
||||||
|
};
|
||||||
|
|
||||||
|
static AirportTileTable *_tile_table_metropolitan[] = {
|
||||||
|
_tile_table_metropolitan_0,
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Tiles for International Airport (large) - 2 runways */
|
||||||
|
static AirportTileTable _tile_table_international_0[] = {
|
||||||
|
MK(0, 0, APT_RUNWAY_END_FENCE_NW),
|
||||||
|
MK(1, 0, APT_RUNWAY_FENCE_NW),
|
||||||
|
MK(2, 0, APT_RUNWAY_FENCE_NW),
|
||||||
|
MK(3, 0, APT_RUNWAY_FENCE_NW),
|
||||||
|
MK(4, 0, APT_RUNWAY_FENCE_NW),
|
||||||
|
MK(5, 0, APT_RUNWAY_FENCE_NW),
|
||||||
|
MK(6, 0, APT_RUNWAY_END_FENCE_NW),
|
||||||
|
MK(0, 1, APT_RADIO_TOWER_FENCE_NE),
|
||||||
|
MK(1, 1, APT_APRON),
|
||||||
|
MK(2, 1, APT_APRON),
|
||||||
|
MK(3, 1, APT_APRON),
|
||||||
|
MK(4, 1, APT_APRON),
|
||||||
|
MK(5, 1, APT_APRON),
|
||||||
|
MK(6, 1, APT_DEPOT_SE),
|
||||||
|
MK(0, 2, APT_BUILDING_3),
|
||||||
|
MK(1, 2, APT_APRON),
|
||||||
|
MK(2, 2, APT_STAND),
|
||||||
|
MK(3, 2, APT_BUILDING_2),
|
||||||
|
MK(4, 2, APT_STAND),
|
||||||
|
MK(5, 2, APT_APRON),
|
||||||
|
MK(6, 2, APT_APRON_FENCE_SW),
|
||||||
|
MK(0, 3, APT_DEPOT_SE),
|
||||||
|
MK(1, 3, APT_APRON),
|
||||||
|
MK(2, 3, APT_STAND),
|
||||||
|
MK(3, 3, APT_BUILDING_2),
|
||||||
|
MK(4, 3, APT_STAND),
|
||||||
|
MK(5, 3, APT_APRON),
|
||||||
|
MK(6, 3, APT_HELIPAD_1),
|
||||||
|
MK(0, 4, APT_APRON_FENCE_NE),
|
||||||
|
MK(1, 4, APT_APRON),
|
||||||
|
MK(2, 4, APT_STAND),
|
||||||
|
MK(3, 4, APT_TOWER),
|
||||||
|
MK(4, 4, APT_STAND),
|
||||||
|
MK(5, 4, APT_APRON),
|
||||||
|
MK(6, 4, APT_HELIPAD_1),
|
||||||
|
MK(0, 5, APT_APRON_FENCE_NE),
|
||||||
|
MK(1, 5, APT_APRON),
|
||||||
|
MK(2, 5, APT_APRON),
|
||||||
|
MK(3, 5, APT_APRON),
|
||||||
|
MK(4, 5, APT_APRON),
|
||||||
|
MK(5, 5, APT_APRON),
|
||||||
|
MK(6, 5, APT_RADAR_FENCE_SW),
|
||||||
|
MK(0, 6, APT_RUNWAY_END_FENCE_SE),
|
||||||
|
MK(1, 6, APT_RUNWAY_2),
|
||||||
|
MK(2, 6, APT_RUNWAY_2),
|
||||||
|
MK(3, 6, APT_RUNWAY_2),
|
||||||
|
MK(4, 6, APT_RUNWAY_2),
|
||||||
|
MK(5, 6, APT_RUNWAY_2),
|
||||||
|
MK(6, 6, APT_RUNWAY_END_FENCE_SE),
|
||||||
|
MKEND
|
||||||
|
};
|
||||||
|
|
||||||
|
static AirportTileTable *_tile_table_international[] = {
|
||||||
|
_tile_table_international_0,
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Tiles for International Airport (large) - 2 runways */
|
||||||
|
static AirportTileTable _tile_table_intercontinental_0[] = {
|
||||||
|
MK(0, 0, APT_RADAR_FENCE_NE),
|
||||||
|
MK(1, 0, APT_RUNWAY_END_FENCE_NE_NW),
|
||||||
|
MK(2, 0, APT_RUNWAY_FENCE_NW),
|
||||||
|
MK(3, 0, APT_RUNWAY_FENCE_NW),
|
||||||
|
MK(4, 0, APT_RUNWAY_FENCE_NW),
|
||||||
|
MK(5, 0, APT_RUNWAY_FENCE_NW),
|
||||||
|
MK(6, 0, APT_RUNWAY_FENCE_NW),
|
||||||
|
MK(7, 0, APT_RUNWAY_FENCE_NW),
|
||||||
|
MK(8, 0, APT_RUNWAY_END_FENCE_NW_SW),
|
||||||
|
MK(0, 1, APT_RUNWAY_END_FENCE_NE_NW),
|
||||||
|
MK(1, 1, APT_RUNWAY_2),
|
||||||
|
MK(2, 1, APT_RUNWAY_2),
|
||||||
|
MK(3, 1, APT_RUNWAY_2),
|
||||||
|
MK(4, 1, APT_RUNWAY_2),
|
||||||
|
MK(5, 1, APT_RUNWAY_2),
|
||||||
|
MK(6, 1, APT_RUNWAY_2),
|
||||||
|
MK(7, 1, APT_RUNWAY_END_FENCE_SE_SW),
|
||||||
|
MK(8, 1, APT_APRON_FENCE_NE_SW),
|
||||||
|
MK(0, 2, APT_APRON_FENCE_NE),
|
||||||
|
MK(1, 2, APT_SMALL_BUILDING_1),
|
||||||
|
MK(2, 2, APT_APRON_FENCE_NE),
|
||||||
|
MK(3, 2, APT_APRON),
|
||||||
|
MK(4, 2, APT_APRON),
|
||||||
|
MK(5, 2, APT_APRON),
|
||||||
|
MK(6, 2, APT_APRON),
|
||||||
|
MK(7, 2, APT_RADIO_TOWER_FENCE_NE),
|
||||||
|
MK(8, 2, APT_APRON_FENCE_NE_SW),
|
||||||
|
MK(0, 3, APT_APRON_FENCE_NE),
|
||||||
|
MK(1, 3, APT_APRON_HALF_EAST),
|
||||||
|
MK(2, 3, APT_APRON_FENCE_NE),
|
||||||
|
MK(3, 3, APT_TOWER),
|
||||||
|
MK(4, 3, APT_HELIPAD_2),
|
||||||
|
MK(5, 3, APT_HELIPAD_2),
|
||||||
|
MK(6, 3, APT_APRON),
|
||||||
|
MK(7, 3, APT_APRON_FENCE_NW),
|
||||||
|
MK(8, 3, APT_APRON_FENCE_SW),
|
||||||
|
MK(0, 4, APT_APRON_FENCE_NE),
|
||||||
|
MK(1, 4, APT_APRON),
|
||||||
|
MK(2, 4, APT_APRON),
|
||||||
|
MK(3, 4, APT_STAND),
|
||||||
|
MK(4, 4, APT_BUILDING_1),
|
||||||
|
MK(5, 4, APT_STAND),
|
||||||
|
MK(6, 4, APT_APRON),
|
||||||
|
MK(7, 4, APT_LOW_BUILDING),
|
||||||
|
MK(8, 4, APT_DEPOT_SE),
|
||||||
|
MK(0, 5, APT_DEPOT_SE),
|
||||||
|
MK(1, 5, APT_LOW_BUILDING),
|
||||||
|
MK(2, 5, APT_APRON),
|
||||||
|
MK(3, 5, APT_STAND),
|
||||||
|
MK(4, 5, APT_BUILDING_2),
|
||||||
|
MK(5, 5, APT_STAND),
|
||||||
|
MK(6, 5, APT_APRON),
|
||||||
|
MK(7, 5, APT_APRON),
|
||||||
|
MK(8, 5, APT_APRON_FENCE_SW),
|
||||||
|
MK(0, 6, APT_APRON_FENCE_NE),
|
||||||
|
MK(1, 6, APT_APRON),
|
||||||
|
MK(2, 6, APT_APRON),
|
||||||
|
MK(3, 6, APT_STAND),
|
||||||
|
MK(4, 6, APT_BUILDING_3),
|
||||||
|
MK(5, 6, APT_STAND),
|
||||||
|
MK(6, 6, APT_APRON),
|
||||||
|
MK(7, 6, APT_APRON),
|
||||||
|
MK(8, 6, APT_APRON_FENCE_SW),
|
||||||
|
MK(0, 7, APT_APRON_FENCE_NE),
|
||||||
|
MK(1, 7, APT_APRON_FENCE_SE),
|
||||||
|
MK(2, 7, APT_APRON),
|
||||||
|
MK(3, 7, APT_STAND),
|
||||||
|
MK(4, 7, APT_ROUND_TERMINAL),
|
||||||
|
MK(5, 7, APT_STAND),
|
||||||
|
MK(6, 7, APT_APRON_FENCE_SW),
|
||||||
|
MK(7, 7, APT_APRON_HALF_WEST),
|
||||||
|
MK(8, 7, APT_APRON_FENCE_SW),
|
||||||
|
MK(0, 8, APT_APRON_FENCE_NE),
|
||||||
|
MK(1, 8, APT_GRASS_FENCE_NE_FLAG_2),
|
||||||
|
MK(2, 8, APT_APRON_FENCE_NE),
|
||||||
|
MK(3, 8, APT_APRON),
|
||||||
|
MK(4, 8, APT_APRON),
|
||||||
|
MK(5, 8, APT_APRON),
|
||||||
|
MK(6, 8, APT_APRON_FENCE_SW),
|
||||||
|
MK(7, 8, APT_EMPTY),
|
||||||
|
MK(8, 8, APT_APRON_FENCE_NE_SW),
|
||||||
|
MK(0, 9, APT_APRON_FENCE_NE),
|
||||||
|
MK(1, 9, APT_RUNWAY_END_FENCE_NE_NW),
|
||||||
|
MK(2, 9, APT_RUNWAY_FENCE_NW),
|
||||||
|
MK(3, 9, APT_RUNWAY_FENCE_NW),
|
||||||
|
MK(4, 9, APT_RUNWAY_FENCE_NW),
|
||||||
|
MK(5, 9, APT_RUNWAY_FENCE_NW),
|
||||||
|
MK(6, 9, APT_RUNWAY_FENCE_NW),
|
||||||
|
MK(7, 9, APT_RUNWAY_FENCE_NW),
|
||||||
|
MK(8, 9, APT_RUNWAY_END_FENCE_SE_SW),
|
||||||
|
MK(0, 10, APT_RUNWAY_END_FENCE_NE_SE),
|
||||||
|
MK(1, 10, APT_RUNWAY_2),
|
||||||
|
MK(2, 10, APT_RUNWAY_2),
|
||||||
|
MK(3, 10, APT_RUNWAY_2),
|
||||||
|
MK(4, 10, APT_RUNWAY_2),
|
||||||
|
MK(5, 10, APT_RUNWAY_2),
|
||||||
|
MK(6, 10, APT_RUNWAY_2),
|
||||||
|
MK(7, 10, APT_RUNWAY_END_FENCE_SE_SW),
|
||||||
|
MK(8, 10, APT_EMPTY),
|
||||||
|
MKEND
|
||||||
|
};
|
||||||
|
|
||||||
|
static AirportTileTable *_tile_table_intercontinental[] = {
|
||||||
|
_tile_table_intercontinental_0,
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Tiles for Heliport */
|
||||||
|
static AirportTileTable _tile_table_heliport_0[] = {
|
||||||
|
MK(0, 0, APT_HELIPORT),
|
||||||
|
MKEND
|
||||||
|
};
|
||||||
|
|
||||||
|
static AirportTileTable *_tile_table_heliport[] = {
|
||||||
|
_tile_table_heliport_0,
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Tiles for Helidepot */
|
||||||
|
static AirportTileTable _tile_table_helidepot_0[] = {
|
||||||
|
MK(0, 0, APT_LOW_BUILDING_FENCE_N),
|
||||||
|
MK(1, 0, APT_DEPOT_SE),
|
||||||
|
MK(0, 1, APT_HELIPAD_2_FENCE_NE_SE),
|
||||||
|
MK(1, 1, APT_APRON_FENCE_SE_SW),
|
||||||
|
MKEND
|
||||||
|
};
|
||||||
|
|
||||||
|
static AirportTileTable *_tile_table_helidepot[] = {
|
||||||
|
_tile_table_helidepot_0,
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Tiles for Helistation */
|
||||||
|
static AirportTileTable _tile_table_helistation_0[] = {
|
||||||
|
MK(0, 0, APT_DEPOT_SE),
|
||||||
|
MK(1, 0, APT_LOW_BUILDING_FENCE_NW),
|
||||||
|
MK(2, 0, APT_HELIPAD_3_FENCE_NW),
|
||||||
|
MK(3, 0, APT_HELIPAD_3_FENCE_NW_SW),
|
||||||
|
MK(0, 1, APT_APRON_FENCE_NE_SE),
|
||||||
|
MK(1, 1, APT_APRON_FENCE_SE),
|
||||||
|
MK(2, 1, APT_APRON_FENCE_SE),
|
||||||
|
MK(3, 1, APT_HELIPAD_3_FENCE_SE_SW),
|
||||||
|
MKEND
|
||||||
|
};
|
||||||
|
|
||||||
|
static AirportTileTable *_tile_table_helistation[] = {
|
||||||
|
_tile_table_helistation_0,
|
||||||
|
};
|
||||||
|
|
||||||
|
#undef MK
|
||||||
|
#undef MKEND
|
||||||
|
|
||||||
|
/** General AirportSpec definition. */
|
||||||
|
#define AS_GENERIC(att, depot_tbl, num_depots, size_x, size_y, noise, catchment, min_year, max_year) \
|
||||||
|
{att, depot_tbl, num_depots, size_x, size_y, noise, catchment, min_year, max_year}
|
||||||
|
|
||||||
|
/** AirportSpec definition for airports without any depot. */
|
||||||
|
#define AS_ND(ap_name, size_x, size_y, min_year, max_year, catchment, noise) \
|
||||||
|
AS_GENERIC(_tile_table_##ap_name, NULL, 0, size_x, size_y, noise, catchment, min_year, max_year)
|
||||||
|
|
||||||
|
/** AirportSpec definition for airports with at least one depot. */
|
||||||
|
#define AS(ap_name, size_x, size_y, min_year, max_year, catchment, noise) \
|
||||||
|
AS_GENERIC(_tile_table_##ap_name, _airport_depots_##ap_name, lengthof(_airport_depots_##ap_name), size_x, size_y, noise, catchment, min_year, max_year)
|
||||||
|
|
||||||
|
AirportSpec _origin_airport_specs[NUM_AIRPORTS] = {
|
||||||
|
AS(country, 4, 3, 0, 1959, 4, 3),
|
||||||
|
AS(city, 6, 6, 1960, MAX_YEAR, 5, 5),
|
||||||
|
AS_ND(heliport, 1, 1, 1963, MAX_YEAR, 4, 1),
|
||||||
|
AS(metropolitan, 6, 6, 1980, MAX_YEAR, 6, 8),
|
||||||
|
AS(international, 7, 7, 1990, MAX_YEAR, 8, 17),
|
||||||
|
AS(commuter, 5, 4, 1983, MAX_YEAR, 4, 4),
|
||||||
|
AS(helidepot, 2, 2, 1976, MAX_YEAR, 4, 2),
|
||||||
|
AS(intercontinental, 9, 11, 2002, MAX_YEAR, 10, 25),
|
||||||
|
AS(helistation, 4, 2, 1980, MAX_YEAR, 4, 3),
|
||||||
|
};
|
||||||
|
|
||||||
|
#undef AS
|
||||||
|
#undef AS_ND
|
||||||
|
#undef AS_GENERIC
|
||||||
|
|
||||||
|
#endif /* AIRPORT_DEFAULTS_H */
|
@ -732,10 +732,10 @@ static void FloodVehicles(TileIndex tile)
|
|||||||
|
|
||||||
if (IsTileType(tile, MP_STATION) && IsAirport(tile)) {
|
if (IsTileType(tile, MP_STATION) && IsAirport(tile)) {
|
||||||
const Station *st = Station::GetByTile(tile);
|
const Station *st = Station::GetByTile(tile);
|
||||||
const AirportFTAClass *airport = st->Airport();
|
const AirportSpec *as = st->GetAirportSpec();
|
||||||
z = 1 + airport->delta_z;
|
z = 1 + st->Airport()->delta_z;
|
||||||
for (uint x = 0; x < airport->size_x; x++) {
|
for (uint x = 0; x < as->size_x; x++) {
|
||||||
for (uint y = 0; y < airport->size_y; y++) {
|
for (uint y = 0; y < as->size_y; y++) {
|
||||||
tile = TILE_ADDXY(st->airport_tile, x, y);
|
tile = TILE_ADDXY(st->airport_tile, x, y);
|
||||||
FindVehicleOnPos(tile, &z, &FloodVehicleProc);
|
FindVehicleOnPos(tile, &z, &FloodVehicleProc);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user