//reallocate all gates and facilities from one airport to another - gates, facilities and routes
public static void ReallocateAirport(Airport oldAirport, Airport newAirport, Airline airline)
{
//contract
List<AirportContract> oldContracts = oldAirport.GetAirlineContracts(airline);
foreach (AirportContract oldContract in oldContracts)
{
oldAirport.RemoveAirlineContract(oldContract);
oldContract.Airport = newAirport;
AirportHelpers.AddAirlineContract(oldContract);
for (int i = 0; i < oldContract.NumberOfGates; i++)
{
Gate newGate = newAirport.Terminals.GetGates().First(g => g.Airline == null);
newGate.Airline = airline;
Gate oldGate = oldAirport.Terminals.GetGates().First(g => g.Airline == airline);
oldGate.Airline = null;
}
}
//routes
IEnumerable<Route> obsoleteRoutes = (from r in airline.Routes where r.Destination1 == oldAirport || r.Destination2 == oldAirport select r);
foreach (Route route in obsoleteRoutes)
{
if (route.Destination1 == oldAirport) route.Destination1 = newAirport;
if (route.Destination2 == oldAirport) route.Destination2 = newAirport;
List<RouteTimeTableEntry> entries = route.TimeTable.Entries.FindAll(e => e.Destination.Airport == oldAirport);
foreach (RouteTimeTableEntry entry in entries)
entry.Destination.Airport = newAirport;
foreach (FleetAirliner airliner in route.GetAirliners())
{
if (airliner.Homebase == oldAirport)
airliner.Homebase = newAirport;
}
}
//facilities
foreach (AirportFacility facility in oldAirport.GetCurrentAirportFacilities(airline))
{
newAirport.AddAirportFacility(airline, facility, GameObject.GetInstance().GameTime);
}
oldAirport.ClearFacilities(airline);
foreach (AirportFacility.FacilityType type in Enum.GetValues(typeof (AirportFacility.FacilityType)))
{
AirportFacility noneFacility = AirportFacilities.GetFacilities(type).Find((facility => facility.TypeLevel == 0));
oldAirport.AddAirportFacility(airline, noneFacility, GameObject.GetInstance().GameTime);
}
}