public AirportMVVM(Airport airport)
{
Airport = airport;
TerminalGatePrice = Airport.GetTerminalGatePrice();
TerminalPrice = Airport.GetTerminalPrice();
LandingFee = GeneralHelpers.GetInflationPrice(Airport.LandingFee);
FuelPrice = AirportHelpers.GetFuelPrice(Airport);
TotalPaxGates = Airport.Terminals.AirportTerminals.Where(t=>t.Type == Terminal.TerminalType.Passenger).Sum(t=>t.Gates.NumberOfDeliveredGates);
TotalCargoGates = Airport.Terminals.AirportTerminals.Where(t=>t.Type == Terminal.TerminalType.Cargo).Sum(t=>t.Gates.NumberOfDeliveredGates);
Cooperations = new ObservableCollection<Cooperation>();
Terminals = new ObservableCollection<AirportTerminalMVVM>();
BuildingTerminals = new ObservableCollection<AirportTerminalMVVM>();
foreach (Terminal terminal in Airport.Terminals.GetTerminals())
{
Boolean isSellable = terminal.Airline != null
&& terminal.Airline == GameObject.GetInstance().HumanAirline;
if (terminal.IsBuilt)
{
Terminals.Add(new AirportTerminalMVVM(terminal, terminal.IsBuyable, isSellable));
}
else
{
BuildingTerminals.Add(new AirportTerminalMVVM(terminal, terminal.IsBuyable, isSellable));
}
}
Contracts = new ObservableCollection<ContractMVVM>();
foreach (AirportContract contract in Airport.AirlineContracts)
{
Contracts.Add(new ContractMVVM(contract));
}
foreach (Cooperation cooperation in Airport.Cooperations)
{
Cooperations.Add(cooperation);
}
AirportHelpers.CreateAirportWeather(Airport);
Weather = Airport.Weather.ToList();
if (!GameObject.GetInstance().DayRoundEnabled)
{
CurrentWeather = Weather[0].Temperatures[GameObject.GetInstance().GameTime.Hour];
}
FreeGates = Airport.Terminals.NumberOfFreeGates;
FreeCargoGates = Airport.Terminals.AirportTerminals.Where(t=>t.Type == Terminal.TerminalType.Cargo).Sum(t=>t.GetFreeGates());
FreePaxGates = Airport.Terminals.AirportTerminals.Where(t => t.Type == Terminal.TerminalType.Passenger).Sum(t => t.GetFreeGates());
DomesticDemands = new List<DemandMVVM>();
IntlDemands = new List<DemandMVVM>();
IOrderedEnumerable<Airport> demands =
Airport.GetDestinationDemands()
.Where(a => a != null && GeneralHelpers.IsAirportActive(a))
.OrderByDescending(
a => Airport.GetDestinationPassengersRate(a, AirlinerClass.ClassType.EconomyClass));
IEnumerable<Airport> internationalDemand =
demands.Where(
a =>
new CountryCurrentCountryConverter().Convert(a.Profile.Country)
!= new CountryCurrentCountryConverter().Convert(Airport.Profile.Country));
IEnumerable<Airport> domesticDemand =
demands.Where(
a =>
new CountryCurrentCountryConverter().Convert(a.Profile.Country)
== new CountryCurrentCountryConverter().Convert(Airport.Profile.Country));
foreach (Airport destination in internationalDemand)
{
IntlDemands.Add(
new DemandMVVM(
destination,
Airport.GetDestinationPassengersRate(destination, AirlinerClass.ClassType.EconomyClass),
(int)Airport.Profile.Pax,
Airport.GetDestinationCargoRate(destination),MathHelpers.GetDistance(destination,Airport)));
}
foreach (Airport destination in domesticDemand)
{
DomesticDemands.Add(
new DemandMVVM(
destination,
Airport.GetDestinationPassengersRate(destination, AirlinerClass.ClassType.EconomyClass),
(int)Airport.Profile.Pax,
Airport.GetDestinationCargoRate(destination), MathHelpers.GetDistance(destination,Airport)));
}
AirportFacilities =
Airport.GetAirportFacilities()
.FindAll(f => f.Airline == null && f.Facility.TypeLevel != 0)
.Select(f => f.Facility)
.Distinct()
.ToList();
AirlineFacilities = new ObservableCollection<AirlineAirportFacilityMVVM>();
BuildingAirlineFacilities = new ObservableCollection<AirlineAirportFacilityMVVM>();
foreach (
AirlineAirportFacility facility in Airport.GetAirportFacilities().FindAll(f => f.Airline != null))
{
if (facility.Facility.TypeLevel != 0)
{
Alliance alliance = facility.Airline.Alliances.Count == 0 ? null : facility.Airline.Alliances[0];
var airlineFacility = new AirlineAirportFacilityMVVM(facility, alliance);
if (airlineFacility.IsDelivered)
{
if (facility == Airport.GetAirlineAirportFacility(facility.Airline, facility.Facility.Type))
{
AirlineFacilities.Add(airlineFacility);
}
}
else
{
BuildingAirlineFacilities.Add(airlineFacility);
}
}
}
AirlineStatistics = new List<AirportStatisticsMVMM>();
foreach (Airline airline in Airlines.GetAllAirlines())
{
StatisticsType passengersType = StatisticsTypes.GetStatisticsType("Passengers");
StatisticsType passengersAvgType = StatisticsTypes.GetStatisticsType("Passengers%");
StatisticsType arrivalsType = StatisticsTypes.GetStatisticsType("Arrivals");
double passengers = Airport.Statistics.GetStatisticsValue(
GameObject.GetInstance().GameTime.Year,
airline,
passengersType);
double passengersAvg = Airport.Statistics.GetStatisticsValue(
GameObject.GetInstance().GameTime.Year,
airline,
passengersAvgType);
double arrivals = Airport.Statistics.GetStatisticsValue(
GameObject.GetInstance().GameTime.Year,
airline,
arrivalsType);
int routes = airline.Routes.Count(r => r.Destination1 == Airport || r.Destination2 == Airport);
AirlineStatistics.Add(
new AirportStatisticsMVMM(airline, passengers, passengersAvg, arrivals, routes));
}
Traffic = new List<AirportTrafficMVVM>();
IOrderedEnumerable<Airport> passengerDestinations = from a in Airports.GetAllActiveAirports()
orderby Airport.GetDestinationPassengerStatistics(a) descending
select a;
IOrderedEnumerable<Airport> cargoDestinations = from a in Airports.GetAllActiveAirports()
orderby Airport.GetDestinationCargoStatistics(a) descending
select a;
foreach (Airport a in passengerDestinations.Take(20))
{
Traffic.Add(
new AirportTrafficMVVM(
a,
Airport.GetDestinationPassengerStatistics(a),
AirportTrafficMVVM.TrafficType.Passengers));
}
foreach (Airport a in cargoDestinations.Take(20))
{
Traffic.Add(
new AirportTrafficMVVM(
a,
Convert.ToInt64(Airport.GetDestinationCargoStatistics(a)),
AirportTrafficMVVM.TrafficType.Cargo));
}
Flights = new List<DestinationFlightsMVVM>();
IEnumerable<Route> airportRoutes =
AirportHelpers.GetAirportRoutes(Airport).Where(r => r.GetAirliners().Count > 0);
foreach (Route airportRoute in airportRoutes)
{
double distance = MathHelpers.GetDistance(airportRoute.Destination1, airportRoute.Destination2);
Airport destination = airportRoute.Destination1 == Airport
? airportRoute.Destination2
: airportRoute.Destination1;
if (Flights.Exists(f => f.Airline == airportRoute.Airline && f.Airport == destination))
{
DestinationFlightsMVVM flight =
Flights.First(f => f.Airline == airportRoute.Airline && f.Airport == destination);
flight.Flights += airportRoute.TimeTable.GetEntries(destination).Count;
foreach (AirlinerType aircraft in airportRoute.GetAirliners().Select(a => a.Airliner.Type))
{
if (!flight.Aircrafts.Contains(aircraft))
{
flight.Aircrafts.Add(aircraft);
}
}
}
else
{
Flights.Add(
new DestinationFlightsMVVM(
destination,
airportRoute.Airline,
distance,
airportRoute.GetAirliners().Select(a => a.Airliner.Type).ToList(),
airportRoute.TimeTable.GetEntries(destination).Count));
}
}
/*
Dictionary<Airport, int> destinations = new Dictionary<Airport, int>();
foreach (Route route in AirportHelpers.GetAirportRoutes(this.Airport).FindAll(r => r.getAirliners().Count > 0))
{
if (route.Destination1 != this.Airport)
{
if (!destinations.ContainsKey(route.Destination1))
destinations.Add(route.Destination1, 0);
destinations[route.Destination1] += route.TimeTable.getEntries(route.Destination1).Count;
}
if (route.Destination2 != this.Airport)
{
if (!destinations.ContainsKey(route.Destination2))
destinations.Add(route.Destination2, 0);
destinations[route.Destination2] += route.TimeTable.getEntries(route.Destination2).Count;
}
}
foreach (Airport a in destinations.Keys)
this.Flights.Add(new DestinationFlightsMVVM(a, destinations[a]));
*/
Hubs = new ObservableCollection<Hub>();
foreach (Hub hub in Airport.GetHubs())
{
Hubs.Add(hub);
}
CanBuildHub = canBuildHub();
CanMakeCooperation = GameObject.GetInstance().HumanAirline.Airports.Exists(a => a == Airport);
LocalTime = MathHelpers.ConvertDateTimeToLoalTime(
GameObject.GetInstance().GameTime,
Airport.Profile.TimeZone);
ShowLocalTime = !GameObject.GetInstance().DayRoundEnabled;
AirlineReputations = new List<AirlineReputationMVVM>();
IDictionary<Airline, double> airlineScores = new Dictionary<Airline, double>();
foreach (Airline airline in Airlines.GetAllAirlines())
{
airlineScores.Add(airline, Airport.GetAirlineReputation(airline));
}
foreach (var score in StatisticsHelpers.GetRatingScale(airlineScores))
{
AirlineReputations.Add(new AirlineReputationMVVM(score.Key, (int)score.Value));
}
}