diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 89bb0ad4d1..0d6fc4d143 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -1209,12 +1209,12 @@ static bool HandleCrashedAircraft(Aircraft *v) /* remove rubble of crashed airplane */ /* clear runway-in on all airports, set by crashing plane - * small airports use AIRPORT_BUSY, city airports use RUNWAY_IN_OUT_block, etc. + * small airports use AIRPORT_BUSY, city airports use AirportBlock::RunwayInOut, etc. * but they all share the same number */ if (st != nullptr) { - CLRBITS(st->airport.flags, RUNWAY_IN_block); - CLRBITS(st->airport.flags, RUNWAY_IN_OUT_block); // commuter airport - CLRBITS(st->airport.flags, RUNWAY_IN2_block); // intercontinental + st->airport.blocks.Reset(AirportBlock::RunwayIn); + st->airport.blocks.Reset(AirportBlock::RunwayInOut); // commuter airport + st->airport.blocks.Reset(AirportBlock::RunwayIn2); // intercontinental } delete v; @@ -1663,8 +1663,8 @@ static void AircraftEventHandler_Flying(Aircraft *v, const AirportFTAClass *apc) Station *st = Station::Get(v->targetairport); /* Runway busy, not allowed to use this airstation or closed, circle. */ - if (CanVehicleUseStation(v, st) && (st->owner == OWNER_NONE || st->owner == v->owner) && !(st->airport.flags & AIRPORT_CLOSED_block)) { - /* {32,FLYING,NOTHING_block,37}, {32,LANDING,N,33}, {32,HELILANDING,N,41}, + if (CanVehicleUseStation(v, st) && (st->owner == OWNER_NONE || st->owner == v->owner) && !st->airport.blocks.Test(AirportBlock::AirportClosed)) { + /* {32,FLYING,AirportBlock::Nothing,37}, {32,LANDING,N,33}, {32,HELILANDING,N,41}, * if it is an airplane, look for LANDING, for helicopter HELILANDING * it is possible to choose from multiple landing runways, so loop until a free one is found */ uint8_t landingtype = (v->subtype == AIR_HELICOPTER) ? HELILANDING : LANDING; @@ -1683,7 +1683,7 @@ static void AircraftEventHandler_Flying(Aircraft *v, const AirportFTAClass *apc) * if there are multiple runways, plane won't know which one it took (because * they all have heading LANDING). And also occupy that block! */ v->pos = current->next_position; - SETBITS(st->airport.flags, apc->layout[v->pos].block); + st->airport.blocks.Set(apc->layout[v->pos].blocks); return; } v->cur_speed = tcur_speed; @@ -1784,10 +1784,10 @@ static AircraftStateHandler * const _aircraft_state_handlers[] = { static void AirportClearBlock(const Aircraft *v, const AirportFTAClass *apc) { /* we have left the previous block, and entered the new one. Free the previous block */ - if (apc->layout[v->previous_pos].block != apc->layout[v->pos].block) { + if (apc->layout[v->previous_pos].blocks != apc->layout[v->pos].blocks) { Station *st = Station::Get(v->targetairport); - CLRBITS(st->airport.flags, apc->layout[v->previous_pos].block); + st->airport.blocks.Reset(apc->layout[v->previous_pos].blocks); } } @@ -1857,16 +1857,16 @@ static bool AirportHasBlock(Aircraft *v, const AirportFTA *current_pos, const Ai const AirportFTA *next = &apc->layout[current_pos->next_position]; /* same block, then of course we can move */ - if (apc->layout[current_pos->position].block != next->block) { + if (apc->layout[current_pos->position].blocks != next->blocks) { const Station *st = Station::Get(v->targetairport); - uint64_t airport_flags = next->block; + AirportBlocks blocks = next->blocks; /* check additional possible extra blocks */ - if (current_pos != reference && current_pos->block != NOTHING_block) { - airport_flags |= current_pos->block; + if (current_pos != reference && current_pos->blocks != AirportBlock::Nothing) { + blocks.Set(current_pos->blocks); } - if (st->airport.flags & airport_flags) { + if (st->airport.blocks.Any(blocks)) { v->cur_speed = 0; v->subspeed = 0; return true; @@ -1888,15 +1888,15 @@ static bool AirportSetBlocks(Aircraft *v, const AirportFTA *current_pos, const A const AirportFTA *reference = &apc->layout[v->pos]; /* if the next position is in another block, check it and wait until it is free */ - if ((apc->layout[current_pos->position].block & next->block) != next->block) { - uint64_t airport_flags = next->block; + if (!apc->layout[current_pos->position].blocks.All(next->blocks)) { + AirportBlocks blocks = next->blocks; /* search for all all elements in the list with the same state, and blocks != N * this means more blocks should be checked/set */ const AirportFTA *current = current_pos; if (current == reference) current = current->next.get(); while (current != nullptr) { - if (current->heading == current_pos->heading && current->block != 0) { - airport_flags |= current->block; + if (current->heading == current_pos->heading && current->blocks.Any()) { + blocks.Set(current->blocks); break; } current = current->next.get(); @@ -1904,17 +1904,17 @@ static bool AirportSetBlocks(Aircraft *v, const AirportFTA *current_pos, const A /* if the block to be checked is in the next position, then exclude that from * checking, because it has been set by the airplane before */ - if (current_pos->block == next->block) airport_flags ^= next->block; + if (current_pos->blocks == next->blocks) blocks.Flip(next->blocks); Station *st = Station::Get(v->targetairport); - if (st->airport.flags & airport_flags) { + if (st->airport.blocks.Any(blocks)) { v->cur_speed = 0; v->subspeed = 0; return false; } - if (next->block != NOTHING_block) { - SETBITS(st->airport.flags, airport_flags); // occupy next block + if (next->blocks != AirportBlock::Nothing) { + st->airport.blocks.Set(blocks); // occupy next block } } return true; @@ -1926,22 +1926,22 @@ static bool AirportSetBlocks(Aircraft *v, const AirportFTA *current_pos, const A */ struct MovementTerminalMapping { AirportMovementStates state; ///< Aircraft movement state when going to this terminal. - uint64_t airport_flag; ///< Bitmask in the airport flags that need to be free for this terminal. + AirportBlock blocks; ///< Bitmask in the airport flags that need to be free for this terminal. }; /** A list of all valid terminals and their associated blocks. */ static const MovementTerminalMapping _airport_terminal_mapping[] = { - {TERM1, TERM1_block}, - {TERM2, TERM2_block}, - {TERM3, TERM3_block}, - {TERM4, TERM4_block}, - {TERM5, TERM5_block}, - {TERM6, TERM6_block}, - {TERM7, TERM7_block}, - {TERM8, TERM8_block}, - {HELIPAD1, HELIPAD1_block}, - {HELIPAD2, HELIPAD2_block}, - {HELIPAD3, HELIPAD3_block}, + {TERM1, AirportBlock::Term1}, + {TERM2, AirportBlock::Term2}, + {TERM3, AirportBlock::Term3}, + {TERM4, AirportBlock::Term4}, + {TERM5, AirportBlock::Term5}, + {TERM6, AirportBlock::Term6}, + {TERM7, AirportBlock::Term7}, + {TERM8, AirportBlock::Term8}, + {HELIPAD1, AirportBlock::Helipad1}, + {HELIPAD2, AirportBlock::Helipad2}, + {HELIPAD3, AirportBlock::Helipad3}, }; /** @@ -1956,10 +1956,10 @@ static bool FreeTerminal(Aircraft *v, uint8_t i, uint8_t last_terminal) assert(last_terminal <= lengthof(_airport_terminal_mapping)); Station *st = Station::Get(v->targetairport); for (; i < last_terminal; i++) { - if ((st->airport.flags & _airport_terminal_mapping[i].airport_flag) == 0) { + if (!st->airport.blocks.Any(_airport_terminal_mapping[i].blocks)) { /* TERMINAL# HELIPAD# */ v->state = _airport_terminal_mapping[i].state; // start moving to that terminal/helipad - SETBITS(st->airport.flags, _airport_terminal_mapping[i].airport_flag); // occupy terminal/helipad + st->airport.blocks.Set(_airport_terminal_mapping[i].blocks); // occupy terminal/helipad return true; } } @@ -1989,11 +1989,11 @@ static uint GetNumTerminals(const AirportFTAClass *apc) static bool AirportFindFreeTerminal(Aircraft *v, const AirportFTAClass *apc) { /* example of more terminalgroups - * {0,HANGAR,NOTHING_block,1}, {0,TERMGROUP,TERM_GROUP1_block,0}, {0,TERMGROUP,TERM_GROUP2_ENTER_block,1}, {0,0,N,1}, + * {0,HANGAR,AirportBlock::Nothing,1}, {0,TERMGROUP,AirportBlock::TermGroup1,0}, {0,TERMGROUP,TERM_GROUP2_ENTER_block,1}, {0,0,N,1}, * Heading TERMGROUP denotes a group. We see 2 groups here: - * 1. group 0 -- TERM_GROUP1_block (check block) + * 1. group 0 -- AirportBlock::TermGroup1 (check block) * 2. group 1 -- TERM_GROUP2_ENTER_block (check block) - * First in line is checked first, group 0. If the block (TERM_GROUP1_block) is free, it + * First in line is checked first, group 0. If the block (AirportBlock::TermGroup1) is free, it * looks at the corresponding terminals of that group. If no free ones are found, other * possible groups are checked (in this case group 1, since that is after group 0). If that * fails, then attempt fails and plane waits @@ -2004,7 +2004,7 @@ static bool AirportFindFreeTerminal(Aircraft *v, const AirportFTAClass *apc) while (temp != nullptr) { if (temp->heading == TERMGROUP) { - if (!(st->airport.flags & temp->block)) { + if (!st->airport.blocks.Any(temp->blocks)) { /* read which group do we want to go to? * (the first free group) */ uint target_group = temp->next_position + 1; diff --git a/src/airport.cpp b/src/airport.cpp index 21fa384323..8eb34a0af4 100644 --- a/src/airport.cpp +++ b/src/airport.cpp @@ -149,7 +149,7 @@ static uint16_t AirportGetNofElements(const AirportFTAbuildup *apFA) return nofelements; } -AirportFTA::AirportFTA(const AirportFTAbuildup &buildup) : block(buildup.block), position(buildup.position), next_position(buildup.next), heading(buildup.heading) +AirportFTA::AirportFTA(const AirportFTAbuildup &buildup) : blocks(buildup.blocks), position(buildup.position), next_position(buildup.next), heading(buildup.heading) { } diff --git a/src/airport.h b/src/airport.h index da347daa47..c04da890d6 100644 --- a/src/airport.h +++ b/src/airport.h @@ -85,47 +85,49 @@ enum AirportMovementStates : uint8_t { }; /** Movement Blocks on Airports blocks (eg_airport_flags). */ -static const uint64_t - TERM1_block = 1ULL << 0, ///< Block belonging to terminal 1. - TERM2_block = 1ULL << 1, ///< Block belonging to terminal 2. - TERM3_block = 1ULL << 2, ///< Block belonging to terminal 3. - TERM4_block = 1ULL << 3, ///< Block belonging to terminal 4. - TERM5_block = 1ULL << 4, ///< Block belonging to terminal 5. - TERM6_block = 1ULL << 5, ///< Block belonging to terminal 6. - HELIPAD1_block = 1ULL << 6, ///< Block belonging to helipad 1. - HELIPAD2_block = 1ULL << 7, ///< Block belonging to helipad 2. - RUNWAY_IN_OUT_block = 1ULL << 8, - RUNWAY_IN_block = 1ULL << 8, - AIRPORT_BUSY_block = 1ULL << 8, - RUNWAY_OUT_block = 1ULL << 9, - TAXIWAY_BUSY_block = 1ULL << 10, - OUT_WAY_block = 1ULL << 11, - IN_WAY_block = 1ULL << 12, - AIRPORT_ENTRANCE_block = 1ULL << 13, - TERM_GROUP1_block = 1ULL << 14, - TERM_GROUP2_block = 1ULL << 15, - HANGAR2_AREA_block = 1ULL << 16, - TERM_GROUP2_ENTER1_block = 1ULL << 17, - TERM_GROUP2_ENTER2_block = 1ULL << 18, - TERM_GROUP2_EXIT1_block = 1ULL << 19, - TERM_GROUP2_EXIT2_block = 1ULL << 20, - PRE_HELIPAD_block = 1ULL << 21, +enum class AirportBlock : uint8_t { + Term1 = 0, ///< Block belonging to terminal 1. + Term2 = 1, ///< Block belonging to terminal 2. + Term3 = 2, ///< Block belonging to terminal 3. + Term4 = 3, ///< Block belonging to terminal 4. + Term5 = 4, ///< Block belonging to terminal 5. + Term6 = 5, ///< Block belonging to terminal 6. + Helipad1 = 6, ///< Block belonging to helipad 1. + Helipad2 = 7, ///< Block belonging to helipad 2. + RunwayInOut = 8, + RunwayIn = 8, + AirportBusy = 8, + RunwayOut = 9, + TaxiwayBusy = 10, + OutWay = 11, + InWay = 12, + AirportEntrance = 13, + TermGroup1 = 14, + TermGroup2 = 15, + Hangar2Area = 16, + TermGroup2Enter1 = 17, + TermGroup2Enter2 = 18, + TermGroup2Exit1 = 19, + TermGroup2Exit2 = 20, + PreHelipad = 21, /* blocks for new airports */ - TERM7_block = 1ULL << 22, ///< Block belonging to terminal 7. - TERM8_block = 1ULL << 23, ///< Block belonging to terminal 8. - HELIPAD3_block = 1ULL << 24, ///< Block belonging to helipad 3. - HANGAR1_AREA_block = 1ULL << 26, - OUT_WAY2_block = 1ULL << 27, - IN_WAY2_block = 1ULL << 28, - RUNWAY_IN2_block = 1ULL << 29, - RUNWAY_OUT2_block = 1ULL << 10, ///< @note re-uses #TAXIWAY_BUSY_block - HELIPAD_GROUP_block = 1ULL << 13, ///< @note re-uses #AIRPORT_ENTRANCE_block - OUT_WAY_block2 = 1ULL << 31, + Term7 = 22, ///< Block belonging to terminal 7. + Term8 = 23, ///< Block belonging to terminal 8. + Helipad3 = 24, ///< Block belonging to helipad 3. + Hangar1Area = 26, + OutWay2 = 27, + InWay2 = 28, + RunwayIn2 = 29, + RunwayOut2 = 10, ///< @note re-uses #AirportBlock::TaxiwayBusy + HelipadGroup = 13, ///< @note re-uses #AirportBlock::AirportEntrance + OutWay3 = 31, /* end of new blocks */ - NOTHING_block = 1ULL << 30, - AIRPORT_CLOSED_block = 1ULL << 63; ///< Dummy block for indicating a closed airport. + Nothing = 30, + AirportClosed = 63, ///< Dummy block for indicating a closed airport. +}; +using AirportBlocks = EnumBitSet; /** A single location on an airport where aircraft can move to. */ struct AirportMovingData { @@ -144,7 +146,7 @@ struct AirportFTA { AirportFTA(const AirportFTAbuildup&); std::unique_ptr next; ///< possible extra movement choices from this position - uint64_t block; ///< bitmap of blocks that could be reserved + AirportBlocks blocks; ///< bitmap of blocks that could be reserved uint8_t position; ///< the position that an airplane is at uint8_t next_position; ///< next position from this position uint8_t heading; ///< heading (current orders), guiding an airplane to its target on an airport diff --git a/src/disaster_vehicle.cpp b/src/disaster_vehicle.cpp index 12fd4adde3..e097060a7d 100644 --- a/src/disaster_vehicle.cpp +++ b/src/disaster_vehicle.cpp @@ -264,7 +264,7 @@ static bool DisasterTick_Zeppeliner(DisasterVehicle *v) if (IsValidTile(v->tile) && IsAirportTile(v->tile)) { Station *st = Station::GetByTile(v->tile); - CLRBITS(st->airport.flags, RUNWAY_IN_block); + st->airport.blocks.Reset(AirportBlock::RunwayIn); AI::NewEvent(GetTileOwner(v->tile), new ScriptEventDisasterZeppelinerCleared(st->index)); } @@ -301,7 +301,7 @@ static bool DisasterTick_Zeppeliner(DisasterVehicle *v) } if (IsValidTile(v->tile) && IsAirportTile(v->tile)) { - SETBITS(Station::GetByTile(v->tile)->airport.flags, RUNWAY_IN_block); + Station::GetByTile(v->tile)->airport.blocks.Set(AirportBlock::RunwayIn); } return true; diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index 8ae8e1e8af..1849ab711f 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -416,8 +416,8 @@ uint32_t Station::GetNewGRFVariable(const ResolverObject &object, uint8_t variab case 0xF1: return (this->airport.tile != INVALID_TILE) ? this->airport.GetSpec()->ttd_airport_type : ATP_TTDP_LARGE; case 0xF2: return (this->truck_stops != nullptr) ? this->truck_stops->status : 0; case 0xF3: return (this->bus_stops != nullptr) ? this->bus_stops->status : 0; - case 0xF6: return this->airport.flags; - case 0xF7: return GB(this->airport.flags, 8, 8); + case 0xF6: return this->airport.blocks.base(); + case 0xF7: return GB(this->airport.blocks.base(), 8, 8); } /* Handle cargo variables with parameter, 0x60 to 0x65 and 0x69 */ diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 7ca7b815f4..b3e3fdd48c 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -761,10 +761,10 @@ static const OldChunks station_chunk[] = { OCL_SVAR( OC_UINT8, Station, owner ), OCL_SVAR( OC_UINT8, Station, facilities ), OCL_SVAR( OC_TTD | OC_UINT8, Station, airport.type ), - OCL_SVAR( OC_TTO | OC_FILE_U16 | OC_VAR_U64, Station, airport.flags ), + OCL_SVAR( OC_TTO | OC_FILE_U16 | OC_VAR_U64, Station, airport.blocks ), OCL_NULL( 3 ), ///< bus/truck status, blocked months, no longer in use OCL_CNULL( OC_TTD, 1 ), ///< unknown - OCL_SVAR( OC_TTD | OC_FILE_U16 | OC_VAR_U64, Station, airport.flags ), + OCL_SVAR( OC_TTD | OC_FILE_U16 | OC_VAR_U64, Station, airport.blocks ), OCL_CNULL( OC_TTD, 2 ), ///< last_vehicle. now last_vehicle_type OCL_CNULL( OC_TTD, 4 ), ///< junk at end of chunk @@ -788,9 +788,9 @@ static bool LoadOldStation(LoadgameState *ls, int num) st->string_id = _old_string_id + 0x2800; // custom name } - if (HasBit(st->airport.flags, 8)) { + if (st->airport.blocks.Test(AirportBlock{8})) { st->airport.type = 1; // large airport - } else if (HasBit(st->airport.flags, 6)) { + } else if (st->airport.blocks.Test(AirportBlock{6})) { st->airport.type = 3; // oil rig } else { st->airport.type = 0; // small airport diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 5b5c26d522..f80ba9eac5 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -477,9 +477,9 @@ static const SaveLoad _old_station_desc[] = { SLE_VAR(Station, owner, SLE_UINT8), SLE_VAR(Station, facilities, SLE_UINT8), SLE_VAR(Station, airport.type, SLE_UINT8), - SLE_CONDVAR(Station, airport.flags, SLE_VAR_U64 | SLE_FILE_U16, SL_MIN_VERSION, SLV_3), - SLE_CONDVAR(Station, airport.flags, SLE_VAR_U64 | SLE_FILE_U32, SLV_3, SLV_46), - SLE_CONDVAR(Station, airport.flags, SLE_UINT64, SLV_46, SL_MAX_VERSION), + SLE_CONDVARNAME(Station, airport.blocks, "airport.flags", SLE_VAR_U64 | SLE_FILE_U16, SL_MIN_VERSION, SLV_3), + SLE_CONDVARNAME(Station, airport.blocks, "airport.flags", SLE_VAR_U64 | SLE_FILE_U32, SLV_3, SLV_46), + SLE_CONDVARNAME(Station, airport.blocks, "airport.flags", SLE_UINT64, SLV_46, SL_MAX_VERSION), SLE_CONDVAR(Station, last_vehicle_type, SLE_UINT8, SLV_26, SL_MAX_VERSION), @@ -608,7 +608,7 @@ public: SLE_CONDVAR(Station, airport.h, SLE_FILE_U8 | SLE_VAR_U16, SLV_140, SL_MAX_VERSION), SLE_VAR(Station, airport.type, SLE_UINT8), SLE_CONDVAR(Station, airport.layout, SLE_UINT8, SLV_145, SL_MAX_VERSION), - SLE_VAR(Station, airport.flags, SLE_UINT64), + SLE_VARNAME(Station, airport.blocks, "airport.flags", SLE_UINT64), SLE_CONDVAR(Station, airport.rotation, SLE_UINT8, SLV_145, SL_MAX_VERSION), SLEG_CONDARR("storage", _old_st_persistent_storage.storage, SLE_UINT32, 16, SLV_145, SLV_161), SLE_CONDREF(Station, airport.psa, REF_STORAGE, SLV_161, SL_MAX_VERSION), diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 504494391b..bf9be46fd1 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -166,7 +166,7 @@ void UpdateOldAircraft() { /* set airport_flags to 0 for all airports just to be sure */ for (Station *st : Station::Iterate()) { - st->airport.flags = 0; // reset airport + st->airport.blocks = {}; // reset airport } for (Aircraft *a : Aircraft::Iterate()) { diff --git a/src/script/api/script_station.cpp b/src/script/api/script_station.cpp index c65678e75e..11b04514a0 100644 --- a/src/script/api/script_station.cpp +++ b/src/script/api/script_station.cpp @@ -239,7 +239,7 @@ template EnforcePrecondition(false, IsValidStation(station_id)); EnforcePrecondition(false, HasStationType(station_id, STATION_AIRPORT)); - return (::Station::Get(station_id)->airport.flags & AIRPORT_CLOSED_block) != 0; + return ::Station::Get(station_id)->airport.blocks.Test(AirportBlock::AirportClosed); } /* static */ bool ScriptStation::OpenCloseAirport(StationID station_id) diff --git a/src/station_base.h b/src/station_base.h index 1e11e1e1de..4627f35674 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -347,7 +347,7 @@ private: struct Airport : public TileArea { Airport() : TileArea(INVALID_TILE, 0, 0) {} - uint64_t flags; ///< stores which blocks on the airport are taken. was 16 bit earlier on, then 32 + AirportBlocks blocks; ///< stores which blocks on the airport are taken. was 16 bit earlier on, then 32 uint8_t type; ///< Type of this airport, @see AirportTypes uint8_t layout; ///< Airport layout number. Direction rotation; ///< How this airport is rotated. diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 2e41bf7455..366934a1f7 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2609,7 +2609,7 @@ CommandCost CmdBuildAirport(DoCommandFlag flags, TileIndex tile, uint8_t airport st->AddFacility(StationFacility::Airport, tile); st->airport.type = airport_type; st->airport.layout = layout; - st->airport.flags = 0; + st->airport.blocks = {}; st->airport.rotation = rotation; st->rect.BeforeAddRect(tile, w, h, StationRect::ADD_TRY); @@ -2741,7 +2741,7 @@ CommandCost CmdOpenCloseAirport(DoCommandFlag flags, StationID station_id) if (ret.Failed()) return ret; if (flags & DC_EXEC) { - st->airport.flags ^= AIRPORT_CLOSED_block; + st->airport.blocks.Flip(AirportBlock::AirportClosed); SetWindowWidgetDirty(WC_STATION_VIEW, st->index, WID_SV_CLOSE_AIRPORT); } return CommandCost(); diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 89ef22b1a0..d904606819 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -1468,7 +1468,7 @@ struct StationViewWindow : public Window { this->SetWidgetDisabledState(WID_SV_SHIPS, !st->facilities.Test(StationFacility::Dock)); this->SetWidgetDisabledState(WID_SV_PLANES, !st->facilities.Test(StationFacility::Airport)); this->SetWidgetDisabledState(WID_SV_CLOSE_AIRPORT, !st->facilities.Test(StationFacility::Airport) || st->owner != _local_company || st->owner == OWNER_NONE); // Also consider SE, where _local_company == OWNER_NONE - this->SetWidgetLoweredState(WID_SV_CLOSE_AIRPORT, st->facilities.Test(StationFacility::Airport) && (st->airport.flags & AIRPORT_CLOSED_block) != 0); + this->SetWidgetLoweredState(WID_SV_CLOSE_AIRPORT, st->facilities.Test(StationFacility::Airport) && st->airport.blocks.Test(AirportBlock::AirportClosed)); extern const Station *_viewport_highlight_station; this->SetWidgetDisabledState(WID_SV_CATCHMENT, st->facilities == StationFacilities{}); diff --git a/src/table/airport_movement.h b/src/table/airport_movement.h index 10e213718a..e1f4e7c65e 100644 --- a/src/table/airport_movement.h +++ b/src/table/airport_movement.h @@ -10,6 +10,8 @@ #ifndef AIRPORT_MOVEMENT_H #define AIRPORT_MOVEMENT_H +#include "../airport.h" +#include "../newgrf_airport.h" /** * State machine input struct (from external file, etc.) @@ -18,7 +20,7 @@ struct AirportFTAbuildup { uint8_t position; ///< The position that an airplane is at. uint8_t heading; ///< The current orders (eg. TAKEOFF, HANGAR, ENDLANDING, etc.). - uint64_t block; ///< The block this position is on on the airport (st->airport.flags). + AirportBlocks blocks; ///< The block this position is on on the airport (st->airport.flags). uint8_t next; ///< Next position from this position. }; @@ -409,11 +411,11 @@ static const AirportMovingData _airport_moving_data_oilrig[9] = { /////**********Movement Machine on Airports*********************/////// static const uint8_t _airport_entries_dummy[] = {0, 1, 2, 3}; static const AirportFTAbuildup _airport_fta_dummy[] = { - { 0, TO_ALL, 0, 3}, - { 1, TO_ALL, 0, 0}, - { 2, TO_ALL, 0, 1}, - { 3, TO_ALL, 0, 2}, - { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE + { 0, TO_ALL, {}, 3}, + { 1, TO_ALL, {}, 0}, + { 2, TO_ALL, {}, 1}, + { 3, TO_ALL, {}, 2}, + { MAX_ELEMENTS, TO_ALL, {}, 0 } // end marker. DO NOT REMOVE }; /* First element of terminals array tells us how many depots there are (to know size of array) @@ -422,229 +424,229 @@ static const HangarTileTable _airport_depots_country[] = { {{3, 0}, DIR_SE, 0} } static const uint8_t _airport_terminal_country[] = {1, 2}; static const uint8_t _airport_entries_country[] = {16, 15, 18, 17}; static const AirportFTAbuildup _airport_fta_country[] = { - { 0, HANGAR, NOTHING_block, 1 }, - { 1, TERMGROUP, AIRPORT_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM1, TERM1_block, 2 }, { 1, TERM2, 0, 4 }, { 1, HELITAKEOFF, 0, 19 }, { 1, TO_ALL, 0, 6 }, - { 2, TERM1, TERM1_block, 1 }, - { 3, TERM2, TERM2_block, 5 }, - { 4, TERMGROUP, AIRPORT_BUSY_block, 0 }, { 4, TERM2, 0, 5 }, { 4, HANGAR, 0, 1 }, { 4, TAKEOFF, 0, 6 }, { 4, HELITAKEOFF, 0, 1 }, - { 5, TERMGROUP, AIRPORT_BUSY_block, 0 }, { 5, TERM2, TERM2_block, 3 }, { 5, TO_ALL, 0, 4 }, - { 6, 0, AIRPORT_BUSY_block, 7 }, + { 0, HANGAR, AirportBlock::Nothing, 1 }, + { 1, TERMGROUP, AirportBlock::AirportBusy, 0 }, { 1, HANGAR, {}, 0 }, { 1, TERM1, AirportBlock::Term1, 2 }, { 1, TERM2, {}, 4 }, { 1, HELITAKEOFF, {}, 19 }, { 1, TO_ALL, {}, 6 }, + { 2, TERM1, AirportBlock::Term1, 1 }, + { 3, TERM2, AirportBlock::Term2, 5 }, + { 4, TERMGROUP, AirportBlock::AirportBusy, 0 }, { 4, TERM2, {}, 5 }, { 4, HANGAR, {}, 1 }, { 4, TAKEOFF, {}, 6 }, { 4, HELITAKEOFF, {}, 1 }, + { 5, TERMGROUP, AirportBlock::AirportBusy, 0 }, { 5, TERM2, AirportBlock::Term2, 3 }, { 5, TO_ALL, {}, 4 }, + { 6, TO_ALL, AirportBlock::AirportBusy, 7 }, /* takeoff */ - { 7, TAKEOFF, AIRPORT_BUSY_block, 8 }, - { 8, STARTTAKEOFF, NOTHING_block, 9 }, - { 9, ENDTAKEOFF, NOTHING_block, 0 }, + { 7, TAKEOFF, AirportBlock::AirportBusy, 8 }, + { 8, STARTTAKEOFF, AirportBlock::Nothing, 9 }, + { 9, ENDTAKEOFF, AirportBlock::Nothing, 0 }, /* landing */ - { 10, FLYING, NOTHING_block, 15 }, { 10, LANDING, 0, 11 }, { 10, HELILANDING, 0, 20 }, - { 11, LANDING, AIRPORT_BUSY_block, 12 }, - { 12, TO_ALL, AIRPORT_BUSY_block, 13 }, - { 13, ENDLANDING, AIRPORT_BUSY_block, 14 }, { 13, TERM2, 0, 5 }, { 13, TO_ALL, 0, 14 }, - { 14, TO_ALL, AIRPORT_BUSY_block, 1 }, + { 10, FLYING, AirportBlock::Nothing, 15 }, { 10, LANDING, {}, 11 }, { 10, HELILANDING, {}, 20 }, + { 11, LANDING, AirportBlock::AirportBusy, 12 }, + { 12, TO_ALL, AirportBlock::AirportBusy, 13 }, + { 13, ENDLANDING, AirportBlock::AirportBusy, 14 }, { 13, TERM2, {}, 5 }, { 13, TO_ALL, {}, 14 }, + { 14, TO_ALL, AirportBlock::AirportBusy, 1 }, /* In air */ - { 15, TO_ALL, NOTHING_block, 16 }, - { 16, TO_ALL, NOTHING_block, 17 }, - { 17, TO_ALL, NOTHING_block, 18 }, - { 18, TO_ALL, NOTHING_block, 10 }, - { 19, HELITAKEOFF, NOTHING_block, 0 }, - { 20, HELILANDING, AIRPORT_BUSY_block, 21 }, - { 21, HELIENDLANDING, AIRPORT_BUSY_block, 1 }, - { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE + { 15, TO_ALL, AirportBlock::Nothing, 16 }, + { 16, TO_ALL, AirportBlock::Nothing, 17 }, + { 17, TO_ALL, AirportBlock::Nothing, 18 }, + { 18, TO_ALL, AirportBlock::Nothing, 10 }, + { 19, HELITAKEOFF, AirportBlock::Nothing, 0 }, + { 20, HELILANDING, AirportBlock::AirportBusy, 21 }, + { 21, HELIENDLANDING, AirportBlock::AirportBusy, 1 }, + { MAX_ELEMENTS, TO_ALL, {}, 0 } // end marker. DO NOT REMOVE }; static const HangarTileTable _airport_depots_commuter[] = { {{4, 0}, DIR_SE, 0} }; static const uint8_t _airport_terminal_commuter[] = { 1, 3 }; static const uint8_t _airport_entries_commuter[] = {22, 21, 24, 23}; static const AirportFTAbuildup _airport_fta_commuter[] = { - { 0, HANGAR, NOTHING_block, 1 }, { 0, HELITAKEOFF, TAXIWAY_BUSY_block, 1 }, { 0, TO_ALL, 0, 1 }, - { 1, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TAKEOFF, 0, 11 }, { 1, TERM1, TAXIWAY_BUSY_block, 10 }, { 1, TERM2, TAXIWAY_BUSY_block, 10 }, { 1, TERM3, TAXIWAY_BUSY_block, 10 }, { 1, HELIPAD1, TAXIWAY_BUSY_block, 10 }, { 1, HELIPAD2, TAXIWAY_BUSY_block, 10 }, { 1, HELITAKEOFF, TAXIWAY_BUSY_block, 37 }, { 1, TO_ALL, 0, 0 }, - { 2, TERMGROUP, AIRPORT_ENTRANCE_block, 2 }, { 2, HANGAR, 0, 8 }, { 2, TERM1, 0, 8 }, { 2, TERM2, 0, 8 }, { 2, TERM3, 0, 8 }, { 2, HELIPAD1, 0, 8 }, { 2, HELIPAD2, 0, 8 }, { 2, HELITAKEOFF, 0, 8 }, { 2, TO_ALL, 0, 2 }, - { 3, TERM1, TERM1_block, 8 }, { 3, HANGAR, 0, 8 }, { 3, TAKEOFF, 0, 8 }, { 3, TO_ALL, 0, 3 }, - { 4, TERM2, TERM2_block, 9 }, { 4, HANGAR, 0, 9 }, { 4, TAKEOFF, 0, 9 }, { 4, TO_ALL, 0, 4 }, - { 5, TERM3, TERM3_block, 10 }, { 5, HANGAR, 0, 10 }, { 5, TAKEOFF, 0, 10 }, { 5, TO_ALL, 0, 5 }, - { 6, HELIPAD1, HELIPAD1_block, 6 }, { 6, HANGAR, TAXIWAY_BUSY_block, 9 }, { 6, HELITAKEOFF, 0, 35 }, - { 7, HELIPAD2, HELIPAD2_block, 7 }, { 7, HANGAR, TAXIWAY_BUSY_block, 10 }, { 7, HELITAKEOFF, 0, 36 }, - { 8, TERMGROUP, TAXIWAY_BUSY_block, 8 }, { 8, TAKEOFF, TAXIWAY_BUSY_block, 9 }, { 8, HANGAR, TAXIWAY_BUSY_block, 9 }, { 8, TERM1, TERM1_block, 3 }, { 8, TO_ALL, TAXIWAY_BUSY_block, 9 }, - { 9, TERMGROUP, TAXIWAY_BUSY_block, 9 }, { 9, TAKEOFF, TAXIWAY_BUSY_block, 10 }, { 9, HANGAR, TAXIWAY_BUSY_block, 10 }, { 9, TERM2, TERM2_block, 4 }, { 9, HELIPAD1, HELIPAD1_block, 6 }, { 9, HELITAKEOFF, HELIPAD1_block, 6 }, { 9, TERM1, TAXIWAY_BUSY_block, 8 }, { 9, TO_ALL, TAXIWAY_BUSY_block, 10 }, - { 10, TERMGROUP, TAXIWAY_BUSY_block, 10 }, { 10, TERM3, TERM3_block, 5 }, { 10, HELIPAD1, 0, 9 }, { 10, HELIPAD2, HELIPAD2_block, 7 }, { 10, HELITAKEOFF, 0, 1 }, { 10, TAKEOFF, TAXIWAY_BUSY_block, 1 }, { 10, HANGAR, TAXIWAY_BUSY_block, 1 }, { 10, TO_ALL, TAXIWAY_BUSY_block, 9 }, - { 11, TO_ALL, OUT_WAY_block, 12 }, + { 0, HANGAR, AirportBlock::Nothing, 1 }, { 0, HELITAKEOFF, AirportBlock::TaxiwayBusy, 1 }, { 0, TO_ALL, {}, 1 }, + { 1, TERMGROUP, AirportBlock::TaxiwayBusy, 0 }, { 1, HANGAR, {}, 0 }, { 1, TAKEOFF, {}, 11 }, { 1, TERM1, AirportBlock::TaxiwayBusy, 10 }, { 1, TERM2, AirportBlock::TaxiwayBusy, 10 }, { 1, TERM3, AirportBlock::TaxiwayBusy, 10 }, { 1, HELIPAD1, AirportBlock::TaxiwayBusy, 10 }, { 1, HELIPAD2, AirportBlock::TaxiwayBusy, 10 }, { 1, HELITAKEOFF, AirportBlock::TaxiwayBusy, 37 }, { 1, TO_ALL, {}, 0 }, + { 2, TERMGROUP, AirportBlock::AirportEntrance, 2 }, { 2, HANGAR, {}, 8 }, { 2, TERM1, {}, 8 }, { 2, TERM2, {}, 8 }, { 2, TERM3, {}, 8 }, { 2, HELIPAD1, {}, 8 }, { 2, HELIPAD2, {}, 8 }, { 2, HELITAKEOFF, {}, 8 }, { 2, TO_ALL, {}, 2 }, + { 3, TERM1, AirportBlock::Term1, 8 }, { 3, HANGAR, {}, 8 }, { 3, TAKEOFF, {}, 8 }, { 3, TO_ALL, {}, 3 }, + { 4, TERM2, AirportBlock::Term2, 9 }, { 4, HANGAR, {}, 9 }, { 4, TAKEOFF, {}, 9 }, { 4, TO_ALL, {}, 4 }, + { 5, TERM3, AirportBlock::Term3, 10 }, { 5, HANGAR, {}, 10 }, { 5, TAKEOFF, {}, 10 }, { 5, TO_ALL, {}, 5 }, + { 6, HELIPAD1, AirportBlock::Helipad1, 6 }, { 6, HANGAR, AirportBlock::TaxiwayBusy, 9 }, { 6, HELITAKEOFF, {}, 35 }, + { 7, HELIPAD2, AirportBlock::Helipad2, 7 }, { 7, HANGAR, AirportBlock::TaxiwayBusy, 10 }, { 7, HELITAKEOFF, {}, 36 }, + { 8, TERMGROUP, AirportBlock::TaxiwayBusy, 8 }, { 8, TAKEOFF, AirportBlock::TaxiwayBusy, 9 }, { 8, HANGAR, AirportBlock::TaxiwayBusy, 9 }, { 8, TERM1, AirportBlock::Term1, 3 }, { 8, TO_ALL, AirportBlock::TaxiwayBusy, 9 }, + { 9, TERMGROUP, AirportBlock::TaxiwayBusy, 9 }, { 9, TAKEOFF, AirportBlock::TaxiwayBusy, 10 }, { 9, HANGAR, AirportBlock::TaxiwayBusy, 10 }, { 9, TERM2, AirportBlock::Term2, 4 }, { 9, HELIPAD1, AirportBlock::Helipad1, 6 }, { 9, HELITAKEOFF, AirportBlock::Helipad1, 6 }, { 9, TERM1, AirportBlock::TaxiwayBusy, 8 }, { 9, TO_ALL, AirportBlock::TaxiwayBusy, 10 }, + { 10, TERMGROUP, AirportBlock::TaxiwayBusy, 10 }, { 10, TERM3, AirportBlock::Term3, 5 }, { 10, HELIPAD1, {}, 9 }, { 10, HELIPAD2, AirportBlock::Helipad2, 7 }, { 10, HELITAKEOFF, {}, 1 }, { 10, TAKEOFF, AirportBlock::TaxiwayBusy, 1 }, { 10, HANGAR, AirportBlock::TaxiwayBusy, 1 }, { 10, TO_ALL, AirportBlock::TaxiwayBusy, 9 }, + { 11, TO_ALL, AirportBlock::OutWay, 12 }, /* takeoff */ - { 12, TAKEOFF, RUNWAY_IN_OUT_block, 13 }, - { 13, TO_ALL, RUNWAY_IN_OUT_block, 14 }, - { 14, STARTTAKEOFF, RUNWAY_IN_OUT_block, 15 }, - { 15, ENDTAKEOFF, NOTHING_block, 0 }, + { 12, TAKEOFF, AirportBlock::RunwayInOut, 13 }, + { 13, TO_ALL, AirportBlock::RunwayInOut, 14 }, + { 14, STARTTAKEOFF, AirportBlock::RunwayInOut, 15 }, + { 15, ENDTAKEOFF, AirportBlock::Nothing, 0 }, /* landing */ - { 16, FLYING, NOTHING_block, 21 }, { 16, LANDING, IN_WAY_block, 17 }, { 16, HELILANDING, 0, 25 }, - { 17, LANDING, RUNWAY_IN_OUT_block, 18 }, - { 18, TO_ALL, RUNWAY_IN_OUT_block, 19 }, - { 19, TO_ALL, RUNWAY_IN_OUT_block, 20 }, - { 20, ENDLANDING, IN_WAY_block, 2 }, + { 16, FLYING, AirportBlock::Nothing, 21 }, { 16, LANDING, AirportBlock::InWay, 17 }, { 16, HELILANDING, {}, 25 }, + { 17, LANDING, AirportBlock::RunwayInOut, 18 }, + { 18, TO_ALL, AirportBlock::RunwayInOut, 19 }, + { 19, TO_ALL, AirportBlock::RunwayInOut, 20 }, + { 20, ENDLANDING, AirportBlock::InWay, 2 }, /* In Air */ - { 21, TO_ALL, NOTHING_block, 22 }, - { 22, TO_ALL, NOTHING_block, 23 }, - { 23, TO_ALL, NOTHING_block, 24 }, - { 24, TO_ALL, NOTHING_block, 16 }, + { 21, TO_ALL, AirportBlock::Nothing, 22 }, + { 22, TO_ALL, AirportBlock::Nothing, 23 }, + { 23, TO_ALL, AirportBlock::Nothing, 24 }, + { 24, TO_ALL, AirportBlock::Nothing, 16 }, /* Helicopter -- stay in air in special place as a buffer to choose from helipads */ - { 25, HELILANDING, PRE_HELIPAD_block, 26 }, - { 26, HELIENDLANDING, PRE_HELIPAD_block, 26 }, { 26, HELIPAD1, 0, 27 }, { 26, HELIPAD2, 0, 28 }, { 26, HANGAR, 0, 33 }, - { 27, TO_ALL, NOTHING_block, 29 }, // helipad1 approach - { 28, TO_ALL, NOTHING_block, 30 }, + { 25, HELILANDING, AirportBlock::PreHelipad, 26 }, + { 26, HELIENDLANDING, AirportBlock::PreHelipad, 26 }, { 26, HELIPAD1, {}, 27 }, { 26, HELIPAD2, {}, 28 }, { 26, HANGAR, {}, 33 }, + { 27, TO_ALL, AirportBlock::Nothing, 29 }, // helipad1 approach + { 28, TO_ALL, AirportBlock::Nothing, 30 }, /* landing */ - { 29, TERMGROUP, NOTHING_block, 0 }, { 29, HELIPAD1, HELIPAD1_block, 6 }, - { 30, TERMGROUP, NOTHING_block, 0 }, { 30, HELIPAD2, HELIPAD2_block, 7 }, + { 29, TERMGROUP, AirportBlock::Nothing, 0 }, { 29, HELIPAD1, AirportBlock::Helipad1, 6 }, + { 30, TERMGROUP, AirportBlock::Nothing, 0 }, { 30, HELIPAD2, AirportBlock::Helipad2, 7 }, /* Helicopter -- takeoff */ - { 31, HELITAKEOFF, NOTHING_block, 0 }, - { 32, HELITAKEOFF, NOTHING_block, 0 }, - { 33, TO_ALL, TAXIWAY_BUSY_block, 34 }, // need to go to hangar when waiting in air - { 34, TO_ALL, TAXIWAY_BUSY_block, 1 }, - { 35, TO_ALL, HELIPAD1_block, 31 }, - { 36, TO_ALL, HELIPAD2_block, 32 }, - { 37, HELITAKEOFF, NOTHING_block, 0 }, - { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE + { 31, HELITAKEOFF, AirportBlock::Nothing, 0 }, + { 32, HELITAKEOFF, AirportBlock::Nothing, 0 }, + { 33, TO_ALL, AirportBlock::TaxiwayBusy, 34 }, // need to go to hangar when waiting in air + { 34, TO_ALL, AirportBlock::TaxiwayBusy, 1 }, + { 35, TO_ALL, AirportBlock::Helipad1, 31 }, + { 36, TO_ALL, AirportBlock::Helipad2, 32 }, + { 37, HELITAKEOFF, AirportBlock::Nothing, 0 }, + { MAX_ELEMENTS, TO_ALL, {}, 0 } // end marker. DO NOT REMOVE }; static const HangarTileTable _airport_depots_city[] = { {{5, 0}, DIR_SE, 0} }; static const uint8_t _airport_terminal_city[] = { 1, 3 }; static const uint8_t _airport_entries_city[] = {26, 29, 27, 28}; static const AirportFTAbuildup _airport_fta_city[] = { - { 0, HANGAR, NOTHING_block, 1 }, { 0, TAKEOFF, OUT_WAY_block, 1 }, { 0, TO_ALL, 0, 1 }, - { 1, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM2, 0, 6 }, { 1, TERM3, 0, 6 }, { 1, TO_ALL, 0, 7 }, // for all else, go to 7 - { 2, TERM1, TERM1_block, 7 }, { 2, TAKEOFF, OUT_WAY_block, 7 }, { 2, TO_ALL, 0, 7 }, - { 3, TERM2, TERM2_block, 5 }, { 3, TAKEOFF, OUT_WAY_block, 6 }, { 3, TO_ALL, 0, 6 }, - { 4, TERM3, TERM3_block, 5 }, { 4, TAKEOFF, OUT_WAY_block, 5 }, { 4, TO_ALL, 0, 5 }, - { 5, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 5, TERM2, TERM2_block, 3 }, { 5, TERM3, TERM3_block, 4 }, { 5, TO_ALL, 0, 6 }, - { 6, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 6, TERM2, TERM2_block, 3 }, { 6, TERM3, 0, 5 }, { 6, HANGAR, 0, 1 }, { 6, TO_ALL, 0, 7 }, - { 7, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 7, TERM1, TERM1_block, 2 }, { 7, TAKEOFF, OUT_WAY_block, 8 }, { 7, HELITAKEOFF, 0, 22 }, { 7, HANGAR, 0, 1 }, { 7, TO_ALL, 0, 6 }, - { 8, 0, OUT_WAY_block, 9 }, - { 9, 0, RUNWAY_IN_OUT_block, 10 }, + { 0, HANGAR, AirportBlock::Nothing, 1 }, { 0, TAKEOFF, AirportBlock::OutWay, 1 }, { 0, TO_ALL, {}, 1 }, + { 1, TERMGROUP, AirportBlock::TaxiwayBusy, 0 }, { 1, HANGAR, {}, 0 }, { 1, TERM2, {}, 6 }, { 1, TERM3, {}, 6 }, { 1, TO_ALL, {}, 7 }, // for all else, go to 7 + { 2, TERM1, AirportBlock::Term1, 7 }, { 2, TAKEOFF, AirportBlock::OutWay, 7 }, { 2, TO_ALL, {}, 7 }, + { 3, TERM2, AirportBlock::Term2, 5 }, { 3, TAKEOFF, AirportBlock::OutWay, 6 }, { 3, TO_ALL, {}, 6 }, + { 4, TERM3, AirportBlock::Term3, 5 }, { 4, TAKEOFF, AirportBlock::OutWay, 5 }, { 4, TO_ALL, {}, 5 }, + { 5, TERMGROUP, AirportBlock::TaxiwayBusy, 0 }, { 5, TERM2, AirportBlock::Term2, 3 }, { 5, TERM3, AirportBlock::Term3, 4 }, { 5, TO_ALL, {}, 6 }, + { 6, TERMGROUP, AirportBlock::TaxiwayBusy, 0 }, { 6, TERM2, AirportBlock::Term2, 3 }, { 6, TERM3, {}, 5 }, { 6, HANGAR, {}, 1 }, { 6, TO_ALL, {}, 7 }, + { 7, TERMGROUP, AirportBlock::TaxiwayBusy, 0 }, { 7, TERM1, AirportBlock::Term1, 2 }, { 7, TAKEOFF, AirportBlock::OutWay, 8 }, { 7, HELITAKEOFF, {}, 22 }, { 7, HANGAR, {}, 1 }, { 7, TO_ALL, {}, 6 }, + { 8, TO_ALL, AirportBlock::OutWay, 9 }, + { 9, TO_ALL, AirportBlock::RunwayInOut, 10 }, /* takeoff */ - { 10, TAKEOFF, RUNWAY_IN_OUT_block, 11 }, - { 11, STARTTAKEOFF, NOTHING_block, 12 }, - { 12, ENDTAKEOFF, NOTHING_block, 0 }, + { 10, TAKEOFF, AirportBlock::RunwayInOut, 11 }, + { 11, STARTTAKEOFF, AirportBlock::Nothing, 12 }, + { 12, ENDTAKEOFF, AirportBlock::Nothing, 0 }, /* landing */ - { 13, FLYING, NOTHING_block, 18 }, { 13, LANDING, 0, 14 }, { 13, HELILANDING, 0, 23 }, - { 14, LANDING, RUNWAY_IN_OUT_block, 15 }, - { 15, TO_ALL, RUNWAY_IN_OUT_block, 17 }, - { 16, TO_ALL, RUNWAY_IN_OUT_block, 17 }, // not used, left for compatibility - { 17, ENDLANDING, IN_WAY_block, 7 }, + { 13, FLYING, AirportBlock::Nothing, 18 }, { 13, LANDING, {}, 14 }, { 13, HELILANDING, {}, 23 }, + { 14, LANDING, AirportBlock::RunwayInOut, 15 }, + { 15, TO_ALL, AirportBlock::RunwayInOut, 17 }, + { 16, TO_ALL, AirportBlock::RunwayInOut, 17 }, // not used, left for compatibility + { 17, ENDLANDING, AirportBlock::InWay, 7 }, /* In Air */ - { 18, TO_ALL, NOTHING_block, 25 }, - { 19, TO_ALL, NOTHING_block, 20 }, - { 20, TO_ALL, NOTHING_block, 21 }, - { 21, TO_ALL, NOTHING_block, 13 }, + { 18, TO_ALL, AirportBlock::Nothing, 25 }, + { 19, TO_ALL, AirportBlock::Nothing, 20 }, + { 20, TO_ALL, AirportBlock::Nothing, 21 }, + { 21, TO_ALL, AirportBlock::Nothing, 13 }, /* helicopter */ - { 22, HELITAKEOFF, NOTHING_block, 0 }, - { 23, HELILANDING, IN_WAY_block, 24 }, - { 24, HELIENDLANDING, IN_WAY_block, 17 }, - { 25, TO_ALL, NOTHING_block, 20}, - { 26, TO_ALL, NOTHING_block, 19}, - { 27, TO_ALL, NOTHING_block, 28}, - { 28, TO_ALL, NOTHING_block, 19}, - { 29, TO_ALL, NOTHING_block, 26}, - { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE + { 22, HELITAKEOFF, AirportBlock::Nothing, 0 }, + { 23, HELILANDING, AirportBlock::InWay, 24 }, + { 24, HELIENDLANDING, AirportBlock::InWay, 17 }, + { 25, TO_ALL, AirportBlock::Nothing, 20}, + { 26, TO_ALL, AirportBlock::Nothing, 19}, + { 27, TO_ALL, AirportBlock::Nothing, 28}, + { 28, TO_ALL, AirportBlock::Nothing, 19}, + { 29, TO_ALL, AirportBlock::Nothing, 26}, + { MAX_ELEMENTS, TO_ALL, {}, 0 } // end marker. DO NOT REMOVE }; static const HangarTileTable _airport_depots_metropolitan[] = { {{5, 0}, DIR_SE, 0} }; static const uint8_t _airport_terminal_metropolitan[] = { 1, 3 }; static const uint8_t _airport_entries_metropolitan[] = {20, 19, 22, 21}; static const AirportFTAbuildup _airport_fta_metropolitan[] = { - { 0, HANGAR, NOTHING_block, 1 }, - { 1, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM2, 0, 6 }, { 1, TERM3, 0, 6 }, { 1, TO_ALL, 0, 7 }, // for all else, go to 7 - { 2, TERM1, TERM1_block, 7 }, - { 3, TERM2, TERM2_block, 6 }, - { 4, TERM3, TERM3_block, 5 }, - { 5, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 5, TERM2, TERM2_block, 3 }, { 5, TERM3, TERM3_block, 4 }, { 5, TO_ALL, 0, 6 }, - { 6, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 6, TERM2, TERM2_block, 3 }, { 6, TERM3, 0, 5 }, { 6, HANGAR, 0, 1 }, { 6, TO_ALL, 0, 7 }, - { 7, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 7, TERM1, TERM1_block, 2 }, { 7, TAKEOFF, 0, 8 }, { 7, HELITAKEOFF, 0, 23 }, { 7, HANGAR, 0, 1 }, { 7, TO_ALL, 0, 6 }, - { 8, 0, OUT_WAY_block, 9 }, - { 9, 0, RUNWAY_OUT_block, 10 }, + { 0, HANGAR, AirportBlock::Nothing, 1 }, + { 1, TERMGROUP, AirportBlock::TaxiwayBusy, 0 }, { 1, HANGAR, {}, 0 }, { 1, TERM2, {}, 6 }, { 1, TERM3, {}, 6 }, { 1, TO_ALL, {}, 7 }, // for all else, go to 7 + { 2, TERM1, AirportBlock::Term1, 7 }, + { 3, TERM2, AirportBlock::Term2, 6 }, + { 4, TERM3, AirportBlock::Term3, 5 }, + { 5, TERMGROUP, AirportBlock::TaxiwayBusy, 0 }, { 5, TERM2, AirportBlock::Term2, 3 }, { 5, TERM3, AirportBlock::Term3, 4 }, { 5, TO_ALL, {}, 6 }, + { 6, TERMGROUP, AirportBlock::TaxiwayBusy, 0 }, { 6, TERM2, AirportBlock::Term2, 3 }, { 6, TERM3, {}, 5 }, { 6, HANGAR, {}, 1 }, { 6, TO_ALL, {}, 7 }, + { 7, TERMGROUP, AirportBlock::TaxiwayBusy, 0 }, { 7, TERM1, AirportBlock::Term1, 2 }, { 7, TAKEOFF, {}, 8 }, { 7, HELITAKEOFF, {}, 23 }, { 7, HANGAR, {}, 1 }, { 7, TO_ALL, {}, 6 }, + { 8, 0, AirportBlock::OutWay, 9 }, + { 9, 0, AirportBlock::RunwayOut, 10 }, /* takeoff */ - { 10, TAKEOFF, RUNWAY_OUT_block, 11 }, - { 11, STARTTAKEOFF, NOTHING_block, 12 }, - { 12, ENDTAKEOFF, NOTHING_block, 0 }, + { 10, TAKEOFF, AirportBlock::RunwayOut, 11 }, + { 11, STARTTAKEOFF, AirportBlock::Nothing, 12 }, + { 12, ENDTAKEOFF, AirportBlock::Nothing, 0 }, /* landing */ - { 13, FLYING, NOTHING_block, 19 }, { 13, LANDING, 0, 14 }, { 13, HELILANDING, 0, 25 }, - { 14, LANDING, RUNWAY_IN_block, 15 }, - { 15, TO_ALL, RUNWAY_IN_block, 16 }, - { 16, TERMGROUP, RUNWAY_IN_block, 0 }, { 16, ENDLANDING, IN_WAY_block, 17 }, - { 17, TERMGROUP, RUNWAY_OUT_block, 0 }, { 17, ENDLANDING, IN_WAY_block, 18 }, - { 18, ENDLANDING, IN_WAY_block, 27 }, + { 13, FLYING, AirportBlock::Nothing, 19 }, { 13, LANDING, {}, 14 }, { 13, HELILANDING, {}, 25 }, + { 14, LANDING, AirportBlock::RunwayIn, 15 }, + { 15, TO_ALL, AirportBlock::RunwayIn, 16 }, + { 16, TERMGROUP, AirportBlock::RunwayIn, 0 }, { 16, ENDLANDING, AirportBlock::InWay, 17 }, + { 17, TERMGROUP, AirportBlock::RunwayOut, 0 }, { 17, ENDLANDING, AirportBlock::InWay, 18 }, + { 18, ENDLANDING, AirportBlock::InWay, 27 }, /* In Air */ - { 19, TO_ALL, NOTHING_block, 20 }, - { 20, TO_ALL, NOTHING_block, 21 }, - { 21, TO_ALL, NOTHING_block, 22 }, - { 22, TO_ALL, NOTHING_block, 13 }, + { 19, TO_ALL, AirportBlock::Nothing, 20 }, + { 20, TO_ALL, AirportBlock::Nothing, 21 }, + { 21, TO_ALL, AirportBlock::Nothing, 22 }, + { 22, TO_ALL, AirportBlock::Nothing, 13 }, /* helicopter */ - { 23, TO_ALL, NOTHING_block, 24 }, - { 24, HELITAKEOFF, NOTHING_block, 0 }, - { 25, HELILANDING, IN_WAY_block, 26 }, - { 26, HELIENDLANDING, IN_WAY_block, 18 }, - { 27, TERMGROUP, TAXIWAY_BUSY_block, 27 }, { 27, TERM1, TERM1_block, 2 }, { 27, TO_ALL, 0, 7 }, - { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE + { 23, TO_ALL, AirportBlock::Nothing, 24 }, + { 24, HELITAKEOFF, AirportBlock::Nothing, 0 }, + { 25, HELILANDING, AirportBlock::InWay, 26 }, + { 26, HELIENDLANDING, AirportBlock::InWay, 18 }, + { 27, TERMGROUP, AirportBlock::TaxiwayBusy, 27 }, { 27, TERM1, AirportBlock::Term1, 2 }, { 27, TO_ALL, {}, 7 }, + { MAX_ELEMENTS, TO_ALL, {}, 0 } // end marker. DO NOT REMOVE }; static const HangarTileTable _airport_depots_international[] = { {{0, 3}, DIR_SE, 0}, {{6, 1}, DIR_SE, 1} }; static const uint8_t _airport_terminal_international[] = { 2, 3, 3 }; static const uint8_t _airport_entries_international[] = { 38, 37, 40, 39 }; static const AirportFTAbuildup _airport_fta_international[] = { - { 0, HANGAR, NOTHING_block, 2 }, { 0, TERMGROUP, TERM_GROUP1_block, 0 }, { 0, TERMGROUP, TERM_GROUP2_ENTER1_block, 1 }, { 0, HELITAKEOFF, AIRPORT_ENTRANCE_block, 2 }, { 0, TO_ALL, 0, 2 }, - { 1, HANGAR, NOTHING_block, 3 }, { 1, TERMGROUP, HANGAR2_AREA_block, 1 }, { 1, HELITAKEOFF, HANGAR2_AREA_block, 3 }, { 1, TO_ALL, 0, 3 }, - { 2, TERMGROUP, AIRPORT_ENTRANCE_block, 0 }, { 2, HANGAR, 0, 0 }, { 2, TERM4, 0, 12 }, { 2, TERM5, 0, 12 }, { 2, TERM6, 0, 12 }, { 2, HELIPAD1, 0, 12 }, { 2, HELIPAD2, 0, 12 }, { 2, HELITAKEOFF, 0, 51 }, { 2, TO_ALL, 0, 23 }, - { 3, TERMGROUP, HANGAR2_AREA_block, 0 }, { 3, HANGAR, 0, 1 }, { 3, HELITAKEOFF, 0, 52 }, { 3, TO_ALL, 0, 18 }, - { 4, TERM1, TERM1_block, 23 }, { 4, HANGAR, AIRPORT_ENTRANCE_block, 23 }, { 4, TO_ALL, 0, 23 }, - { 5, TERM2, TERM2_block, 24 }, { 5, HANGAR, AIRPORT_ENTRANCE_block, 24 }, { 5, TO_ALL, 0, 24 }, - { 6, TERM3, TERM3_block, 25 }, { 6, HANGAR, AIRPORT_ENTRANCE_block, 25 }, { 6, TO_ALL, 0, 25 }, - { 7, TERM4, TERM4_block, 16 }, { 7, HANGAR, HANGAR2_AREA_block, 16 }, { 7, TO_ALL, 0, 16 }, - { 8, TERM5, TERM5_block, 17 }, { 8, HANGAR, HANGAR2_AREA_block, 17 }, { 8, TO_ALL, 0, 17 }, - { 9, TERM6, TERM6_block, 18 }, { 9, HANGAR, HANGAR2_AREA_block, 18 }, { 9, TO_ALL, 0, 18 }, - { 10, HELIPAD1, HELIPAD1_block, 10 }, { 10, HANGAR, HANGAR2_AREA_block, 16 }, { 10, HELITAKEOFF, 0, 47 }, - { 11, HELIPAD2, HELIPAD2_block, 11 }, { 11, HANGAR, HANGAR2_AREA_block, 17 }, { 11, HELITAKEOFF, 0, 48 }, - { 12, TO_ALL, TERM_GROUP2_ENTER1_block, 13 }, - { 13, TO_ALL, TERM_GROUP2_ENTER1_block, 14 }, - { 14, TO_ALL, TERM_GROUP2_ENTER2_block, 15 }, - { 15, TO_ALL, TERM_GROUP2_ENTER2_block, 16 }, - { 16, TERMGROUP, TERM_GROUP2_block, 0 }, { 16, TERM4, TERM4_block, 7 }, { 16, HELIPAD1, HELIPAD1_block, 10 }, { 16, HELITAKEOFF, HELIPAD1_block, 10 }, { 16, TO_ALL, 0, 17 }, - { 17, TERMGROUP, TERM_GROUP2_block, 0 }, { 17, TERM5, TERM5_block, 8 }, { 17, TERM4, 0, 16 }, { 17, HELIPAD1, 0, 16 }, { 17, HELIPAD2, HELIPAD2_block, 11 }, { 17, HELITAKEOFF, HELIPAD2_block, 11 }, { 17, TO_ALL, 0, 18 }, - { 18, TERMGROUP, TERM_GROUP2_block, 0 }, { 18, TERM6, TERM6_block, 9 }, { 18, TAKEOFF, 0, 19 }, { 18, HANGAR, HANGAR2_AREA_block, 3 }, { 18, TO_ALL, 0, 17 }, - { 19, TO_ALL, TERM_GROUP2_EXIT1_block, 20 }, - { 20, TO_ALL, TERM_GROUP2_EXIT1_block, 21 }, - { 21, TO_ALL, TERM_GROUP2_EXIT2_block, 22 }, - { 22, TO_ALL, TERM_GROUP2_EXIT2_block, 26 }, - { 23, TERMGROUP, TERM_GROUP1_block, 0 }, { 23, TERM1, TERM1_block, 4 }, { 23, HANGAR, AIRPORT_ENTRANCE_block, 2 }, { 23, TO_ALL, 0, 24 }, - { 24, TERMGROUP, TERM_GROUP1_block, 0 }, { 24, TERM2, TERM2_block, 5 }, { 24, TERM1, 0, 23 }, { 24, HANGAR, 0, 23 }, { 24, TO_ALL, 0, 25 }, - { 25, TERMGROUP, TERM_GROUP1_block, 0 }, { 25, TERM3, TERM3_block, 6 }, { 25, TAKEOFF, 0, 26 }, { 25, TO_ALL, 0, 24 }, - { 26, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 26, TAKEOFF, 0, 27 }, { 26, TO_ALL, 0, 25 }, - { 27, TO_ALL, OUT_WAY_block, 28 }, + { 0, HANGAR, AirportBlock::Nothing, 2 }, { 0, TERMGROUP, AirportBlock::TermGroup1, 0 }, { 0, TERMGROUP, AirportBlock::TermGroup2Enter1, 1 }, { 0, HELITAKEOFF, AirportBlock::AirportEntrance, 2 }, { 0, TO_ALL, {}, 2 }, + { 1, HANGAR, AirportBlock::Nothing, 3 }, { 1, TERMGROUP, AirportBlock::Hangar2Area, 1 }, { 1, HELITAKEOFF, AirportBlock::Hangar2Area, 3 }, { 1, TO_ALL, {}, 3 }, + { 2, TERMGROUP, AirportBlock::AirportEntrance, 0 }, { 2, HANGAR, {}, 0 }, { 2, TERM4, {}, 12 }, { 2, TERM5, {}, 12 }, { 2, TERM6, {}, 12 }, { 2, HELIPAD1, {}, 12 }, { 2, HELIPAD2, {}, 12 }, { 2, HELITAKEOFF, {}, 51 }, { 2, TO_ALL, {}, 23 }, + { 3, TERMGROUP, AirportBlock::Hangar2Area, 0 }, { 3, HANGAR, {}, 1 }, { 3, HELITAKEOFF, {}, 52 }, { 3, TO_ALL, {}, 18 }, + { 4, TERM1, AirportBlock::Term1, 23 }, { 4, HANGAR, AirportBlock::AirportEntrance, 23 }, { 4, TO_ALL, {}, 23 }, + { 5, TERM2, AirportBlock::Term2, 24 }, { 5, HANGAR, AirportBlock::AirportEntrance, 24 }, { 5, TO_ALL, {}, 24 }, + { 6, TERM3, AirportBlock::Term3, 25 }, { 6, HANGAR, AirportBlock::AirportEntrance, 25 }, { 6, TO_ALL, {}, 25 }, + { 7, TERM4, AirportBlock::Term4, 16 }, { 7, HANGAR, AirportBlock::Hangar2Area, 16 }, { 7, TO_ALL, {}, 16 }, + { 8, TERM5, AirportBlock::Term5, 17 }, { 8, HANGAR, AirportBlock::Hangar2Area, 17 }, { 8, TO_ALL, {}, 17 }, + { 9, TERM6, AirportBlock::Term6, 18 }, { 9, HANGAR, AirportBlock::Hangar2Area, 18 }, { 9, TO_ALL, {}, 18 }, + { 10, HELIPAD1, AirportBlock::Helipad1, 10 }, { 10, HANGAR, AirportBlock::Hangar2Area, 16 }, { 10, HELITAKEOFF, {}, 47 }, + { 11, HELIPAD2, AirportBlock::Helipad2, 11 }, { 11, HANGAR, AirportBlock::Hangar2Area, 17 }, { 11, HELITAKEOFF, {}, 48 }, + { 12, TO_ALL, AirportBlock::TermGroup2Enter1, 13 }, + { 13, TO_ALL, AirportBlock::TermGroup2Enter1, 14 }, + { 14, TO_ALL, AirportBlock::TermGroup2Enter2, 15 }, + { 15, TO_ALL, AirportBlock::TermGroup2Enter2, 16 }, + { 16, TERMGROUP, AirportBlock::TermGroup2, 0 }, { 16, TERM4, AirportBlock::Term4, 7 }, { 16, HELIPAD1, AirportBlock::Helipad1, 10 }, { 16, HELITAKEOFF, AirportBlock::Helipad1, 10 }, { 16, TO_ALL, {}, 17 }, + { 17, TERMGROUP, AirportBlock::TermGroup2, 0 }, { 17, TERM5, AirportBlock::Term5, 8 }, { 17, TERM4, {}, 16 }, { 17, HELIPAD1, {}, 16 }, { 17, HELIPAD2, AirportBlock::Helipad2, 11 }, { 17, HELITAKEOFF, AirportBlock::Helipad2, 11 }, { 17, TO_ALL, {}, 18 }, + { 18, TERMGROUP, AirportBlock::TermGroup2, 0 }, { 18, TERM6, AirportBlock::Term6, 9 }, { 18, TAKEOFF, {}, 19 }, { 18, HANGAR, AirportBlock::Hangar2Area, 3 }, { 18, TO_ALL, {}, 17 }, + { 19, TO_ALL, AirportBlock::TermGroup2Exit1, 20 }, + { 20, TO_ALL, AirportBlock::TermGroup2Exit1, 21 }, + { 21, TO_ALL, AirportBlock::TermGroup2Exit2, 22 }, + { 22, TO_ALL, AirportBlock::TermGroup2Exit2, 26 }, + { 23, TERMGROUP, AirportBlock::TermGroup1, 0 }, { 23, TERM1, AirportBlock::Term1, 4 }, { 23, HANGAR, AirportBlock::AirportEntrance, 2 }, { 23, TO_ALL, {}, 24 }, + { 24, TERMGROUP, AirportBlock::TermGroup1, 0 }, { 24, TERM2, AirportBlock::Term2, 5 }, { 24, TERM1, {}, 23 }, { 24, HANGAR, {}, 23 }, { 24, TO_ALL, {}, 25 }, + { 25, TERMGROUP, AirportBlock::TermGroup1, 0 }, { 25, TERM3, AirportBlock::Term3, 6 }, { 25, TAKEOFF, {}, 26 }, { 25, TO_ALL, {}, 24 }, + { 26, TERMGROUP, AirportBlock::TaxiwayBusy, 0 }, { 26, TAKEOFF, {}, 27 }, { 26, TO_ALL, {}, 25 }, + { 27, TO_ALL, AirportBlock::OutWay, 28 }, /* takeoff */ - { 28, TAKEOFF, OUT_WAY_block, 29 }, - { 29, TO_ALL, RUNWAY_OUT_block, 30 }, - { 30, STARTTAKEOFF, NOTHING_block, 31 }, - { 31, ENDTAKEOFF, NOTHING_block, 0 }, + { 28, TAKEOFF, AirportBlock::OutWay, 29 }, + { 29, TO_ALL, AirportBlock::RunwayOut, 30 }, + { 30, STARTTAKEOFF, AirportBlock::Nothing, 31 }, + { 31, ENDTAKEOFF, AirportBlock::Nothing, 0 }, /* landing */ - { 32, FLYING, NOTHING_block, 37 }, { 32, LANDING, 0, 33 }, { 32, HELILANDING, 0, 41 }, - { 33, LANDING, RUNWAY_IN_block, 34 }, - { 34, TO_ALL, RUNWAY_IN_block, 35 }, - { 35, TO_ALL, RUNWAY_IN_block, 36 }, - { 36, ENDLANDING, IN_WAY_block, 36 }, { 36, TERMGROUP, TERM_GROUP1_block, 0 }, { 36, TERMGROUP, TERM_GROUP2_ENTER1_block, 1 }, { 36, TERM4, 0, 12 }, { 36, TERM5, 0, 12 }, { 36, TERM6, 0, 12 }, { 36, TO_ALL, 0, 2 }, + { 32, FLYING, AirportBlock::Nothing, 37 }, { 32, LANDING, {}, 33 }, { 32, HELILANDING, {}, 41 }, + { 33, LANDING, AirportBlock::RunwayIn, 34 }, + { 34, TO_ALL, AirportBlock::RunwayIn, 35 }, + { 35, TO_ALL, AirportBlock::RunwayIn, 36 }, + { 36, ENDLANDING, AirportBlock::InWay, 36 }, { 36, TERMGROUP, AirportBlock::TermGroup1, 0 }, { 36, TERMGROUP, AirportBlock::TermGroup2Enter1, 1 }, { 36, TERM4, {}, 12 }, { 36, TERM5, {}, 12 }, { 36, TERM6, {}, 12 }, { 36, TO_ALL, {}, 2 }, /* In Air */ - { 37, TO_ALL, NOTHING_block, 38 }, - { 38, TO_ALL, NOTHING_block, 39 }, - { 39, TO_ALL, NOTHING_block, 40 }, - { 40, TO_ALL, NOTHING_block, 32 }, + { 37, TO_ALL, AirportBlock::Nothing, 38 }, + { 38, TO_ALL, AirportBlock::Nothing, 39 }, + { 39, TO_ALL, AirportBlock::Nothing, 40 }, + { 40, TO_ALL, AirportBlock::Nothing, 32 }, /* Helicopter -- stay in air in special place as a buffer to choose from helipads */ - { 41, HELILANDING, PRE_HELIPAD_block, 42 }, - { 42, HELIENDLANDING, PRE_HELIPAD_block, 42 }, { 42, HELIPAD1, 0, 43 }, { 42, HELIPAD2, 0, 44 }, { 42, HANGAR, 0, 49 }, - { 43, TO_ALL, NOTHING_block, 45 }, - { 44, TO_ALL, NOTHING_block, 46 }, + { 41, HELILANDING, AirportBlock::PreHelipad, 42 }, + { 42, HELIENDLANDING, AirportBlock::PreHelipad, 42 }, { 42, HELIPAD1, {}, 43 }, { 42, HELIPAD2, {}, 44 }, { 42, HANGAR, {}, 49 }, + { 43, TO_ALL, AirportBlock::Nothing, 45 }, + { 44, TO_ALL, AirportBlock::Nothing, 46 }, /* landing */ - { 45, TERMGROUP, NOTHING_block, 0 }, { 45, HELIPAD1, HELIPAD1_block, 10 }, - { 46, TERMGROUP, NOTHING_block, 0 }, { 46, HELIPAD2, HELIPAD2_block, 11 }, + { 45, TERMGROUP, AirportBlock::Nothing, 0 }, { 45, HELIPAD1, AirportBlock::Helipad1, 10 }, + { 46, TERMGROUP, AirportBlock::Nothing, 0 }, { 46, HELIPAD2, AirportBlock::Helipad2, 11 }, /* Helicopter -- takeoff */ - { 47, HELITAKEOFF, NOTHING_block, 0 }, - { 48, HELITAKEOFF, NOTHING_block, 0 }, - { 49, TO_ALL, HANGAR2_AREA_block, 50 }, // need to go to hangar when waiting in air - { 50, TO_ALL, HANGAR2_AREA_block, 3 }, - { 51, HELITAKEOFF, NOTHING_block, 0 }, - { 52, HELITAKEOFF, NOTHING_block, 0 }, - { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE + { 47, HELITAKEOFF, AirportBlock::Nothing, 0 }, + { 48, HELITAKEOFF, AirportBlock::Nothing, 0 }, + { 49, TO_ALL, AirportBlock::Hangar2Area, 50 }, // need to go to hangar when waiting in air + { 50, TO_ALL, AirportBlock::Hangar2Area, 3 }, + { 51, HELITAKEOFF, AirportBlock::Nothing, 0 }, + { 52, HELITAKEOFF, AirportBlock::Nothing, 0 }, + { MAX_ELEMENTS, TO_ALL, {}, 0 } // end marker. DO NOT REMOVE }; /* intercontinental */ @@ -652,109 +654,109 @@ static const HangarTileTable _airport_depots_intercontinental[] = { {{0, 5}, DIR static const uint8_t _airport_terminal_intercontinental[] = { 2, 4, 4 }; static const uint8_t _airport_entries_intercontinental[] = { 44, 43, 46, 45 }; static const AirportFTAbuildup _airport_fta_intercontinental[] = { - { 0, HANGAR, NOTHING_block, 2 }, { 0, TERMGROUP, HANGAR1_AREA_block | TERM_GROUP1_block, 0 }, { 0, TERMGROUP, HANGAR1_AREA_block | TERM_GROUP1_block, 1 }, { 0, TAKEOFF, HANGAR1_AREA_block | TERM_GROUP1_block, 2 }, { 0, TO_ALL, 0, 2 }, - { 1, HANGAR, NOTHING_block, 3 }, { 1, TERMGROUP, HANGAR2_AREA_block, 1 }, { 1, TERMGROUP, HANGAR2_AREA_block, 0 }, { 1, TO_ALL, 0, 3 }, - { 2, TERMGROUP, HANGAR1_AREA_block, 0 }, { 2, TERMGROUP, TERM_GROUP1_block, 0 }, { 2, TERMGROUP, TERM_GROUP1_block, 1 }, { 2, HANGAR, 0, 0 }, { 2, TAKEOFF, TERM_GROUP1_block, 27 }, { 2, TERM5, 0, 26 }, { 2, TERM6, 0, 26 }, { 2, TERM7, 0, 26 }, { 2, TERM8, 0, 26 }, { 2, HELIPAD1, 0, 26 }, { 2, HELIPAD2, 0, 26 }, { 2, HELITAKEOFF, 0, 74 }, { 2, TO_ALL, 0, 27 }, - { 3, TERMGROUP, HANGAR2_AREA_block, 0 }, { 3, HANGAR, 0, 1 }, { 3, HELITAKEOFF, 0, 75 }, {3, TAKEOFF, 0, 59}, { 3, TO_ALL, 0, 20 }, - { 4, TERM1, TERM1_block, 26 }, { 4, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 26 }, { 4, TO_ALL, 0, 26 }, - { 5, TERM2, TERM2_block, 27 }, { 5, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 27 }, { 5, TO_ALL, 0, 27 }, - { 6, TERM3, TERM3_block, 28 }, { 6, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 28 }, { 6, TO_ALL, 0, 28 }, - { 7, TERM4, TERM4_block, 29 }, { 7, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 29 }, { 7, TO_ALL, 0, 29 }, - { 8, TERM5, TERM5_block, 18 }, { 8, HANGAR, HANGAR2_AREA_block, 18 }, { 8, TO_ALL, 0, 18 }, - { 9, TERM6, TERM6_block, 19 }, { 9, HANGAR, HANGAR2_AREA_block, 19 }, { 9, TO_ALL, 0, 19 }, - { 10, TERM7, TERM7_block, 20 }, { 10, HANGAR, HANGAR2_AREA_block, 20 }, { 10, TO_ALL, 0, 20 }, - { 11, TERM8, TERM8_block, 21 }, { 11, HANGAR, HANGAR2_AREA_block, 21 }, { 11, TO_ALL, 0, 21 }, - { 12, HELIPAD1, HELIPAD1_block, 12 }, { 12, HANGAR, 0, 70 }, { 12, HELITAKEOFF, 0, 72 }, - { 13, HELIPAD2, HELIPAD2_block, 13 }, { 13, HANGAR, 0, 71 }, { 13, HELITAKEOFF, 0, 73 }, - { 14, TO_ALL, TERM_GROUP2_ENTER1_block, 15 }, - { 15, TO_ALL, TERM_GROUP2_ENTER1_block, 16 }, - { 16, TO_ALL, TERM_GROUP2_ENTER2_block, 17 }, - { 17, TO_ALL, TERM_GROUP2_ENTER2_block, 18 }, - { 18, TERMGROUP, TERM_GROUP2_block, 0 }, { 18, TERM5, TERM5_block, 8 }, { 18, TAKEOFF, 0, 19 }, { 18, HELITAKEOFF, HELIPAD1_block, 19 }, { 18, TO_ALL, TERM_GROUP2_EXIT1_block, 19 }, - { 19, TERMGROUP, TERM_GROUP2_block, 0 }, { 19, TERM6, TERM6_block, 9 }, { 19, TERM5, 0, 18 }, { 19, TAKEOFF, 0, 57 }, { 19, HELITAKEOFF, HELIPAD1_block, 20 }, { 19, TO_ALL, TERM_GROUP2_EXIT1_block, 20 }, // add exit to runway out 2 - { 20, TERMGROUP, TERM_GROUP2_block, 0 }, { 20, TERM7, TERM7_block, 10 }, { 20, TERM5, 0, 19 }, { 20, TERM6, 0, 19 }, { 20, HANGAR, HANGAR2_AREA_block, 3 }, { 20, TAKEOFF, 0, 19 }, { 20, TO_ALL, TERM_GROUP2_EXIT1_block, 21 }, - { 21, TERMGROUP, TERM_GROUP2_block, 0 }, { 21, TERM8, TERM8_block, 11 }, { 21, HANGAR, HANGAR2_AREA_block, 20 }, { 21, TERM5, 0, 20 }, { 21, TERM6, 0, 20 }, { 21, TERM7, 0, 20 }, { 21, TAKEOFF, 0, 20 }, { 21, TO_ALL, TERM_GROUP2_EXIT1_block, 22 }, - { 22, TERMGROUP, TERM_GROUP2_block, 0 }, { 22, HANGAR, 0, 21 }, { 22, TERM5, 0, 21 }, { 22, TERM6, 0, 21 }, { 22, TERM7, 0, 21 }, { 22, TERM8, 0, 21 }, { 22, TAKEOFF, 0, 21 }, { 22, TO_ALL, 0, 23 }, - { 23, TO_ALL, TERM_GROUP2_EXIT1_block, 70 }, - { 24, TO_ALL, TERM_GROUP2_EXIT2_block, 25 }, - { 25, TERMGROUP, TERM_GROUP2_EXIT2_block, 0 }, { 25, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 29 }, { 25, TO_ALL, 0, 29 }, - { 26, TERMGROUP, TERM_GROUP1_block, 0 }, { 26, TERM1, TERM1_block, 4 }, { 26, HANGAR, HANGAR1_AREA_block, 27 }, { 26, TERM5, TERM_GROUP2_ENTER1_block, 14 }, { 26, TERM6, TERM_GROUP2_ENTER1_block, 14 }, { 26, TERM7, TERM_GROUP2_ENTER1_block, 14 }, { 26, TERM8, TERM_GROUP2_ENTER1_block, 14 }, { 26, HELIPAD1, TERM_GROUP2_ENTER1_block, 14 }, { 26, HELIPAD2, TERM_GROUP2_ENTER1_block, 14 }, { 26, HELITAKEOFF, TERM_GROUP2_ENTER1_block, 14 }, { 26, TO_ALL, 0, 27 }, - { 27, TERMGROUP, TERM_GROUP1_block, 0 }, { 27, TERM2, TERM2_block, 5 }, { 27, HANGAR, HANGAR1_AREA_block, 2 }, { 27, TERM1, 0, 26 }, { 27, TERM5, 0, 26 }, { 27, TERM6, 0, 26 }, { 27, TERM7, 0, 26 }, { 27, TERM8, 0, 26 }, { 27, HELIPAD1, 0, 14 }, { 27, HELIPAD2, 0, 14 }, { 27, TO_ALL, 0, 28 }, - { 28, TERMGROUP, TERM_GROUP1_block, 0 }, { 28, TERM3, TERM3_block, 6 }, { 28, HANGAR, HANGAR1_AREA_block, 27 }, { 28, TERM1, 0, 27 }, { 28, TERM2, 0, 27 }, { 28, TERM4, 0, 29 }, { 28, TERM5, 0, 14 }, { 28, TERM6, 0, 14 }, { 28, TERM7, 0, 14 }, { 28, TERM8, 0, 14 }, { 28, HELIPAD1, 0, 14 }, { 28, HELIPAD2, 0, 14 }, { 28, TO_ALL, 0, 29 }, - { 29, TERMGROUP, TERM_GROUP1_block, 0 }, { 29, TERM4, TERM4_block, 7 }, { 29, HANGAR, HANGAR1_AREA_block, 27 }, { 29, TAKEOFF, 0, 30 }, { 29, TO_ALL, 0, 28 }, - { 30, TO_ALL, OUT_WAY_block2, 31 }, - { 31, TO_ALL, OUT_WAY_block, 32 }, + { 0, HANGAR, AirportBlock::Nothing, 2 }, { 0, TERMGROUP, {AirportBlock::Hangar1Area, AirportBlock::TermGroup1}, 0 }, { 0, TERMGROUP, {AirportBlock::Hangar1Area, AirportBlock::TermGroup1}, 1 }, { 0, TAKEOFF, {AirportBlock::Hangar1Area, AirportBlock::TermGroup1}, 2 }, { 0, TO_ALL, {}, 2 }, + { 1, HANGAR, AirportBlock::Nothing, 3 }, { 1, TERMGROUP, AirportBlock::Hangar2Area, 1 }, { 1, TERMGROUP, AirportBlock::Hangar2Area, 0 }, { 1, TO_ALL, {}, 3 }, + { 2, TERMGROUP, AirportBlock::Hangar1Area, 0 }, { 2, TERMGROUP, AirportBlock::TermGroup1, 0 }, { 2, TERMGROUP, AirportBlock::TermGroup1, 1 }, { 2, HANGAR, {}, 0 }, { 2, TAKEOFF, AirportBlock::TermGroup1, 27 }, { 2, TERM5, {}, 26 }, { 2, TERM6, {}, 26 }, { 2, TERM7, {}, 26 }, { 2, TERM8, {}, 26 }, { 2, HELIPAD1, {}, 26 }, { 2, HELIPAD2, {}, 26 }, { 2, HELITAKEOFF, {}, 74 }, { 2, TO_ALL, {}, 27 }, + { 3, TERMGROUP, AirportBlock::Hangar2Area, 0 }, { 3, HANGAR, {}, 1 }, { 3, HELITAKEOFF, {}, 75 }, {3, TAKEOFF, {}, 59}, { 3, TO_ALL, {}, 20 }, + { 4, TERM1, AirportBlock::Term1, 26 }, { 4, HANGAR, {AirportBlock::Hangar1Area, AirportBlock::TermGroup1}, 26 }, { 4, TO_ALL, {}, 26 }, + { 5, TERM2, AirportBlock::Term2, 27 }, { 5, HANGAR, {AirportBlock::Hangar1Area, AirportBlock::TermGroup1}, 27 }, { 5, TO_ALL, {}, 27 }, + { 6, TERM3, AirportBlock::Term3, 28 }, { 6, HANGAR, {AirportBlock::Hangar1Area, AirportBlock::TermGroup1}, 28 }, { 6, TO_ALL, {}, 28 }, + { 7, TERM4, AirportBlock::Term4, 29 }, { 7, HANGAR, {AirportBlock::Hangar1Area, AirportBlock::TermGroup1}, 29 }, { 7, TO_ALL, {}, 29 }, + { 8, TERM5, AirportBlock::Term5, 18 }, { 8, HANGAR, AirportBlock::Hangar2Area, 18 }, { 8, TO_ALL, {}, 18 }, + { 9, TERM6, AirportBlock::Term6, 19 }, { 9, HANGAR, AirportBlock::Hangar2Area, 19 }, { 9, TO_ALL, {}, 19 }, + { 10, TERM7, AirportBlock::Term7, 20 }, { 10, HANGAR, AirportBlock::Hangar2Area, 20 }, { 10, TO_ALL, {}, 20 }, + { 11, TERM8, AirportBlock::Term8, 21 }, { 11, HANGAR, AirportBlock::Hangar2Area, 21 }, { 11, TO_ALL, {}, 21 }, + { 12, HELIPAD1, AirportBlock::Helipad1, 12 }, { 12, HANGAR, {}, 70 }, { 12, HELITAKEOFF, {}, 72 }, + { 13, HELIPAD2, AirportBlock::Helipad2, 13 }, { 13, HANGAR, {}, 71 }, { 13, HELITAKEOFF, {}, 73 }, + { 14, TO_ALL, AirportBlock::TermGroup2Enter1, 15 }, + { 15, TO_ALL, AirportBlock::TermGroup2Enter1, 16 }, + { 16, TO_ALL, AirportBlock::TermGroup2Enter2, 17 }, + { 17, TO_ALL, AirportBlock::TermGroup2Enter2, 18 }, + { 18, TERMGROUP, AirportBlock::TermGroup2, 0 }, { 18, TERM5, AirportBlock::Term5, 8 }, { 18, TAKEOFF, {}, 19 }, { 18, HELITAKEOFF, AirportBlock::Helipad1, 19 }, { 18, TO_ALL, AirportBlock::TermGroup2Exit1, 19 }, + { 19, TERMGROUP, AirportBlock::TermGroup2, 0 }, { 19, TERM6, AirportBlock::Term6, 9 }, { 19, TERM5, {}, 18 }, { 19, TAKEOFF, {}, 57 }, { 19, HELITAKEOFF, AirportBlock::Helipad1, 20 }, { 19, TO_ALL, AirportBlock::TermGroup2Exit1, 20 }, // add exit to runway out 2 + { 20, TERMGROUP, AirportBlock::TermGroup2, 0 }, { 20, TERM7, AirportBlock::Term7, 10 }, { 20, TERM5, {}, 19 }, { 20, TERM6, {}, 19 }, { 20, HANGAR, AirportBlock::Hangar2Area, 3 }, { 20, TAKEOFF, {}, 19 }, { 20, TO_ALL, AirportBlock::TermGroup2Exit1, 21 }, + { 21, TERMGROUP, AirportBlock::TermGroup2, 0 }, { 21, TERM8, AirportBlock::Term8, 11 }, { 21, HANGAR, AirportBlock::Hangar2Area, 20 }, { 21, TERM5, {}, 20 }, { 21, TERM6, {}, 20 }, { 21, TERM7, {}, 20 }, { 21, TAKEOFF, {}, 20 }, { 21, TO_ALL, AirportBlock::TermGroup2Exit1, 22 }, + { 22, TERMGROUP, AirportBlock::TermGroup2, 0 }, { 22, HANGAR, {}, 21 }, { 22, TERM5, {}, 21 }, { 22, TERM6, {}, 21 }, { 22, TERM7, {}, 21 }, { 22, TERM8, {}, 21 }, { 22, TAKEOFF, {}, 21 }, { 22, TO_ALL, {}, 23 }, + { 23, TO_ALL, AirportBlock::TermGroup2Exit1, 70 }, + { 24, TO_ALL, AirportBlock::TermGroup2Exit2, 25 }, + { 25, TERMGROUP, AirportBlock::TermGroup2Exit2, 0 }, { 25, HANGAR, {AirportBlock::Hangar1Area, AirportBlock::TermGroup1}, 29 }, { 25, TO_ALL, {}, 29 }, + { 26, TERMGROUP, AirportBlock::TermGroup1, 0 }, { 26, TERM1, AirportBlock::Term1, 4 }, { 26, HANGAR, AirportBlock::Hangar1Area, 27 }, { 26, TERM5, AirportBlock::TermGroup2Enter1, 14 }, { 26, TERM6, AirportBlock::TermGroup2Enter1, 14 }, { 26, TERM7, AirportBlock::TermGroup2Enter1, 14 }, { 26, TERM8, AirportBlock::TermGroup2Enter1, 14 }, { 26, HELIPAD1, AirportBlock::TermGroup2Enter1, 14 }, { 26, HELIPAD2, AirportBlock::TermGroup2Enter1, 14 }, { 26, HELITAKEOFF, AirportBlock::TermGroup2Enter1, 14 }, { 26, TO_ALL, {}, 27 }, + { 27, TERMGROUP, AirportBlock::TermGroup1, 0 }, { 27, TERM2, AirportBlock::Term2, 5 }, { 27, HANGAR, AirportBlock::Hangar1Area, 2 }, { 27, TERM1, {}, 26 }, { 27, TERM5, {}, 26 }, { 27, TERM6, {}, 26 }, { 27, TERM7, {}, 26 }, { 27, TERM8, {}, 26 }, { 27, HELIPAD1, {}, 14 }, { 27, HELIPAD2, {}, 14 }, { 27, TO_ALL, {}, 28 }, + { 28, TERMGROUP, AirportBlock::TermGroup1, 0 }, { 28, TERM3, AirportBlock::Term3, 6 }, { 28, HANGAR, AirportBlock::Hangar1Area, 27 }, { 28, TERM1, {}, 27 }, { 28, TERM2, {}, 27 }, { 28, TERM4, {}, 29 }, { 28, TERM5, {}, 14 }, { 28, TERM6, {}, 14 }, { 28, TERM7, {}, 14 }, { 28, TERM8, {}, 14 }, { 28, HELIPAD1, {}, 14 }, { 28, HELIPAD2, {}, 14 }, { 28, TO_ALL, {}, 29 }, + { 29, TERMGROUP, AirportBlock::TermGroup1, 0 }, { 29, TERM4, AirportBlock::Term4, 7 }, { 29, HANGAR, AirportBlock::Hangar1Area, 27 }, { 29, TAKEOFF, {}, 30 }, { 29, TO_ALL, {}, 28 }, + { 30, TO_ALL, AirportBlock::OutWay3, 31 }, + { 31, TO_ALL, AirportBlock::OutWay, 32 }, /* takeoff */ - { 32, TAKEOFF, RUNWAY_OUT_block, 33 }, - { 33, TO_ALL, RUNWAY_OUT_block, 34 }, - { 34, STARTTAKEOFF, NOTHING_block, 35 }, - { 35, ENDTAKEOFF, NOTHING_block, 0 }, + { 32, TAKEOFF, AirportBlock::RunwayOut, 33 }, + { 33, TO_ALL, AirportBlock::RunwayOut, 34 }, + { 34, STARTTAKEOFF, AirportBlock::Nothing, 35 }, + { 35, ENDTAKEOFF, AirportBlock::Nothing, 0 }, /* landing */ - { 36, TO_ALL, 0, 0 }, - { 37, LANDING, RUNWAY_IN_block, 38 }, - { 38, TO_ALL, RUNWAY_IN_block, 39 }, - { 39, TO_ALL, RUNWAY_IN_block, 40 }, - { 40, ENDLANDING, RUNWAY_IN_block, 41 }, - { 41, TO_ALL, IN_WAY_block, 42 }, - { 42, TERMGROUP, IN_WAY_block, 0 }, { 42, TERMGROUP, TERM_GROUP1_block, 0 }, { 42, TERMGROUP, TERM_GROUP1_block, 1 }, { 42, HANGAR, 0, 2 }, { 42, TO_ALL, 0, 26 }, + { 36, TO_ALL, {}, 0 }, + { 37, LANDING, AirportBlock::RunwayIn, 38 }, + { 38, TO_ALL, AirportBlock::RunwayIn, 39 }, + { 39, TO_ALL, AirportBlock::RunwayIn, 40 }, + { 40, ENDLANDING, AirportBlock::RunwayIn, 41 }, + { 41, TO_ALL, AirportBlock::InWay, 42 }, + { 42, TERMGROUP, AirportBlock::InWay, 0 }, { 42, TERMGROUP, AirportBlock::TermGroup1, 0 }, { 42, TERMGROUP, AirportBlock::TermGroup1, 1 }, { 42, HANGAR, {}, 2 }, { 42, TO_ALL, {}, 26 }, /* In Air */ - { 43, TO_ALL, 0, 44 }, - { 44, FLYING, 0, 45 }, { 44, HELILANDING, 0, 47 }, { 44, LANDING, 0, 69 }, { 44, TO_ALL, 0, 45 }, - { 45, TO_ALL, 0, 46 }, - { 46, FLYING, 0, 43 }, { 46, LANDING, 0, 76 }, { 46, TO_ALL, 0, 43 }, + { 43, TO_ALL, {}, 44 }, + { 44, FLYING, {}, 45 }, { 44, HELILANDING, {}, 47 }, { 44, LANDING, {}, 69 }, { 44, TO_ALL, {}, 45 }, + { 45, TO_ALL, {}, 46 }, + { 46, FLYING, {}, 43 }, { 46, LANDING, {}, 76 }, { 46, TO_ALL, {}, 43 }, /* Helicopter -- stay in air in special place as a buffer to choose from helipads */ - { 47, HELILANDING, PRE_HELIPAD_block, 48 }, - { 48, HELIENDLANDING, PRE_HELIPAD_block, 48 }, { 48, HELIPAD1, 0, 49 }, { 48, HELIPAD2, 0, 50 }, { 48, HANGAR, 0, 55 }, - { 49, TO_ALL, NOTHING_block, 51 }, - { 50, TO_ALL, NOTHING_block, 52 }, + { 47, HELILANDING, AirportBlock::PreHelipad, 48 }, + { 48, HELIENDLANDING, AirportBlock::PreHelipad, 48 }, { 48, HELIPAD1, {}, 49 }, { 48, HELIPAD2, {}, 50 }, { 48, HANGAR, {}, 55 }, + { 49, TO_ALL, AirportBlock::Nothing, 51 }, + { 50, TO_ALL, AirportBlock::Nothing, 52 }, /* landing */ - { 51, TERMGROUP, NOTHING_block, 0 }, { 51, HELIPAD1, HELIPAD1_block, 12 }, { 51, HANGAR, 0, 55 }, { 51, TO_ALL, 0, 12 }, - { 52, TERMGROUP, NOTHING_block, 0 }, { 52, HELIPAD2, HELIPAD2_block, 13 }, { 52, HANGAR, 0, 55 }, { 52, TO_ALL, 0, 13 }, + { 51, TERMGROUP, AirportBlock::Nothing, 0 }, { 51, HELIPAD1, AirportBlock::Helipad1, 12 }, { 51, HANGAR, {}, 55 }, { 51, TO_ALL, {}, 12 }, + { 52, TERMGROUP, AirportBlock::Nothing, 0 }, { 52, HELIPAD2, AirportBlock::Helipad2, 13 }, { 52, HANGAR, {}, 55 }, { 52, TO_ALL, {}, 13 }, /* Helicopter -- takeoff */ - { 53, HELITAKEOFF, NOTHING_block, 0 }, - { 54, HELITAKEOFF, NOTHING_block, 0 }, - { 55, TO_ALL, HANGAR2_AREA_block, 56 }, // need to go to hangar when waiting in air - { 56, TO_ALL, HANGAR2_AREA_block, 3 }, + { 53, HELITAKEOFF, AirportBlock::Nothing, 0 }, + { 54, HELITAKEOFF, AirportBlock::Nothing, 0 }, + { 55, TO_ALL, AirportBlock::Hangar2Area, 56 }, // need to go to hangar when waiting in air + { 56, TO_ALL, AirportBlock::Hangar2Area, 3 }, /* runway 2 out support */ - { 57, TERMGROUP, OUT_WAY2_block, 0 }, { 57, TAKEOFF, 0, 58 }, { 57, TO_ALL, 0, 58 }, - { 58, TO_ALL, OUT_WAY2_block, 59 }, - { 59, TAKEOFF, RUNWAY_OUT2_block, 60 }, // takeoff - { 60, TO_ALL, RUNWAY_OUT2_block, 61 }, - { 61, STARTTAKEOFF, NOTHING_block, 62 }, - { 62, ENDTAKEOFF, NOTHING_block, 0 }, + { 57, TERMGROUP, AirportBlock::OutWay2, 0 }, { 57, TAKEOFF, {}, 58 }, { 57, TO_ALL, {}, 58 }, + { 58, TO_ALL, AirportBlock::OutWay2, 59 }, + { 59, TAKEOFF, AirportBlock::RunwayOut2, 60 }, // takeoff + { 60, TO_ALL, AirportBlock::RunwayOut2, 61 }, + { 61, STARTTAKEOFF, AirportBlock::Nothing, 62 }, + { 62, ENDTAKEOFF, AirportBlock::Nothing, 0 }, /* runway 2 in support */ - { 63, LANDING, RUNWAY_IN2_block, 64 }, - { 64, TO_ALL, RUNWAY_IN2_block, 65 }, - { 65, TO_ALL, RUNWAY_IN2_block, 66 }, - { 66, ENDLANDING, RUNWAY_IN2_block, 0 }, { 66, TERMGROUP, 0, 1 }, { 66, TERMGROUP, 0, 0 }, { 66, TO_ALL, 0, 67 }, - { 67, TO_ALL, IN_WAY2_block, 68 }, - { 68, TERMGROUP, IN_WAY2_block, 0 }, { 68, TERMGROUP, TERM_GROUP2_block, 1 }, { 68, TERMGROUP, TERM_GROUP1_block, 0 }, { 68, HANGAR, HANGAR2_AREA_block, 22 }, { 68, TO_ALL, 0, 22 }, - { 69, TERMGROUP, RUNWAY_IN2_block, 0 }, { 69, TO_ALL, RUNWAY_IN2_block, 63 }, - { 70, TERMGROUP, TERM_GROUP2_EXIT1_block, 0 }, { 70, HELIPAD1, HELIPAD1_block, 12 }, { 70, HELITAKEOFF, HELIPAD1_block, 12 }, { 70, TO_ALL, 0, 71 }, - { 71, TERMGROUP, TERM_GROUP2_EXIT1_block, 0 }, { 71, HELIPAD2, HELIPAD2_block, 13 }, { 71, HELITAKEOFF, HELIPAD1_block, 12 }, { 71, TO_ALL, 0, 24 }, - { 72, TO_ALL, HELIPAD1_block, 53 }, - { 73, TO_ALL, HELIPAD2_block, 54 }, - { 74, HELITAKEOFF, NOTHING_block, 0 }, - { 75, HELITAKEOFF, NOTHING_block, 0 }, - { 76, TERMGROUP, RUNWAY_IN_block, 0 }, { 76, TO_ALL, RUNWAY_IN_block, 37 }, - { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE + { 63, LANDING, AirportBlock::RunwayIn2, 64 }, + { 64, TO_ALL, AirportBlock::RunwayIn2, 65 }, + { 65, TO_ALL, AirportBlock::RunwayIn2, 66 }, + { 66, ENDLANDING, AirportBlock::RunwayIn2, 0 }, { 66, TERMGROUP, {}, 1 }, { 66, TERMGROUP, {}, 0 }, { 66, TO_ALL, {}, 67 }, + { 67, TO_ALL, AirportBlock::InWay2, 68 }, + { 68, TERMGROUP, AirportBlock::InWay2, 0 }, { 68, TERMGROUP, AirportBlock::TermGroup2, 1 }, { 68, TERMGROUP, AirportBlock::TermGroup1, 0 }, { 68, HANGAR, AirportBlock::Hangar2Area, 22 }, { 68, TO_ALL, {}, 22 }, + { 69, TERMGROUP, AirportBlock::RunwayIn2, 0 }, { 69, TO_ALL, AirportBlock::RunwayIn2, 63 }, + { 70, TERMGROUP, AirportBlock::TermGroup2Exit1, 0 }, { 70, HELIPAD1, AirportBlock::Helipad1, 12 }, { 70, HELITAKEOFF, AirportBlock::Helipad1, 12 }, { 70, TO_ALL, {}, 71 }, + { 71, TERMGROUP, AirportBlock::TermGroup2Exit1, 0 }, { 71, HELIPAD2, AirportBlock::Helipad2, 13 }, { 71, HELITAKEOFF, AirportBlock::Helipad1, 12 }, { 71, TO_ALL, {}, 24 }, + { 72, TO_ALL, AirportBlock::Helipad1, 53 }, + { 73, TO_ALL, AirportBlock::Helipad2, 54 }, + { 74, HELITAKEOFF, AirportBlock::Nothing, 0 }, + { 75, HELITAKEOFF, AirportBlock::Nothing, 0 }, + { 76, TERMGROUP, AirportBlock::RunwayIn, 0 }, { 76, TO_ALL, AirportBlock::RunwayIn, 37 }, + { MAX_ELEMENTS, TO_ALL, {}, 0 } // end marker. DO NOT REMOVE }; /* heliports, oilrigs don't have depots */ static const uint8_t _airport_entries_heliport[] = { 7, 7, 7, 7 }; static const AirportFTAbuildup _airport_fta_heliport[] = { - { 0, HELIPAD1, HELIPAD1_block, 1 }, - { 1, HELITAKEOFF, NOTHING_block, 0 }, // takeoff - { 2, TERMGROUP, AIRPORT_BUSY_block, 0 }, { 2, HELILANDING, 0, 3 }, { 2, HELITAKEOFF, 0, 1 }, - { 3, HELILANDING, AIRPORT_BUSY_block, 4 }, - { 4, HELIENDLANDING, AIRPORT_BUSY_block, 4 }, { 4, HELIPAD1, HELIPAD1_block, 0 }, { 4, HELITAKEOFF, 0, 2 }, + { 0, HELIPAD1, AirportBlock::Helipad1, 1 }, + { 1, HELITAKEOFF, AirportBlock::Nothing, 0 }, // takeoff + { 2, TERMGROUP, AirportBlock::AirportBusy, 0 }, { 2, HELILANDING, {}, 3 }, { 2, HELITAKEOFF, {}, 1 }, + { 3, HELILANDING, AirportBlock::AirportBusy, 4 }, + { 4, HELIENDLANDING, AirportBlock::AirportBusy, 4 }, { 4, HELIPAD1, AirportBlock::Helipad1, 0 }, { 4, HELITAKEOFF, {}, 2 }, /* In Air */ - { 5, TO_ALL, NOTHING_block, 6 }, - { 6, TO_ALL, NOTHING_block, 7 }, - { 7, TO_ALL, NOTHING_block, 8 }, - { 8, FLYING, NOTHING_block, 5 }, { 8, HELILANDING, HELIPAD1_block, 2 }, // landing - { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE + { 5, TO_ALL, AirportBlock::Nothing, 6 }, + { 6, TO_ALL, AirportBlock::Nothing, 7 }, + { 7, TO_ALL, AirportBlock::Nothing, 8 }, + { 8, FLYING, AirportBlock::Nothing, 5 }, { 8, HELILANDING, AirportBlock::Helipad1, 2 }, // landing + { MAX_ELEMENTS, TO_ALL, {}, 0 } // end marker. DO NOT REMOVE }; #define _airport_entries_oilrig _airport_entries_heliport #define _airport_fta_oilrig _airport_fta_heliport @@ -763,73 +765,73 @@ static const AirportFTAbuildup _airport_fta_heliport[] = { static const HangarTileTable _airport_depots_helidepot[] = { {{1, 0}, DIR_SE, 0} }; static const uint8_t _airport_entries_helidepot[] = { 4, 4, 4, 4 }; static const AirportFTAbuildup _airport_fta_helidepot[] = { - { 0, HANGAR, NOTHING_block, 1 }, - { 1, TERMGROUP, HANGAR2_AREA_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, HELIPAD1, HELIPAD1_block, 14 }, { 1, HELITAKEOFF, 0, 15 }, { 1, TO_ALL, 0, 0 }, - { 2, FLYING, NOTHING_block, 3 }, { 2, HELILANDING, PRE_HELIPAD_block, 7 }, { 2, HANGAR, 0, 12 }, { 2, HELITAKEOFF, NOTHING_block, 16 }, + { 0, HANGAR, AirportBlock::Nothing, 1 }, + { 1, TERMGROUP, AirportBlock::Hangar2Area, 0 }, { 1, HANGAR, {}, 0 }, { 1, HELIPAD1, AirportBlock::Helipad1, 14 }, { 1, HELITAKEOFF, {}, 15 }, { 1, TO_ALL, {}, 0 }, + { 2, FLYING, AirportBlock::Nothing, 3 }, { 2, HELILANDING, AirportBlock::PreHelipad, 7 }, { 2, HANGAR, {}, 12 }, { 2, HELITAKEOFF, AirportBlock::Nothing, 16 }, /* In Air */ - { 3, 0, NOTHING_block, 4 }, - { 4, 0, NOTHING_block, 5 }, - { 5, 0, NOTHING_block, 6 }, - { 6, 0, NOTHING_block, 2 }, + { 3, TO_ALL, AirportBlock::Nothing, 4 }, + { 4, TO_ALL, AirportBlock::Nothing, 5 }, + { 5, TO_ALL, AirportBlock::Nothing, 6 }, + { 6, TO_ALL, AirportBlock::Nothing, 2 }, /* Helicopter -- stay in air in special place as a buffer to choose from helipads */ - { 7, HELILANDING, PRE_HELIPAD_block, 8 }, - { 8, HELIENDLANDING, PRE_HELIPAD_block, 8 }, { 8, HELIPAD1, 0, 9 }, { 8, HANGAR, 0, 12 }, { 8, TO_ALL, 0, 2 }, - { 9, 0, NOTHING_block, 10 }, + { 7, HELILANDING, AirportBlock::PreHelipad, 8 }, + { 8, HELIENDLANDING, AirportBlock::PreHelipad, 8 }, { 8, HELIPAD1, {}, 9 }, { 8, HANGAR, {}, 12 }, { 8, TO_ALL, {}, 2 }, + { 9, TO_ALL, AirportBlock::Nothing, 10 }, /* landing */ - { 10, TERMGROUP, NOTHING_block, 10 }, { 10, HELIPAD1, HELIPAD1_block, 14 }, { 10, HANGAR, 0, 1 }, { 10, TO_ALL, 0, 14 }, + { 10, TERMGROUP, AirportBlock::Nothing, 10 }, { 10, HELIPAD1, AirportBlock::Helipad1, 14 }, { 10, HANGAR, {}, 1 }, { 10, TO_ALL, {}, 14 }, /* Helicopter -- takeoff */ - { 11, HELITAKEOFF, NOTHING_block, 0 }, - { 12, TO_ALL, HANGAR2_AREA_block, 13 }, // need to go to hangar when waiting in air - { 13, TO_ALL, HANGAR2_AREA_block, 1 }, - { 14, HELIPAD1, HELIPAD1_block, 14 }, { 14, HANGAR, 0, 1 }, { 14, HELITAKEOFF, 0, 17 }, - { 15, HELITAKEOFF, NOTHING_block, 0 }, // takeoff outside depot - { 16, HELITAKEOFF, 0, 14 }, - { 17, TO_ALL, NOTHING_block, 11 }, - { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE + { 11, HELITAKEOFF, AirportBlock::Nothing, 0 }, + { 12, TO_ALL, AirportBlock::Hangar2Area, 13 }, // need to go to hangar when waiting in air + { 13, TO_ALL, AirportBlock::Hangar2Area, 1 }, + { 14, HELIPAD1, AirportBlock::Helipad1, 14 }, { 14, HANGAR, {}, 1 }, { 14, HELITAKEOFF, {}, 17 }, + { 15, HELITAKEOFF, AirportBlock::Nothing, 0 }, // takeoff outside depot + { 16, HELITAKEOFF, {}, 14 }, + { 17, TO_ALL, AirportBlock::Nothing, 11 }, + { MAX_ELEMENTS, TO_ALL, {}, 0 } // end marker. DO NOT REMOVE }; /* helistation */ static const HangarTileTable _airport_depots_helistation[] = { {{0, 0}, DIR_SE, 0} }; static const uint8_t _airport_entries_helistation[] = { 25, 25, 25, 25 }; static const AirportFTAbuildup _airport_fta_helistation[] = { - { 0, HANGAR, NOTHING_block, 8 }, { 0, HELIPAD1, 0, 1 }, { 0, HELIPAD2, 0, 1 }, { 0, HELIPAD3, 0, 1 }, { 0, HELITAKEOFF, 0, 1 }, { 0, TO_ALL, 0, 0 }, - { 1, TERMGROUP, HANGAR2_AREA_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, HELITAKEOFF, 0, 3 }, { 1, TO_ALL, 0, 4 }, + { 0, HANGAR, AirportBlock::Nothing, 8 }, { 0, HELIPAD1, {}, 1 }, { 0, HELIPAD2, {}, 1 }, { 0, HELIPAD3, {}, 1 }, { 0, HELITAKEOFF, {}, 1 }, { 0, TO_ALL, {}, 0 }, + { 1, TERMGROUP, AirportBlock::Hangar2Area, 0 }, { 1, HANGAR, {}, 0 }, { 1, HELITAKEOFF, {}, 3 }, { 1, TO_ALL, {}, 4 }, /* landing */ - { 2, FLYING, NOTHING_block, 28 }, { 2, HELILANDING, 0, 15 }, { 2, TO_ALL, 0, 28 }, + { 2, FLYING, AirportBlock::Nothing, 28 }, { 2, HELILANDING, {}, 15 }, { 2, TO_ALL, {}, 28 }, /* helicopter side */ - { 3, HELITAKEOFF, NOTHING_block, 0 }, // helitakeoff outside hangar2 - { 4, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 4, HANGAR, HANGAR2_AREA_block, 1 }, { 4, HELITAKEOFF, 0, 1 }, { 4, TO_ALL, 0, 5 }, - { 5, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 5, HELIPAD1, HELIPAD1_block, 6 }, { 5, HELIPAD2, HELIPAD2_block, 7 }, { 5, HELIPAD3, HELIPAD3_block, 8 }, { 5, TO_ALL, 0, 4 }, - { 6, HELIPAD1, HELIPAD1_block, 5 }, { 6, HANGAR, HANGAR2_AREA_block, 5 }, { 6, HELITAKEOFF, 0, 9 }, { 6, TO_ALL, 0, 6 }, - { 7, HELIPAD2, HELIPAD2_block, 5 }, { 7, HANGAR, HANGAR2_AREA_block, 5 }, { 7, HELITAKEOFF, 0, 10 }, { 7, TO_ALL, 0, 7 }, - { 8, HELIPAD3, HELIPAD3_block, 5 }, { 8, HANGAR, HANGAR2_AREA_block, 5 }, { 8, HELITAKEOFF, 0, 11 }, { 8, TO_ALL, 0, 8 }, - { 9, 0, HELIPAD1_block, 12 }, - { 10, TO_ALL, HELIPAD2_block, 13 }, - { 11, TO_ALL, HELIPAD3_block, 14 }, - { 12, HELITAKEOFF, NOTHING_block, 0 }, - { 13, HELITAKEOFF, NOTHING_block, 0 }, - { 14, HELITAKEOFF, NOTHING_block, 0 }, + { 3, HELITAKEOFF, AirportBlock::Nothing, 0 }, // helitakeoff outside hangar2 + { 4, TERMGROUP, AirportBlock::TaxiwayBusy, 0 }, { 4, HANGAR, AirportBlock::Hangar2Area, 1 }, { 4, HELITAKEOFF, {}, 1 }, { 4, TO_ALL, {}, 5 }, + { 5, TERMGROUP, AirportBlock::TaxiwayBusy, 0 }, { 5, HELIPAD1, AirportBlock::Helipad1, 6 }, { 5, HELIPAD2, AirportBlock::Helipad2, 7 }, { 5, HELIPAD3, AirportBlock::Helipad3, 8 }, { 5, TO_ALL, {}, 4 }, + { 6, HELIPAD1, AirportBlock::Helipad1, 5 }, { 6, HANGAR, AirportBlock::Hangar2Area, 5 }, { 6, HELITAKEOFF, {}, 9 }, { 6, TO_ALL, {}, 6 }, + { 7, HELIPAD2, AirportBlock::Helipad2, 5 }, { 7, HANGAR, AirportBlock::Hangar2Area, 5 }, { 7, HELITAKEOFF, {}, 10 }, { 7, TO_ALL, {}, 7 }, + { 8, HELIPAD3, AirportBlock::Helipad3, 5 }, { 8, HANGAR, AirportBlock::Hangar2Area, 5 }, { 8, HELITAKEOFF, {}, 11 }, { 8, TO_ALL, {}, 8 }, + { 9, TO_ALL, AirportBlock::Helipad1, 12 }, + { 10, TO_ALL, AirportBlock::Helipad2, 13 }, + { 11, TO_ALL, AirportBlock::Helipad3, 14 }, + { 12, HELITAKEOFF, AirportBlock::Nothing, 0 }, + { 13, HELITAKEOFF, AirportBlock::Nothing, 0 }, + { 14, HELITAKEOFF, AirportBlock::Nothing, 0 }, /* heli - in flight moves */ - { 15, HELILANDING, PRE_HELIPAD_block, 16 }, - { 16, HELIENDLANDING, PRE_HELIPAD_block, 16 }, { 16, HELIPAD1, 0, 17 }, { 16, HELIPAD2, 0, 18 }, { 16, HELIPAD3, 0, 19 }, { 16, HANGAR, 0, 23 }, - { 17, TO_ALL, NOTHING_block, 20 }, - { 18, TO_ALL, NOTHING_block, 21 }, - { 19, TO_ALL, NOTHING_block, 22 }, + { 15, HELILANDING, AirportBlock::PreHelipad, 16 }, + { 16, HELIENDLANDING, AirportBlock::PreHelipad, 16 }, { 16, HELIPAD1, {}, 17 }, { 16, HELIPAD2, {}, 18 }, { 16, HELIPAD3, {}, 19 }, { 16, HANGAR, {}, 23 }, + { 17, TO_ALL, AirportBlock::Nothing, 20 }, + { 18, TO_ALL, AirportBlock::Nothing, 21 }, + { 19, TO_ALL, AirportBlock::Nothing, 22 }, /* heli landing */ - { 20, TERMGROUP, NOTHING_block, 0 }, { 20, HELIPAD1, HELIPAD1_block, 6 }, { 20, HANGAR, 0, 23 }, { 20, TO_ALL, 0, 6 }, - { 21, TERMGROUP, NOTHING_block, 0 }, { 21, HELIPAD2, HELIPAD2_block, 7 }, { 21, HANGAR, 0, 23 }, { 21, TO_ALL, 0, 7 }, - { 22, TERMGROUP, NOTHING_block, 0 }, { 22, HELIPAD3, HELIPAD3_block, 8 }, { 22, HANGAR, 0, 23 }, { 22, TO_ALL, 0, 8 }, - { 23, TO_ALL, HANGAR2_AREA_block, 24 }, // need to go to helihangar when waiting in air - { 24, TO_ALL, HANGAR2_AREA_block, 1 }, - { 25, TO_ALL, NOTHING_block, 26 }, - { 26, TO_ALL, NOTHING_block, 27 }, - { 27, TO_ALL, NOTHING_block, 2 }, - { 28, TO_ALL, NOTHING_block, 29 }, - { 29, TO_ALL, NOTHING_block, 30 }, - { 30, TO_ALL, NOTHING_block, 31 }, - { 31, TO_ALL, NOTHING_block, 32 }, - { 32, TO_ALL, NOTHING_block, 25 }, - { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE + { 20, TERMGROUP, AirportBlock::Nothing, 0 }, { 20, HELIPAD1, AirportBlock::Helipad1, 6 }, { 20, HANGAR, {}, 23 }, { 20, TO_ALL, {}, 6 }, + { 21, TERMGROUP, AirportBlock::Nothing, 0 }, { 21, HELIPAD2, AirportBlock::Helipad2, 7 }, { 21, HANGAR, {}, 23 }, { 21, TO_ALL, {}, 7 }, + { 22, TERMGROUP, AirportBlock::Nothing, 0 }, { 22, HELIPAD3, AirportBlock::Helipad3, 8 }, { 22, HANGAR, {}, 23 }, { 22, TO_ALL, {}, 8 }, + { 23, TO_ALL, AirportBlock::Hangar2Area, 24 }, // need to go to helihangar when waiting in air + { 24, TO_ALL, AirportBlock::Hangar2Area, 1 }, + { 25, TO_ALL, AirportBlock::Nothing, 26 }, + { 26, TO_ALL, AirportBlock::Nothing, 27 }, + { 27, TO_ALL, AirportBlock::Nothing, 2 }, + { 28, TO_ALL, AirportBlock::Nothing, 29 }, + { 29, TO_ALL, AirportBlock::Nothing, 30 }, + { 30, TO_ALL, AirportBlock::Nothing, 31 }, + { 31, TO_ALL, AirportBlock::Nothing, 32 }, + { 32, TO_ALL, AirportBlock::Nothing, 25 }, + { MAX_ELEMENTS, TO_ALL, {}, 0 } // end marker. DO NOT REMOVE }; #endif /* AIRPORT_MOVEMENT_H */ diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 6b6c1a4af7..d7f0024f4a 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -853,7 +853,7 @@ void Vehicle::PreDestructor() Station *st = GetTargetAirportIfValid(a); if (st != nullptr) { const auto &layout = st->airport.GetFTA()->layout; - CLRBITS(st->airport.flags, layout[a->previous_pos].block | layout[a->pos].block); + st->airport.blocks.Reset(layout[a->previous_pos].blocks | layout[a->pos].blocks); } }