private static void CreateComputerRoutes(Airline airline) { bool 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, bool>? 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, true); counter++; } if (airportDestination == null || !airliner.HasValue) { CreateComputerRoutes(airline); } else { AirportHelpers.AddAirlineContract( new AirportContract( airline, airportHomeBase, AirportContract.ContractType.Full, airline.AirlineRouteFocus == Route.RouteType.Cargo ? Terminal.TerminalType.Cargo : Terminal.TerminalType.Passenger, GameObject.GetInstance().GameTime, 2, 25, 0, true)); AirportHelpers.RentGates(airportDestination, airline, AirportContract.ContractType.LowService); //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.Helicopter) { route = new HelicopterRoute( id.ToString(), airportDestination, airline.Airports[0], GameObject.GetInstance().GameTime, price); RouteClassesConfiguration configuration = AIHelpers.GetRouteConfiguration((HelicopterRoute) route); foreach (RouteClassConfiguration classConfiguration in configuration.GetClasses()) { ((HelicopterRoute) route).GetRouteAirlinerClass(classConfiguration.Type).FarePrice = price *GeneralHelpers .ClassToPriceFactor ( classConfiguration .Type); foreach (RouteFacility rFacility in classConfiguration.GetFacilities()) { ((HelicopterRoute) 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()); } var fAirliner = new FleetAirliner( leaseAircraft ? FleetAirliner.PurchasedType.Leased : FleetAirliner.PurchasedType.Bought, GameObject.GetInstance().GameTime, airline, airliner.Value.Key, airportHomeBase) {Status = FleetAirliner.AirlinerStatus.ToRouteStart}; fAirliner.AddRoute(route); AirlinerHelpers.CreateAirlinerClasses(fAirliner.Airliner); AirlineHelpers.HireAirlinerPilots(fAirliner); airline.AddAirliner(fAirliner); airline.AddRoute(route); if (route != null) { 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); } } } } }
private Boolean createRoute() { SpecialContract contract = null; if (Contracts.Count > 0 && cbContract.SelectedItem != null) { contract = (SpecialContract)cbContract.SelectedItem; } Route route = null; var destination1 = (Airport)cbDestination1.SelectedItem; var destination2 = (Airport)cbDestination2.SelectedItem; var stopover1 = (Airport)cbStopover1.SelectedItem; Airport stopover2 = cbStopover2.Visibility == Visibility.Visible ? (Airport)cbStopover2.SelectedItem : null; DateTime startDate = dpStartDate.IsEnabled && dpStartDate.SelectedDate.HasValue ? dpStartDate.SelectedDate.Value : GameObject.GetInstance().GameTime; Weather.Season season = rbSeasonAll.IsChecked.Value ? Weather.Season.AllYear : Weather.Season.Winter; season = rbSeasonSummer.IsChecked.Value ? Weather.Season.Summer : season; season = rbSeasonWinter.IsChecked.Value ? Weather.Season.Winter : season; Boolean routeExists = GameObject.GetInstance().HumanAirline.Routes.Exists(r => r.Destination1 == destination1 && r.Destination2 == destination2); if (routeExists) { WPFMessageBox.Show( Translator.GetInstance().GetString("MessageBox", "3006"), string.Format(Translator.GetInstance().GetString("MessageBox", "3006", "message"), destination1.Profile.Name, destination2.Profile.Name), WPFMessageBoxButtons.Ok); return false; } try { if (AirlineHelpers.IsRouteDestinationsOk( GameObject.GetInstance().HumanAirline, destination1, destination2, RouteType, stopover1, stopover2)) { Guid id = Guid.NewGuid(); //passenger route if (RouteType == Route.RouteType.Passenger) { route = new PassengerRoute(id.ToString(), destination1, destination2, startDate, 0); foreach (MVVMRouteClass rac in Classes.Where(c => c.IsUseable)) { ((PassengerRoute)route).GetRouteAirlinerClass(rac.Type).FarePrice = rac.FarePrice; foreach (MVVMRouteFacility facility in rac.Facilities) { ((PassengerRoute)route).GetRouteAirlinerClass(rac.Type) .AddFacility(facility.SelectedFacility); } } } //cargo route else if (RouteType == Route.RouteType.Cargo) { double cargoPrice = Convert.ToDouble(txtCargoPrice.Text); route = new CargoRoute(id.ToString(), destination1, destination2, startDate, cargoPrice); } else if (RouteType == Route.RouteType.Helicopter) { route = new HelicopterRoute(id.ToString(), destination1, destination2, startDate, 0); foreach (MVVMRouteClass rac in Classes.Where(c => c.IsUseable)) { ((HelicopterRoute)route).GetRouteAirlinerClass(rac.Type).FarePrice = rac.FarePrice; foreach (MVVMRouteFacility facility in rac.Facilities) { ((HelicopterRoute)route).GetRouteAirlinerClass(rac.Type) .AddFacility(facility.SelectedFacility); } } } else if (RouteType == Route.RouteType.Mixed) { double cargoPrice = Convert.ToDouble(txtCargoPrice.Text); route = new CombiRoute(id.ToString(), destination1, destination2, startDate, 0, cargoPrice); foreach (MVVMRouteClass rac in Classes.Where(c => c.IsUseable)) { ((PassengerRoute)route).GetRouteAirlinerClass(rac.Type).FarePrice = rac.FarePrice; foreach (MVVMRouteFacility facility in rac.Facilities) { ((PassengerRoute)route).GetRouteAirlinerClass(rac.Type) .AddFacility(facility.SelectedFacility); } } } FleetAirlinerHelpers.CreateStopoverRoute(route, stopover1, stopover2); route.Season = season; GameObject.GetInstance().HumanAirline.AddRoute(route); if (contract != null) contract.Routes.Add(route); return true; } } catch (Exception ex) { WPFMessageBox.Show( Translator.GetInstance().GetString("MessageBox", ex.Message), Translator.GetInstance().GetString("MessageBox", ex.Message, "message"), WPFMessageBoxButtons.Ok); return false; } return false; }