private void cbDestination_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (cbDestination1 != null && cbDestination2 != null && txtDistance != null) { Airport destination1 = (Airport)cbDestination1.SelectedItem; Airport destination2 = (Airport)cbDestination2.SelectedItem; if (destination1 != null && destination2 != null) { foreach (MVVMRouteClass rClass in this.Classes) { rClass.FarePrice = PassengerHelpers.GetPassengerPrice(destination1, destination2) * GeneralHelpers.ClassToPriceFactor(rClass.Type); } txtDistance.Text = new DistanceToUnitConverter().Convert(MathHelpers.GetDistance(destination1, destination2)).ToString(); var codesharingRoutes = GameObject.GetInstance().HumanAirline.Codeshares.Where(c => c.Airline2 == GameObject.GetInstance().HumanAirline || c.Type == Model.AirlineModel.CodeshareAgreement.CodeshareType.Both_Ways).Select(c => c.Airline1 == GameObject.GetInstance().HumanAirline ? c.Airline2 : c.Airline1).SelectMany(a => a.Routes); var humanConnectingRoutes = GameObject.GetInstance().HumanAirline.Routes.Where(r => r.Destination1 == destination1 || r.Destination2 == destination1 || r.Destination1 == destination2 || r.Destination2 == destination2); var codesharingConnectingRoutes = codesharingRoutes.Where(r => r.Destination1 == destination1 || r.Destination2 == destination1 || r.Destination1 == destination2 || r.Destination2 == destination2); this.ConnectingRoutes.Clear(); foreach (Route route in humanConnectingRoutes) { this.ConnectingRoutes.Add(route); } foreach (Route route in codesharingConnectingRoutes) { this.ConnectingRoutes.Add(route); } var opponentRoutes = Airlines.GetAllAirlines().Where(a => !a.IsHuman).SelectMany(a => a.Routes).Where(r => (r.Destination1 == destination1 && r.Destination2 == destination2) || (r.Destination2 == destination1 && r.Destination1 == destination2)); if (opponentRoutes.Count() == 0) { this.RouteInformationText = ""; } else { var airlines = opponentRoutes.Select(r => r.Airline).Distinct(); if (airlines.Count() == 1) { this.RouteInformationText = string.Format("{0} also operates a route between {1} and {2}", airlines.ElementAt(0).Profile.Name, destination1.Profile.Name, destination2.Profile.Name); } else { this.RouteInformationText = string.Format("{0} other airlines do also operate a route between {1} and {2}", airlines.Count(), destination1.Profile.Name, destination2.Profile.Name); } } } } }
//sets up the passenger demand for a scenario private static void SetupScenarioPassengerDemand(Scenario scenario) { foreach (ScenarioPassengerDemand demand in scenario.PassengerDemands) { if (demand.Airport != null) { PassengerHelpers.ChangePaxDemand(demand.Factor); } if (demand.Country != null) { PassengerHelpers.ChangePaxDemand(Airports.GetAllAirports(a => a.Profile.Country == demand.Country), demand.Factor); } } }
//checks if an event's effects are expired public static void CheckExpired(DateTime expDate) { foreach (Airline airline in Airlines.GetAllAirlines()) { foreach (RandomEvent rEvent in airline.EventLog) { expDate = GameObject.GetInstance().GameTime.AddMonths(rEvent.EffectLength); if (expDate < GameObject.GetInstance().GameTime) { PassengerHelpers.ChangePaxDemand(airline, (1 / rEvent.PaxDemandEffect)); RemoveEvent(airline, rEvent); } } } }
private void cbDestination_SelectionChanged(object sender, SelectionChangedEventArgs e) { Airport destination1 = (Airport)cbDestination1.SelectedItem; Airport destination2 = (Airport)cbDestination2.SelectedItem; if (destination1 != null && destination2 != null) { foreach (MVVMRouteClass rClass in this.Classes) { rClass.FarePrice = PassengerHelpers.GetPassengerPrice(destination1, destination2) * GeneralHelpers.ClassToPriceFactor(rClass.Type); } txtDistance.Text = new DistanceToUnitConverter().Convert(MathHelpers.GetDistance(destination1, destination2)).ToString(); } }
//updates the pax demands for the scenario private static void UpdatePassengerDemands(ScenarioObject scenario) { foreach (ScenarioPassengerDemand demand in scenario.Scenario.PassengerDemands) { if (GameObject.GetInstance().GameTime.ToShortDateString() == demand.EndDate.ToShortDateString()) { if (demand.Airport != null) { PassengerHelpers.ChangePaxDemand(-demand.Factor); } if (demand.Country != null) { PassengerHelpers.ChangePaxDemand(Airports.GetAllAirports(a => a.Profile.Country == demand.Country), -demand.Factor); } } } }
/* * //sets the statistics from a take off * private static void SetTakeoffStatistics(FleetAirliner airliner) * { * Airport airport = airliner.CurrentFlight.Entry.DepartureAirport; * * airport.Statistics.addStatisticsValue(GameObject.GetInstance().GameTime.Year, airliner.Airliner.Airline, StatisticsTypes.GetStatisticsType("Departures"), 1); * * double destPassengers = airport.Statistics.getStatisticsValue(GameObject.GetInstance().GameTime.Year, airliner.Airliner.Airline, StatisticsTypes.GetStatisticsType("Passengers")); * double destDepartures = airport.Statistics.getStatisticsValue(GameObject.GetInstance().GameTime.Year, airliner.Airliner.Airline, StatisticsTypes.GetStatisticsType("Arrivals")); * airport.Statistics.setStatisticsValue(GameObject.GetInstance().GameTime.Year, airliner.Airliner.Airline, StatisticsTypes.GetStatisticsType("Passengers%"), (int)(destPassengers / destDepartures)); * * * airliner.Airliner.Airline.Statistics.addStatisticsValue(GameObject.GetInstance().GameTime.Year, StatisticsTypes.GetStatisticsType("Departures"), 1); * airliner.Statistics.addStatisticsValue(GameObject.GetInstance().GameTime.Year, StatisticsTypes.GetStatisticsType("Departures"), 1); * * foreach (AirlinerClass aClass in airliner.Airliner.Classes) * { * RouteAirlinerClass raClass = airliner.CurrentFlight.Entry.TimeTable.Route.getRouteAirlinerClass(aClass.Type); * * airliner.CurrentFlight.Entry.TimeTable.Route.Statistics.addStatisticsValue(raClass, StatisticsTypes.GetStatisticsType("Departures"), 1); * } * double airlinerPassengers = airliner.Statistics.getStatisticsValue(GameObject.GetInstance().GameTime.Year, StatisticsTypes.GetStatisticsType("Passengers")); * double airlinerDepartures = airliner.Statistics.getStatisticsValue(GameObject.GetInstance().GameTime.Year, StatisticsTypes.GetStatisticsType("Departures")); * airliner.Statistics.setStatisticsValue(GameObject.GetInstance().GameTime.Year, StatisticsTypes.GetStatisticsType("Passengers%"), (int)(airlinerPassengers / airlinerDepartures)); * * * double airlinePassengers = airliner.Airliner.Airline.Statistics.getStatisticsValue(GameObject.GetInstance().GameTime.Year, StatisticsTypes.GetStatisticsType("Passengers")); * double airlineDepartures = airliner.Airliner.Airline.Statistics.getStatisticsValue(GameObject.GetInstance().GameTime.Year, StatisticsTypes.GetStatisticsType("Departures")); * airliner.Airliner.Airline.Statistics.setStatisticsValue(GameObject.GetInstance().GameTime.Year, StatisticsTypes.GetStatisticsType("Passengers%"), (int)(airlinePassengers / airlineDepartures)); * * }*/ //creates the happiness for a landed route airliner private static void CreatePassengersHappiness(FleetAirliner airliner) { int serviceLevel = 0;//airliner.Route.DrinksFacility.ServiceLevel + airliner.Route.FoodFacility.ServiceLevel + airliner.Airliner.Airliner.getFacility(AirlinerFacility.FacilityType.Audio).ServiceLevel + airliner.Airliner.Airliner.getFacility(AirlinerFacility.FacilityType.Seat).ServiceLevel + airliner.Airliner.Airliner.getFacility(AirlinerFacility.FacilityType.Video).ServiceLevel; int happyValue = airliner.CurrentFlight.IsOnTime ? 10 : 20; happyValue -= (serviceLevel / 25); for (int i = 0; i < airliner.CurrentFlight.getTotalPassengers(); i++) { Boolean isHappy = rnd.Next(100) > happyValue; if (isHappy) { PassengerHelpers.AddPassengerHappiness(airliner.Airliner.Airline); } } }
//applies the effects of an event public void ExecuteEvents(Airline airline, DateTime time) { Random rnd = new Random(); foreach (RandomEvent rEvent in airline.EventLog) { if (rEvent.DateOccurred.DayOfYear == time.DayOfYear) { rEvent.Airliner.Airliner.Condition += AircraftDamageEffect; airline.Money += rEvent.FinancialPenalty; airline.Scores.CHR.Add(rEvent.CustomerHappinessEffect); airline.Scores.EHR.Add(rEvent.EmployeeHappinessEffect); airline.Scores.Safety.Add(rEvent.AirlineSafetyEffect); airline.Scores.Security.Add(rEvent.AirlineSecurityEffect); PassengerHelpers.ChangePaxDemand(airline, (rEvent.PaxDemandEffect * rnd.Next(9, 11) / 10)); } } }
private void btnLoadGame_Click(object sender, RoutedEventArgs e) { String file = (String)PopUpLoad.ShowPopUp(); if (file != null) { Setup.SetupGame(); //LoadSaveHelpers.LoadGame(file); SerializedLoadSaveHelpers.LoadGame(file); HolidayYear.Clear(); GeneralHelpers.CreateHolidays(GameObject.GetInstance().GameTime.Year); GameObjectWorker.GetInstance().start(); PageNavigator.NavigateTo(new PageAirline(GameObject.GetInstance().HumanAirline)); Action action = () => { PassengerHelpers.CreateDestinationDemand(); var airports = Airports.GetAllAirports(); int count = airports.Count; //var airports = Airports.GetAirports(a => a != airport && a.Profile.Town != airport.Profile.Town && MathHelpers.GetDistance(a.Profile.Coordinates, airport.Profile.Coordinates) > 50); Parallel.For(0, count - 1, i => { Parallel.For(i + 1, count, j => { airports[j].Statics.addDistance(airports[i], MathHelpers.GetDistance(airports[j], airports[i])); }); }); }; Task.Factory.StartNew(action); } }
//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 a new game private void createNewGame() { if (txtName.Text.Trim().Length > 2) { object o = null; int startYear = (int)cbStartYear.SelectedItem; int opponents = (int)cbOpponents.SelectedItem; Airline airline = (Airline)cbAirline.SelectedItem; Continent continent = (Continent)cbContinent.SelectedItem; Region region = (Region)cbRegion.SelectedItem; if (this.OpponentType == OpponentSelect.User) { if (cbSameRegion.IsChecked.Value) { o = PopUpSelectOpponents.ShowPopUp(airline, opponents, startYear, airline.Profile.Country.Region); } else { o = PopUpSelectOpponents.ShowPopUp(airline, opponents, startYear, region, continent); } } // popUpSplash.IsOpen = true; DoEvents(); GameTimeZone gtz = (GameTimeZone)cbTimeZone.SelectedItem; GameObject.GetInstance().DayRoundEnabled = cbDayTurnEnabled.IsChecked.Value; GameObject.GetInstance().TimeZone = gtz; GameObject.GetInstance().Difficulty = (DifficultyLevel)cbDifficulty.SelectedItem; GameObject.GetInstance().GameTime = new DateTime(startYear, 1, 1); GameObject.GetInstance().StartDate = GameObject.GetInstance().GameTime; //sets the fuel price GameObject.GetInstance().FuelPrice = Inflations.GetInflation(GameObject.GetInstance().GameTime.Year).FuelPrice; airline.Profile.Country = (Country)cbCountry.SelectedItem; airline.Profile.CEO = txtName.Text.Trim(); GameObject.GetInstance().setHumanAirline(airline); GameObject.GetInstance().MainAirline = GameObject.GetInstance().HumanAirline; if (cbLocalCurrency.IsChecked.Value) { GameObject.GetInstance().CurrencyCountry = airline.Profile.Country; } // AppSettings.GetInstance().resetCurrencyFormat(); Airport airport = (Airport)cbAirport.SelectedItem; AirportHelpers.RentGates(airport, airline, 2); AirportFacility checkinFacility = AirportFacilities.GetFacilities(AirportFacility.FacilityType.CheckIn).Find(f => f.TypeLevel == 1); AirportFacility facility = AirportFacilities.GetFacilities(AirportFacility.FacilityType.Service).Find((delegate(AirportFacility f) { return(f.TypeLevel == 1); })); airport.addAirportFacility(GameObject.GetInstance().HumanAirline, facility, GameObject.GetInstance().GameTime); airport.addAirportFacility(GameObject.GetInstance().HumanAirline, checkinFacility, GameObject.GetInstance().GameTime); if (continent.Uid != "100" || region.Uid != "100") { var airlines = Airlines.GetAirlines(a => a.Profile.Country.Region == region || (region.Uid == "100" && continent.hasRegion(a.Profile.Country.Region)) && a.Profile.Founded <= startYear && a.Profile.Folded > startYear); var airports = Airports.GetAirports(a => a.Profile.Country.Region == region || (region.Uid == "100" && continent.hasRegion(a.Profile.Country.Region)) && a.Profile.Period.From.Year <= startYear && a.Profile.Period.To.Year > startYear); //Airports.RemoveAirports(a => (a.Profile.Country.Region != region && !continent.hasRegion(a.Profile.Country.Region)) || (a.Profile.Town.State != null && a.Profile.Town.State.IsOverseas)); Airports.Clear(); foreach (Airport a in airports) { Airports.AddAirport(a); } Airlines.Clear(); foreach (Airline a in airlines) { Airlines.AddAirline(a); } } PassengerHelpers.CreateAirlineDestinationDemand(); AirlinerHelpers.CreateStartUpAirliners(); if (this.OpponentType == OpponentSelect.Random || o == null) { Setup.SetupMainGame(opponents, cbSameRegion.IsChecked.Value); } else { Setup.SetupMainGame((List <Airline>)o); } airline.MarketFocus = (Airline.AirlineFocus)cbFocus.SelectedItem; GeneralHelpers.CreateHolidays(GameObject.GetInstance().GameTime.Year); //PassengerHelpers.CreateDestinationPassengers(); GameObjectWorker.GetInstance().start(); // AIWorker.GetInstance().start(); PageNavigator.NavigateTo(new PageAirline(GameObject.GetInstance().HumanAirline)); PageNavigator.ClearNavigator(); //GameObject.GetInstance().HumanAirline.Money = 10000000000000; GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Standard_News, GameObject.GetInstance().GameTime, Translator.GetInstance().GetString("News", "1001"), string.Format(Translator.GetInstance().GetString("News", "1001", "message"), GameObject.GetInstance().HumanAirline.Profile.CEO, GameObject.GetInstance().HumanAirline.Profile.IATACode))); popUpSplash.IsOpen = false; Action action = () => { Stopwatch swPax = new Stopwatch(); swPax.Start(); PassengerHelpers.CreateDestinationDemand(); Console.WriteLine("Demand have been created in {0} ms.", swPax.ElapsedMilliseconds); swPax.Stop(); }; Task.Factory.StartNew(action); //Task.Run(action); //Task t2 = Task.Factory.StartNew(action, "passengers"); } else { WPFMessageBox.Show(Translator.GetInstance().GetString("MessageBox", "2403"), Translator.GetInstance().GetString("MessageBox", "2403"), WPFMessageBoxButtons.Ok); } }
//sets up a scenario public static void SetupScenario(Scenario scenario) { Airline airline = scenario.Airline; GameObject.GetInstance().DayRoundEnabled = true; GameObject.GetInstance().TimeZone = scenario.Homebase.Profile.TimeZone; GameObject.GetInstance().Difficulty = scenario.Difficulty; GameObject.GetInstance().GameTime = new DateTime(scenario.StartYear, 1, 1); GameObject.GetInstance().StartDate = GameObject.GetInstance().GameTime; //sets the fuel price GameObject.GetInstance().FuelPrice = Inflations.GetInflation(GameObject.GetInstance().GameTime.Year).FuelPrice; GameObject.GetInstance().setHumanAirline(airline); GameObject.GetInstance().MainAirline = GameObject.GetInstance().HumanAirline; GameObject.GetInstance().HumanAirline.Money = scenario.StartCash; GameObject.GetInstance().Scenario = new ScenarioObject(scenario); Airport airport = scenario.Homebase; SetupScenarioAirport(airline, airport); // PassengerHelpers.CreateDestinationPassengers(); AirlinerHelpers.CreateStartUpAirliners(); int pilotsPool = 100 * Airlines.GetAllAirlines().Count; GeneralHelpers.CreatePilots(pilotsPool); int instructorsPool = 75 * Airlines.GetAllAirlines().Count; GeneralHelpers.CreateInstructors(instructorsPool); SetupScenarioAirlines(scenario); SetupScenario(); Setup.SetupAlliances(); PassengerHelpers.CreateAirlineDestinationDemand(); GeneralHelpers.CreateHolidays(GameObject.GetInstance().GameTime.Year); GameObjectWorker.GetInstance().start(); PageNavigator.NavigateTo(new PageAirline(GameObject.GetInstance().HumanAirline)); PageNavigator.ClearNavigator(); // GameObject.GetInstance().HumanAirline.Money = 1000000000; GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Standard_News, GameObject.GetInstance().GameTime, Translator.GetInstance().GetString("News", "1001"), string.Format(Translator.GetInstance().GetString("News", "1001", "message"), GameObject.GetInstance().HumanAirline.Profile.CEO, GameObject.GetInstance().HumanAirline.Profile.IATACode))); Action <object> action = (object obj) => { PassengerHelpers.CreateDestinationDemand(); SetupScenarioPassengerDemand(scenario); }; Task t2 = Task.Factory.StartNew(action, "passengers"); }
//creates the quick info panel for the airline private Panel createQuickInfoPanel() { StackPanel panelInfo = new StackPanel(); panelInfo.Margin = new Thickness(5, 0, 10, 0); TextBlock txtHeader = new TextBlock(); txtHeader.Uid = "1001"; txtHeader.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch; txtHeader.SetResourceReference(TextBlock.BackgroundProperty, "HeaderBackgroundBrush"); txtHeader.TextAlignment = TextAlignment.Left; txtHeader.FontWeight = FontWeights.Bold; txtHeader.Text = Translator.GetInstance().GetString("PageAirline", txtHeader.Uid); panelInfo.Children.Add(txtHeader); DockPanel grdQuickInfo = new DockPanel(); //grdQuickInfo.Margin = new Thickness(0, 5, 0, 0); panelInfo.Children.Add(grdQuickInfo); Image imgLogo = new Image(); imgLogo.Source = new BitmapImage(new Uri(this.Airline.Profile.Logo, UriKind.RelativeOrAbsolute)); imgLogo.Width = 110; imgLogo.Margin = new Thickness(0, 0, 5, 0); imgLogo.HorizontalAlignment = System.Windows.HorizontalAlignment.Left; RenderOptions.SetBitmapScalingMode(imgLogo, BitmapScalingMode.HighQuality); grdQuickInfo.Children.Add(imgLogo); StackPanel panelQuickInfo = new StackPanel(); grdQuickInfo.Children.Add(panelQuickInfo); ListBox lbQuickInfo = new ListBox(); lbQuickInfo.ItemContainerStyleSelector = new ListBoxItemStyleSelector(); lbQuickInfo.SetResourceReference(ListBox.ItemTemplateProperty, "QuickInfoItem"); panelQuickInfo.Children.Add(lbQuickInfo); lbQuickInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PageAirline", "1002"), UICreator.CreateTextBlock(this.Airline.Profile.Name))); if (this.Airline.IsSubsidiary) { ContentControl ccParent = new ContentControl(); ccParent.SetResourceReference(ContentControl.ContentTemplateProperty, "AirlineLogoLink"); ccParent.Content = ((SubsidiaryAirline)this.Airline).Airline; lbQuickInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PageAirline", "1021"), ccParent)); } lbQuickInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PageAirline", "1003"), UICreator.CreateTextBlock(this.Airline.Profile.IATACode))); lbQuickInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PageAirline", "1004"), UICreator.CreateTextBlock(this.Airline.Profile.CEO))); lbQuickInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PageAirline", "1024"), UICreator.CreateTextBlock(this.Airline.Profile.Founded.ToString()))); ContentControl lblFlag = new ContentControl(); lblFlag.SetResourceReference(ContentControl.ContentTemplateProperty, "CountryFlagLongItem"); lblFlag.Content = new CountryCurrentCountryConverter().Convert(this.Airline.Profile.Country); lbQuickInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PageAirline", "1005"), lblFlag)); lbQuickInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PageAirline", "1006"), UICreator.CreateColorRect(this.Airline.Profile.Color))); lbQuickInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PageAirline", "1027"), UICreator.CreateTextBlock(new TextUnderscoreConverter().Convert(this.Airline.AirlineRouteFocus).ToString()))); // chs, 2011-10-10 added fleet size to the airline profile TextBlock txtFleetSize = UICreator.CreateTextBlock(string.Format("{0} (+{1} in order)", this.Airline.DeliveredFleet.Count, this.Airline.Fleet.Count - this.Airline.DeliveredFleet.Count)); lbQuickInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PageAirline", "1007"), txtFleetSize)); lbQuickInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PageAirline", "1011"), UICreator.CreateTextBlock(string.Format("{0} / {1}", this.Airline.Airports.Count, Airports.GetAllAirports().Sum(a => a.getHubs().Count(h => h.Airline == this.Airline)))))); lbQuickInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PageAirline", "1008"), createAirlineValuePanel())); lbQuickInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PageAirline", "1009"), createAirlineReputationPanel())); lbQuickInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PageAirline", "1010"), UICreator.CreateTextBlock(String.Format("{0:0.00} %", PassengerHelpers.GetPassengersHappiness(this.Airline))))); lbQuickInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PageAirline", "1012"), UICreator.CreateTextBlock(this.Airline.Alliances.Count > 0 ? string.Join(", ", from a in this.Airline.Alliances select a.Name) : Translator.GetInstance().GetString("PageAirline", "1013")))); WrapPanel panelLicens = new WrapPanel(); txtLicense = UICreator.CreateTextBlock(new TextUnderscoreConverter().Convert(this.Airline.License).ToString()); txtLicense.VerticalAlignment = System.Windows.VerticalAlignment.Bottom; panelLicens.Children.Add(txtLicense); if (this.Airline.IsHuman && this.Airline.License != Airline.AirlineLicense.Long_Haul) { btnUpgradeLicense = new Button(); btnUpgradeLicense.Margin = new Thickness(5, 0, 0, 0); btnUpgradeLicense.Background = Brushes.Transparent; btnUpgradeLicense.Click += btnUpgradeLicense_Click; btnUpgradeLicense.ToolTip = UICreator.CreateToolTip("1014"); Image imgUpgradeLicens = new Image(); imgUpgradeLicens.Source = new BitmapImage(new Uri(@"/Data/images/add.png", UriKind.RelativeOrAbsolute)); imgUpgradeLicens.Height = 16; RenderOptions.SetBitmapScalingMode(imgUpgradeLicens, BitmapScalingMode.HighQuality); btnUpgradeLicense.Content = imgUpgradeLicens; panelLicens.Children.Add(btnUpgradeLicense); } lbQuickInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PageAirline", "1025"), panelLicens)); return(panelInfo); }
//loads a game public static void LoadGame(string file) { string fileName = AppSettings.getCommonApplicationDataPath() + "\\saves\\" + file + ".sav"; DataContractSerializer serializer = new DataContractSerializer(typeof(SaveObject)); SaveObject deserializedSaveObject; using (FileStream stream = new FileStream(fileName, FileMode.Open)) { using (DeflateStream decompress = new DeflateStream(stream, CompressionMode.Decompress)) { deserializedSaveObject = (SaveObject)serializer.ReadObject(decompress); } } //Parrarel for loading the game Parallel.Invoke(() => { Airlines.Clear(); foreach (Airline airline in deserializedSaveObject.airlinesList) { Airlines.AddAirline(airline); } }, () => { Airports.Clear(); foreach (Airport airport in deserializedSaveObject.airportsList) { airport.Statics = new AirportStatics(airport); Airports.AddAirport(airport); } }, () => { Airliners.Clear(); foreach (Airliner airliner in deserializedSaveObject.airlinersList) { Airliners.AddAirliner(airliner); } }, () => { CalendarItems.Clear(); foreach (CalendarItem item in deserializedSaveObject.calendaritemsList) { CalendarItems.AddCalendarItem(item); } Configurations.Clear(); foreach (Configuration configuration in deserializedSaveObject.configurationList) { Configurations.AddConfiguration(configuration); } }, () => { RandomEvents.Clear(); foreach (RandomEvent e in deserializedSaveObject.eventsList) { RandomEvents.AddEvent(e); } }, () => { Alliances.Clear(); foreach (Alliance alliance in deserializedSaveObject.allianceList) { Alliances.AddAlliance(alliance); } }, () => { AirportFacilities.Clear(); foreach (AirportFacility facility in deserializedSaveObject.Airportfacilitieslist) { AirportFacilities.AddFacility(facility); } }, () => { GameObject.SetInstance(deserializedSaveObject.instance); }); //close parallel.invoke //Maybe this helps? But i doubt this is the best way Action action = () => { Stopwatch swPax = new Stopwatch(); swPax.Start(); PassengerHelpers.CreateDestinationDemand(); //Console.WriteLine("Demand have been created in {0} ms.", swPax.ElapsedMilliseconds); swPax.Stop(); }; //Create some pilots for the game int pilotsPool = 100 * Airlines.GetAllAirlines().Count; GeneralHelpers.CreatePilots(pilotsPool); int instructorsPool = 75 * Airlines.GetAllAirlines().Count; GeneralHelpers.CreateInstructors(instructorsPool); //Start the game paused GameObjectWorker.GetInstance().startPaused(); //Task is needed this unlocks the game agian. Task.Factory.StartNew(action); }
//loads a game public static void LoadGame(string file) { string fileName = AppSettings.getCommonApplicationDataPath() + "\\saves\\" + file + ".sav"; SaveObject deserializedSaveObject = FileSerializer.Deserialize <SaveObject>(fileName); /* * * DataContractSerializer serializer = new DataContractSerializer(typeof(SaveObject)); * SaveObject deserializedSaveObject; * string loading; * int version; * * using (FileStream stream = new FileStream(fileName, FileMode.Open)) * { * using (DeflateStream decompress = new DeflateStream(stream, CompressionMode.Decompress)) * { * deserializedSaveObject = (SaveObject)serializer.ReadObject(decompress); * } * } * * loading = deserializedSaveObject.savetype; * version = deserializedSaveObject.saveversionnumber; */ //Parrarel for loading the game Parallel.Invoke(() => { Airlines.Clear(); foreach (Airline airline in deserializedSaveObject.airlinesList) { Airlines.AddAirline(airline); } }, () => { Setup.LoadAirports(); var airports = Airports.GetAllAirports(); Airports.Clear(); foreach (Airport airport in deserializedSaveObject.airportsList) { airport.Statics = new AirportStatics(airport); Airports.AddAirport(airport); } foreach (string iata in deserializedSaveObject.airportsfromstringList) { Airport airport = airports.FirstOrDefault(a => a.Profile.IATACode == iata); if (airport != null) { Airports.AddAirport(airport); } } }, () => { Airliners.Clear(); foreach (Airliner airliner in deserializedSaveObject.airlinersList) { Airliners.AddAirliner(airliner); } }, () => { CalendarItems.Clear(); foreach (CalendarItem item in deserializedSaveObject.calendaritemsList) { CalendarItems.AddCalendarItem(item); } }, () => { Configurations.Clear(); foreach (Configuration configuration in deserializedSaveObject.configurationList) { Configurations.AddConfiguration(configuration); } }, () => { RandomEvents.Clear(); foreach (RandomEvent e in deserializedSaveObject.eventsList) { RandomEvents.AddEvent(e); } }, () => { Alliances.Clear(); foreach (Alliance alliance in deserializedSaveObject.allianceList) { Alliances.AddAlliance(alliance); } }, () => { AirportFacilities.Clear(); foreach (AirportFacility facility in deserializedSaveObject.Airportfacilitieslist) { AirportFacilities.AddFacility(facility); } }, () => { FeeTypes.Clear(); foreach (FeeType type in deserializedSaveObject.feeTypeslist) { FeeTypes.AddType(type); } }, () => { AdvertisementTypes.Clear(); foreach (AdvertisementType addtype in deserializedSaveObject.advertisementTypeslist) { AdvertisementTypes.AddAdvertisementType(addtype); } }, () => { AirlinerFacilities.Clear(); foreach (AirlinerFacility airlinerfas in deserializedSaveObject.airlinerfacilitieslist) { AirlinerFacilities.AddFacility(airlinerfas); } }, () => { RouteFacilities.Clear(); foreach (RouteFacility routefas in deserializedSaveObject.routefacilitieslist) { RouteFacilities.AddFacility(routefas); } }, () => { GameObject.SetInstance(deserializedSaveObject.instance); Settings.SetInstance(deserializedSaveObject.settings); }, () => { if (deserializedSaveObject.airlinefacilitieslist != null) { AirlineFacilities.Clear(); foreach (AirlineFacility airlinefac in deserializedSaveObject.airlinefacilitieslist) { AirlineFacilities.AddFacility(airlinefac); } } }); //close parallel.invoke //for 0.3.9.2 and the issue with no saved facilities on a route classes var emptyRouteClassesFacilities = Configurations.GetConfigurations(Configuration.ConfigurationType.Routeclasses).SelectMany(c => ((RouteClassesConfiguration)c).Classes.Where(cl => cl.Facilities == null)); foreach (RouteClassConfiguration rClassConfiguration in emptyRouteClassesFacilities) { rClassConfiguration.Facilities = new List <RouteFacility>(); } Setup.SetupLoadedGame(); //Maybe this helps? But i doubt this is the best way Action action = () => { Stopwatch swPax = new Stopwatch(); swPax.Start(); PassengerHelpers.CreateDestinationDemand(); //Console.WriteLine("Demand have been created in {0} ms.", swPax.ElapsedMilliseconds); swPax.Stop(); }; //create some pilots for the game int pilotsPool = 100 * Airlines.GetAllAirlines().Count; GeneralHelpers.CreatePilots(pilotsPool); int instructorsPool = 75 * Airlines.GetAllAirlines().Count; GeneralHelpers.CreateInstructors(instructorsPool); //creates some airliners for the game AirlinerHelpers.CreateStartUpAirliners(); //Start the game paused GameObjectWorker.GetInstance().startPaused(); //Task is needed this unlocks the game agian. Task.Factory.StartNew(action); }
//creates the entries for the stopoverflight private void createEntries(RouteTimeTableEntry mainEntry) { List <Route> routes = mainEntry.TimeTable.Route.Stopovers.SelectMany(s => s.Legs).ToList(); TimeSpan time = mainEntry.Time; Boolean isInbound = mainEntry.DepartureAirport == mainEntry.TimeTable.Route.Destination2; if (isInbound) { routes.Reverse(); } foreach (Route route in routes) { RouteTimeTable timetable = new RouteTimeTable(route); RouteTimeTableEntry entry; //inbound if (isInbound) { entry = new RouteTimeTableEntry(timetable, mainEntry.Day, time, new RouteEntryDestination(route.Destination1, mainEntry.Destination.FlightCode)); time = time.Add(entry.TimeTable.Route.getFlightTime(mainEntry.Airliner.Airliner.Type)).Add(FleetAirlinerHelpers.GetMinTimeBetweenFlights(mainEntry.Airliner)); entry.Airliner = mainEntry.Airliner; entry.MainEntry = mainEntry; } //outbound else { entry = new RouteTimeTableEntry(timetable, mainEntry.Day, time, new RouteEntryDestination(route.Destination2, mainEntry.Destination.FlightCode)); entry.Airliner = mainEntry.Airliner; entry.MainEntry = mainEntry; time = time.Add(entry.TimeTable.Route.getFlightTime(mainEntry.Airliner.Airliner.Type)).Add(FleetAirlinerHelpers.GetMinTimeBetweenFlights(mainEntry.Airliner)); } if (route.Type == Route.RouteType.Passenger || route.Type == Route.RouteType.Mixed) { List <FlightAirlinerClass> classes = new List <FlightAirlinerClass>(); foreach (AirlinerClass aClass in this.Airliner.Airliner.Classes) { FlightAirlinerClass faClass; if (isInbound) { faClass = new FlightAirlinerClass(((PassengerRoute)route).getRouteAirlinerClass(aClass.Type), PassengerHelpers.GetStopoverFlightPassengers(this.Airliner, aClass.Type, route.Destination2, route.Destination1, routes, isInbound)); } else { faClass = new FlightAirlinerClass(((PassengerRoute)route).getRouteAirlinerClass(aClass.Type), PassengerHelpers.GetStopoverFlightPassengers(this.Airliner, aClass.Type, route.Destination1, route.Destination2, routes, isInbound)); } classes.Add(faClass); } this.AllClasses.Add(entry, classes); } if (route.Type == Route.RouteType.Cargo || route.Type == Route.RouteType.Mixed) { if (isInbound) { this.AllCargo.Add(entry, PassengerHelpers.GetStopoverFlightCargo(this.Airliner, route.Destination2, route.Destination1, routes, isInbound)); } else { this.AllCargo.Add(entry, PassengerHelpers.GetStopoverFlightCargo(this.Airliner, route.Destination1, route.Destination2, routes, isInbound)); } } } }
//simulates a flight private static void SimulateFlight(RouteTimeTableEntry entry) { FleetAirliner airliner = entry.Airliner; if (entry.TimeTable.Route.HasStopovers || airliner.CurrentFlight is StopoverFlight) { if (airliner.CurrentFlight == null || ((StopoverFlight)airliner.CurrentFlight).IsLastTrip) { airliner.CurrentFlight = new StopoverFlight(entry); } ((StopoverFlight)airliner.CurrentFlight).setNextEntry(); } else { airliner.CurrentFlight = new Flight(entry); } KeyValuePair <FleetAirlinerHelpers.DelayType, int> delayedMinutes = FleetAirlinerHelpers.GetDelayedMinutes(airliner); //cancelled/delay if (delayedMinutes.Value >= Convert.ToInt16(airliner.Airliner.Airline.getAirlinePolicy("Cancellation Minutes").PolicyValue)) { if (airliner.Airliner.Airline.IsHuman) { Flight flight = airliner.CurrentFlight; switch (delayedMinutes.Key) { case FleetAirlinerHelpers.DelayType.Airliner_problems: GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Flight_News, GameObject.GetInstance().GameTime, Translator.GetInstance().GetString("News", "1004"), string.Format(Translator.GetInstance().GetString("News", "1004", "message"), flight.Entry.Destination.FlightCode, flight.Entry.DepartureAirport.Profile.IATACode, flight.Entry.Destination.Airport.Profile.IATACode))); break; case FleetAirlinerHelpers.DelayType.Bad_weather: GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Flight_News, GameObject.GetInstance().GameTime, Translator.GetInstance().GetString("News", "1005"), string.Format(Translator.GetInstance().GetString("News", "1005", "message"), flight.Entry.Destination.FlightCode, flight.Entry.DepartureAirport.Profile.IATACode, flight.Entry.Destination.Airport.Profile.IATACode))); break; } } airliner.Airliner.Airline.Statistics.addStatisticsValue(GameObject.GetInstance().GameTime.Year, StatisticsTypes.GetStatisticsType("Cancellations"), 1); double cancellationPercent = airliner.Airliner.Airline.Statistics.getStatisticsValue(GameObject.GetInstance().GameTime.Year, StatisticsTypes.GetStatisticsType("Cancellations")) / (airliner.Airliner.Airline.Statistics.getStatisticsValue(GameObject.GetInstance().GameTime.Year, StatisticsTypes.GetStatisticsType("Arrivals")) + airliner.Airliner.Airline.Statistics.getStatisticsValue(GameObject.GetInstance().GameTime.Year, StatisticsTypes.GetStatisticsType("Cancellations"))); airliner.Airliner.Airline.Statistics.setStatisticsValue(GameObject.GetInstance().GameTime.Year, StatisticsTypes.GetStatisticsType("Cancellation%"), cancellationPercent * 100); airliner.CurrentFlight = null; } else { airliner.CurrentFlight.addDelayMinutes(delayedMinutes.Value); if (airliner.CurrentFlight.Entry.MainEntry == null) { if (airliner.CurrentFlight.isPassengerFlight()) { var classes = new List <AirlinerClass>(airliner.Airliner.Classes); foreach (AirlinerClass aClass in classes) { airliner.CurrentFlight.Classes.Add(new FlightAirlinerClass(((PassengerRoute)airliner.CurrentFlight.Entry.TimeTable.Route).getRouteAirlinerClass(aClass.Type), PassengerHelpers.GetFlightPassengers(airliner, aClass.Type))); //airliner.CurrentFlight.Classes.Add(new FlightAirlinerClass(((PassengerRoute)airliner.CurrentFlight.Entry.TimeTable.Route).getRouteAirlinerClass(aClass.Type),0)); } } if (airliner.CurrentFlight.isCargoFlight()) { airliner.CurrentFlight.Cargo = PassengerHelpers.GetFlightCargo(airliner); } } //SetTakeoffStatistics(airliner); if (airliner.CurrentFlight.ExpectedLanding.ToShortDateString() == GameObject.GetInstance().GameTime.ToShortDateString()) { SimulateLanding(airliner); } } }
private void cbDestination_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (cbDestination2.SelectedItem != null && cbDestination1.SelectedItem != null) { Airport airport1 = (Airport)cbDestination1.SelectedItem; Airport airport2 = (Airport)cbDestination2.SelectedItem; Airport stopover1 = ucStopover1.Value; Airport stopover2 = ucStopover2.Value; List <double> distances = new List <double>(); List <Airport> destinations = new List <Airport>(); destinations.Add(airport1); Boolean isRouteOk = false; if (stopover1 == null && stopover2 == null) { distances.Add(MathHelpers.GetDistance(airport1, airport2)); isRouteOk = checkRouteOk(airport1, airport2); } if (stopover1 == null && stopover2 != null) { distances.Add(MathHelpers.GetDistance(airport1, stopover2)); distances.Add(MathHelpers.GetDistance(stopover2, airport2)); isRouteOk = checkRouteOk(airport1, stopover2) && checkRouteOk(stopover2, airport2); destinations.Add(stopover2); } if (stopover1 != null && stopover2 == null) { distances.Add(MathHelpers.GetDistance(airport1, stopover1)); distances.Add(MathHelpers.GetDistance(stopover1, airport2)); isRouteOk = checkRouteOk(airport1, stopover1) && checkRouteOk(stopover1, airport2); destinations.Add(stopover1); } if (stopover1 != null && stopover2 != null) { distances.Add(MathHelpers.GetDistance(airport1, stopover1)); distances.Add(MathHelpers.GetDistance(stopover1, stopover2)); distances.Add(MathHelpers.GetDistance(stopover2, airport2)); isRouteOk = checkRouteOk(airport1, stopover1) && checkRouteOk(stopover1, stopover2) && checkRouteOk(stopover2, airport2); destinations.Add(stopover1); destinations.Add(stopover2); } destinations.Add(airport2); foreach (RouteAirlinerClass aClass in this.Classes.Values) { aClass.FarePrice = PassengerHelpers.GetPassengerPrice(airport1, airport2) * GeneralHelpers.ClassToPriceFactor(aClass.Type); } double maxDistance = distances.Max(); double minDistance = distances.Min(); txtDistance.Text = string.Format("{0:0} {1}", new NumberToUnitConverter().Convert(maxDistance), new StringToLanguageConverter().Convert("km.")); btnSave.IsEnabled = minDistance > 50 && maxDistance < this.MaxDistance && isRouteOk; btnLoad.IsEnabled = btnSave.IsEnabled; txtInvalidRoute.Visibility = isRouteOk ? Visibility.Collapsed : Visibility.Visible; if (this.RouteType == Route.RouteType.Cargo && !AIHelpers.IsCargoRouteDestinationsCorrect(airport1, airport2, GameObject.GetInstance().HumanAirline)) { txtInvalidRoute.Text = Translator.GetInstance().GetString("PanelNewRoute", "1009"); } txtRoute.Text = string.Join(" <-> ", from d in destinations select new AirportCodeConverter().Convert(d).ToString()); } if (sender is ComboBox) { Airport airport = (Airport)((ComboBox)sender).SelectedItem; TextBlock txtDestinationGates = cbDestination2 == ((ComboBox)sender) ? txtDestination2Gates : txtDestination1Gates; txtDestinationGates.Text = string.Format(Translator.GetInstance().GetString("PanelNewRoute", "206"), airport.Terminals.getFreeSlotsPercent(GameObject.GetInstance().HumanAirline)); } }