//sets up an scenario airline route private static void SetupScenarioRoute(ScenarioAirlineRoute saroute, Airline airline) { SetupScenarioAirport(airline, saroute.Destination1, saroute.Quantity); SetupScenarioAirport(airline, saroute.Destination2, saroute.Quantity); double price = PassengerHelpers.GetPassengerPrice(saroute.Destination1, saroute.Destination2); for (int i = 0; i < saroute.Quantity; i++) { Guid id = Guid.NewGuid(); PassengerRoute route = new PassengerRoute(id.ToString(), saroute.Destination1, saroute.Destination2, price); RouteClassesConfiguration configuration = AIHelpers.GetRouteConfiguration(route); foreach (RouteClassConfiguration classConfiguration in configuration.getClasses()) { route.getRouteAirlinerClass(classConfiguration.Type).FarePrice = price * GeneralHelpers.ClassToPriceFactor(classConfiguration.Type); foreach (RouteFacility rfacility in classConfiguration.getFacilities()) route.getRouteAirlinerClass(classConfiguration.Type).addFacility(rfacility); } airline.addRoute(route); FleetAirliner fAirliner = AirlineHelpers.CreateAirliner(airline, saroute.AirlinerType); airline.addAirliner(fAirliner); fAirliner.addRoute(route); AIHelpers.CreateRouteTimeTable(route, fAirliner); fAirliner.Status = FleetAirliner.AirlinerStatus.To_route_start; AirlineHelpers.HireAirlinerPilots(fAirliner); route.LastUpdated = GameObject.GetInstance().GameTime; } }
/*! creates some airliners and routes for a computer airline. */ private static void CreateComputerRoutes(Airline airline) { Boolean leaseAircraft = airline.Profile.PrimaryPurchasing == AirlineProfile.PreferedPurchasing.Leasing; Airport airportHomeBase = FindComputerHomeBase(airline); AirportFacility serviceFacility = AirportFacilities.GetFacilities(AirportFacility.FacilityType.Service).Find(f => f.TypeLevel == 1); AirportFacility checkinFacility = AirportFacilities.GetFacilities(AirportFacility.FacilityType.CheckIn).Find(f => f.TypeLevel == 1); AirportFacility cargoTerminal = AirportFacilities.GetFacilities(AirportFacility.FacilityType.Cargo).Find(f => f.TypeLevel > 0); airportHomeBase.addAirportFacility(airline, serviceFacility, GameObject.GetInstance().GameTime); airportHomeBase.addAirportFacility(airline, checkinFacility, GameObject.GetInstance().GameTime); if (airline.AirlineRouteFocus == Route.RouteType.Cargo) airportHomeBase.addAirportFacility(airline, cargoTerminal, GameObject.GetInstance().GameTime); AirlineStartData startData = AirlineStartDatas.GetAirlineStartData(airline); //creates the start data for an airline if (startData != null) { AirportHelpers.RentGates(airportHomeBase, airline, AirportContract.ContractType.Full); CreateAirlineStartData(airline, startData); } else { List<Airport> airportDestinations = AIHelpers.GetDestinationAirports(airline, airportHomeBase); if (airportDestinations.Count == 0) { airportDestinations = Airports.GetAirports(a => a.Profile.Country.Region == airportHomeBase.Profile.Country.Region && a != airportHomeBase); } KeyValuePair<Airliner, Boolean>? airliner = null; Airport airportDestination = null; int counter = 0; while ((airportDestination == null || airliner == null || !airliner.HasValue) && airportDestinations.Count > counter) { airportDestination = airportDestinations[counter]; airliner = AIHelpers.GetAirlinerForRoute(airline, airportHomeBase, airportDestination, leaseAircraft, airline.AirlineRouteFocus == Route.RouteType.Cargo, true); counter++; } if (airportDestination == null || !airliner.HasValue) { CreateComputerRoutes(airline); } else { AirportHelpers.AddAirlineContract(new AirportContract(airline, airportHomeBase, AirportContract.ContractType.Full, GameObject.GetInstance().GameTime, 2, 25, 0, true)); AirportHelpers.RentGates(airportDestination, airline, AirportContract.ContractType.Low_Service); //airportDestination.addAirportFacility(airline, checkinFacility, GameObject.GetInstance().GameTime); Guid id = Guid.NewGuid(); double price = PassengerHelpers.GetPassengerPrice(airportDestination, airline.Airports[0]); Route route = null; if (airline.AirlineRouteFocus == Route.RouteType.Passenger) { route = new PassengerRoute(id.ToString(), airportDestination, airline.Airports[0], GameObject.GetInstance().GameTime, price); RouteClassesConfiguration configuration = AIHelpers.GetRouteConfiguration((PassengerRoute)route); foreach (RouteClassConfiguration classConfiguration in configuration.getClasses()) { ((PassengerRoute)route).getRouteAirlinerClass(classConfiguration.Type).FarePrice = price * GeneralHelpers.ClassToPriceFactor(classConfiguration.Type); foreach (RouteFacility rFacility in classConfiguration.getFacilities()) ((PassengerRoute)route).getRouteAirlinerClass(classConfiguration.Type).addFacility(rFacility); } } if (airline.AirlineRouteFocus == Route.RouteType.Cargo) { route = new CargoRoute(id.ToString(), airportDestination, airline.Airports[0], GameObject.GetInstance().GameTime, PassengerHelpers.GetCargoPrice(airportDestination, airline.Airports[0])); airportDestination.addAirportFacility(airline, cargoTerminal, GameObject.GetInstance().GameTime); } if (leaseAircraft) AirlineHelpers.AddAirlineInvoice(airline, GameObject.GetInstance().GameTime, Invoice.InvoiceType.Rents, -airliner.Value.Key.LeasingPrice * 2); else AirlineHelpers.AddAirlineInvoice(airline, GameObject.GetInstance().GameTime, Invoice.InvoiceType.Purchases, -airliner.Value.Key.getPrice()); FleetAirliner fAirliner = new FleetAirliner(leaseAircraft ? FleetAirliner.PurchasedType.Leased : FleetAirliner.PurchasedType.Bought, GameObject.GetInstance().GameTime, airline, airliner.Value.Key, airportHomeBase); fAirliner.Status = FleetAirliner.AirlinerStatus.To_route_start; fAirliner.addRoute(route); AirlinerHelpers.CreateAirlinerClasses(fAirliner.Airliner); AirlineHelpers.HireAirlinerPilots(fAirliner); airline.addAirliner(fAirliner); airline.addRoute(route); route.LastUpdated = GameObject.GetInstance().GameTime; if (route.Type == Route.RouteType.Passenger || route.Type == Route.RouteType.Mixed) { AIHelpers.CreateRouteTimeTable(route, fAirliner); } if (route.Type == Route.RouteType.Cargo) { AIHelpers.CreateCargoRouteTimeTable(route, fAirliner); } } } }
//switches from one airline to another airline public static void SwitchAirline(Airline airlineFrom, Airline airlineTo) { while (airlineFrom.Alliances.Count > 0) { Alliance alliance = airlineFrom.Alliances[0]; alliance.removeMember(airlineFrom); alliance.addMember(new AllianceMember(airlineTo, GameObject.GetInstance().GameTime)); } while (airlineFrom.Facilities.Count > 0) { AirlineFacility airlineFacility = airlineFrom.Facilities[0]; airlineFrom.removeFacility(airlineFacility); airlineTo.addFacility(airlineFacility); } while (airlineFrom.getFleetSize() > 0) { FleetAirliner airliner = airlineFrom.Fleet[0]; airlineFrom.removeAirliner(airliner); airlineTo.addAirliner(airliner); airliner.Airliner.Airline = airlineTo; } while (airlineFrom.Routes.Count > 0) { Route route = airlineFrom.Routes[0]; route.Airline = airlineTo; airlineFrom.removeRoute(route); airlineTo.addRoute(route); } while (airlineFrom.Pilots.Count > 0) { Pilot pilot = airlineFrom.Pilots[0]; airlineFrom.removePilot(pilot); pilot.Airline = airlineTo; airlineTo.addPilot(pilot); } while (airlineFrom.Airports.Count > 0) { Airport airport = airlineFrom.Airports[0]; airport.Terminals.switchAirline(airlineFrom, airlineTo); foreach (AirportFacility facility in airport.getCurrentAirportFacilities(airlineFrom)) { if (facility.TypeLevel > airport.getCurrentAirportFacility(airlineTo, facility.Type).TypeLevel) airport.addAirportFacility(airlineTo, facility, GameObject.GetInstance().GameTime); AirportFacility noneFacility = AirportFacilities.GetFacilities(facility.Type).Find(f => f.TypeLevel == 0); airport.addAirportFacility(airlineFrom, noneFacility, GameObject.GetInstance().GameTime); } } }
/*!creates the start data for an airline */ private static void CreateAirlineStartData(Airline airline, AirlineStartData startData) { AirportFacility checkinFacility = AirportFacilities.GetFacilities(AirportFacility.FacilityType.CheckIn).Find(f => f.TypeLevel == 1); AirportFacility cargoTerminal = AirportFacilities.GetFacilities(AirportFacility.FacilityType.Cargo).Find(f => f.TypeLevel > 0); // int difficultyFactor = GameObject.GetInstance().Difficulty.AILevel > 1 ? 2 : 1; //level easy int startDataFactor = Convert.ToInt16(GameObject.GetInstance().Difficulty.StartDataLevel); var startroutes = startData.Routes.FindAll(r => r.Opened <= GameObject.GetInstance().GameTime.Year && r.Closed >= GameObject.GetInstance().GameTime.Year); //creates the routes var sRoutes = startroutes.GetRange(0, startroutes.Count / startDataFactor); Parallel.ForEach(sRoutes, startRoute => { Airport dest1 = Airports.GetAirport(startRoute.Destination1); Airport dest2 = Airports.GetAirport(startRoute.Destination2); if (dest1 != null && dest2 != null) { //if (dest1.getAirportFacility(airline, AirportFacility.FacilityType.CheckIn).TypeLevel == 0) //dest1.addAirportFacility(airline, checkinFacility, GameObject.GetInstance().GameTime); //if (dest2.getAirportFacility(airline, AirportFacility.FacilityType.CheckIn).TypeLevel == 0) //dest2.addAirportFacility(airline, checkinFacility, GameObject.GetInstance().GameTime); if (dest1.getAirportFacility(airline, AirportFacility.FacilityType.Cargo).TypeLevel == 0 && dest1.getAirportFacility(null, AirportFacility.FacilityType.Cargo).TypeLevel == 0 && airline.AirlineRouteFocus == Route.RouteType.Cargo) dest1.addAirportFacility(airline, cargoTerminal, GameObject.GetInstance().GameTime); if (dest2.getAirportFacility(airline, AirportFacility.FacilityType.Cargo).TypeLevel == 0 && dest2.getAirportFacility(null, AirportFacility.FacilityType.Cargo).TypeLevel == 0 && airline.AirlineRouteFocus == Route.RouteType.Cargo) dest2.addAirportFacility(airline, cargoTerminal, GameObject.GetInstance().GameTime); if (!AirportHelpers.HasFreeGates(dest1, airline)) AirportHelpers.RentGates(dest1, airline, AirportContract.ContractType.Low_Service); if (!AirportHelpers.HasFreeGates(dest2, airline)) AirportHelpers.RentGates(dest2, airline, AirportContract.ContractType.Low_Service); Guid id = Guid.NewGuid(); Route route = null; double price = PassengerHelpers.GetPassengerPrice(dest1, dest2); if (startRoute.RouteType == Route.RouteType.Mixed || startRoute.RouteType == Route.RouteType.Passenger) { route = new PassengerRoute(id.ToString(), dest1, dest2, GameObject.GetInstance().GameTime, price); } if (startRoute.RouteType == Route.RouteType.Cargo) route = new CargoRoute(id.ToString(), dest1, dest2, GameObject.GetInstance().GameTime, PassengerHelpers.GetCargoPrice(dest1, dest2)); KeyValuePair<Airliner, Boolean>? airliner = null; if (startRoute.Type != null) { double distance = MathHelpers.GetDistance(dest1, dest2); if (startRoute.Type.Range > distance) { airliner = new KeyValuePair<Airliner, bool>(Airliners.GetAirlinersForSale(a => a.Type == startRoute.Type).FirstOrDefault(), true); if (airliner.Value.Key == null) { id = Guid.NewGuid(); Airliner nAirliner = new Airliner(id.ToString(), startRoute.Type, airline.Profile.Country.TailNumbers.getNextTailNumber(), GameObject.GetInstance().GameTime); Airliners.AddAirliner(nAirliner); nAirliner.clearAirlinerClasses(); AirlinerHelpers.CreateAirlinerClasses(nAirliner); airliner = new KeyValuePair<Airliner, bool>(nAirliner, true); } } } Boolean leaseAircraft = airline.Profile.PrimaryPurchasing == AirlineProfile.PreferedPurchasing.Leasing; if (airliner == null) { airliner = AIHelpers.GetAirlinerForRoute(airline, dest2, dest1, leaseAircraft, startRoute.RouteType == Route.RouteType.Cargo, true); if (airliner == null && airline.Profile.PrimaryPurchasing == AirlineProfile.PreferedPurchasing.Random) AIHelpers.GetAirlinerForRoute(airline, dest2, dest1, true, startRoute.RouteType == Route.RouteType.Cargo, true); } if (airliner != null) { FleetAirliner fAirliner = AirlineHelpers.AddAirliner(airline, airliner.Value.Key, airline.Airports[0],leaseAircraft); fAirliner.addRoute(route); fAirliner.Status = FleetAirliner.AirlinerStatus.To_route_start; AirlineHelpers.HireAirlinerPilots(fAirliner); route.LastUpdated = GameObject.GetInstance().GameTime; if (startRoute.RouteType == Route.RouteType.Mixed || startRoute.RouteType == Route.RouteType.Passenger) { AirlinerHelpers.CreateAirlinerClasses(fAirliner.Airliner); RouteClassesConfiguration configuration = AIHelpers.GetRouteConfiguration((PassengerRoute)route); foreach (RouteClassConfiguration classConfiguration in configuration.getClasses()) { ((PassengerRoute)route).getRouteAirlinerClass(classConfiguration.Type).FarePrice = price * GeneralHelpers.ClassToPriceFactor(classConfiguration.Type); foreach (RouteFacility rFacility in classConfiguration.getFacilities()) ((PassengerRoute)route).getRouteAirlinerClass(classConfiguration.Type).addFacility(rFacility); } AIHelpers.CreateRouteTimeTable(route, fAirliner); } if (startRoute.RouteType == Route.RouteType.Cargo) { AIHelpers.CreateCargoRouteTimeTable(route, fAirliner); } } airline.addRoute(route); } }); //adds the airliners Parallel.ForEach(startData.Airliners, airliners => { AirlinerType type = AirlinerTypes.GetType(airliners.Type); int totalSpan = 2010 - 1960; int yearSpan = GameObject.GetInstance().GameTime.Year - 1960; double valueSpan = Convert.ToDouble(airliners.AirlinersLate - airliners.AirlinersEarly); double span = valueSpan / Convert.ToDouble(totalSpan); int numbers = Math.Max(1, Convert.ToInt16(span * yearSpan) / startDataFactor); //type==null if (type.Produced.From <= GameObject.GetInstance().GameTime) { for (int i = 0; i < Math.Max(numbers, airliners.AirlinersEarly); i++) { Guid id = Guid.NewGuid(); int countryNumber = rnd.Next(Countries.GetCountries().Count() - 1); Country country = Countries.GetCountries()[countryNumber]; int builtYear = rnd.Next(type.Produced.From.Year, Math.Min(GameObject.GetInstance().GameTime.Year - 1, type.Produced.To.Year)); Airliner airliner = new Airliner(id.ToString(), type, country.TailNumbers.getNextTailNumber(), new DateTime(builtYear, 1, 1)); int age = MathHelpers.CalculateAge(airliner.BuiltDate, GameObject.GetInstance().GameTime); long kmPerYear = rnd.Next(100000, 1000000); long km = kmPerYear * age; airliner.Flown = km; Airliners.AddAirliner(airliner); Boolean leaseAircraft = airline.Profile.PrimaryPurchasing == AirlineProfile.PreferedPurchasing.Leasing; FleetAirliner fAirliner = AirlineHelpers.AddAirliner(airline, airliner, airline.Airports[0],leaseAircraft); fAirliner.Status = FleetAirliner.AirlinerStatus.Stopped; AirlineHelpers.HireAirlinerPilots(fAirliner); AirlinerHelpers.CreateAirlinerClasses(fAirliner.Airliner); } } }); //the origin routes Parallel.ForEach(startData.OriginRoutes, routes => { Airport origin = Airports.GetAirport(routes.Origin); if (origin != null) { for (int i = 0; i < Math.Min(routes.Destinations / startDataFactor, origin.Terminals.getFreeGates()); i++) { //if (origin.getAirportFacility(airline, AirportFacility.FacilityType.CheckIn).TypeLevel == 0) //origin.addAirportFacility(airline, checkinFacility, GameObject.GetInstance().GameTime); if (!AirportHelpers.HasFreeGates(origin, airline)) AirportHelpers.RentGates(origin, airline, AirportContract.ContractType.Low_Service); Airport destination = GetStartDataRoutesDestination(routes); //if (destination.getAirportFacility(airline, AirportFacility.FacilityType.CheckIn).TypeLevel == 0) //destination.addAirportFacility(airline, checkinFacility, GameObject.GetInstance().GameTime); if (!AirportHelpers.HasFreeGates(destination, airline)) AirportHelpers.RentGates(destination, airline, AirportContract.ContractType.Low_Service); Guid id = Guid.NewGuid(); Route route = null; double price = PassengerHelpers.GetPassengerPrice(origin, destination); if (routes.RouteType == Route.RouteType.Mixed || routes.RouteType == Route.RouteType.Passenger) route = new PassengerRoute(id.ToString(), origin, destination, GameObject.GetInstance().GameTime, price); if (routes.RouteType == Route.RouteType.Cargo) route = new CargoRoute(id.ToString(), origin, destination, GameObject.GetInstance().GameTime, PassengerHelpers.GetCargoPrice(origin, destination)); Boolean leaseAircraft = airline.Profile.PrimaryPurchasing == AirlineProfile.PreferedPurchasing.Leasing; KeyValuePair<Airliner, Boolean>? airliner = AIHelpers.GetAirlinerForRoute(airline, origin, destination, leaseAircraft, routes.RouteType == Route.RouteType.Cargo, true); if (airliner == null && airline.Profile.PrimaryPurchasing == AirlineProfile.PreferedPurchasing.Random) airliner = AIHelpers.GetAirlinerForRoute(airline, origin, destination, true, routes.RouteType == Route.RouteType.Cargo, true); double distance = MathHelpers.GetDistance(origin, destination); if (airliner != null) { FleetAirliner fAirliner = AirlineHelpers.AddAirliner(airline, airliner.Value.Key, airline.Airports[0], leaseAircraft); fAirliner.addRoute(route); fAirliner.Status = FleetAirliner.AirlinerStatus.To_route_start; AirlineHelpers.HireAirlinerPilots(fAirliner); route.LastUpdated = GameObject.GetInstance().GameTime; if (routes.RouteType == Route.RouteType.Passenger || routes.RouteType == Route.RouteType.Mixed) { AirlinerHelpers.CreateAirlinerClasses(fAirliner.Airliner); RouteClassesConfiguration configuration = AIHelpers.GetRouteConfiguration((PassengerRoute)route); foreach (RouteClassConfiguration classConfiguration in configuration.getClasses()) { ((PassengerRoute)route).getRouteAirlinerClass(classConfiguration.Type).FarePrice = price * GeneralHelpers.ClassToPriceFactor(classConfiguration.Type); foreach (RouteFacility rFacility in classConfiguration.getFacilities()) ((PassengerRoute)route).getRouteAirlinerClass(classConfiguration.Type).addFacility(rFacility); } AIHelpers.CreateRouteTimeTable(route, fAirliner); } if (routes.RouteType == Route.RouteType.Cargo) AIHelpers.CreateCargoRouteTimeTable(route, fAirliner); airline.addRoute(route); } } } }); }