//do the daily update private static void DoDailyUpdate() { //Clear stats when it on daily update if (Settings.GetInstance().ClearStats == Settings.Intervals.Daily) ClearAllUsedStats(); //Auto save when it on daily if (Settings.GetInstance().AutoSave == Settings.Intervals.Daily) SerializedLoadSaveHelpers.SaveGame("autosave"); //Clearing stats as an RAM work-a-round Airports.GetAllAirports().ForEach(a => a.clearDestinationPassengerStatistics()); Airports.GetAllAirports().ForEach(a => a.clearDestinationCargoStatistics()); var humanAirlines = Airlines.GetAirlines(a => a.IsHuman); //Console.WriteLine(GameObject.GetInstance().GameTime.ToShortDateString() + ": " + DateTime.Now.Subtract(LastTime).TotalMilliseconds + " ms." + " : routes: " + totalRoutes + " airliners on route: " + totalAirlinersOnRoute); LastTime = DateTime.Now; //changes the fuel prices double fuelDiff = Inflations.GetInflation(GameObject.GetInstance().GameTime.Year + 1).FuelPrice - Inflations.GetInflation(GameObject.GetInstance().GameTime.Year).FuelPrice; double fuelPrice = (rnd.NextDouble() * (fuelDiff / 4)); GameObject.GetInstance().FuelPrice = Inflations.GetInflation(GameObject.GetInstance().GameTime.Year).FuelPrice + fuelPrice; //checks for airports due to close in 14 days var closingAirports = Airports.GetAllAirports(a => a.Profile.Period.To.ToShortDateString() == GameObject.GetInstance().GameTime.AddDays(14).ToShortDateString()); var openingAirports = Airports.GetAllAirports(a => a.Profile.Period.From.ToShortDateString() == GameObject.GetInstance().GameTime.AddDays(14).ToShortDateString()); foreach (Airport airport in closingAirports) { Airport reallocatedAirport = openingAirports.Find(a => a.Profile.Town == airport.Profile.Town); if (reallocatedAirport == null) GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Airport_News, GameObject.GetInstance().GameTime, "Airport closing", string.Format("The airport [LI airport={0}]({1}) is closing in 14 days.\n\rPlease move all routes to another destination.", airport.Profile.IATACode, new AirportCodeConverter().Convert(airport).ToString()))); else GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Airport_News, GameObject.GetInstance().GameTime, "Airport closing", string.Format("The airport [LI airport={0}]({1}) is closing in 14 days.\n\rThe airport will be replaced by {2}({3}) and all gates and routes from {0} will be reallocated to {2}.", airport.Profile.IATACode, new AirportCodeConverter().Convert(airport).ToString(), reallocatedAirport.Profile.Name, new AirportCodeConverter().Convert(reallocatedAirport).ToString()))); CalendarItems.AddCalendarItem(new CalendarItem(CalendarItem.ItemType.Airport_Closing, airport.Profile.Period.To, "Airport closing", string.Format("{0}, {1}", airport.Profile.Name, ((Country)new CountryCurrentCountryConverter().Convert(airport.Profile.Country)).Name))); } foreach (Airport airport in openingAirports) { GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Airport_News, GameObject.GetInstance().GameTime, "Airport opening", string.Format("A new airport {0}({1}) is opening in 14 days in {2}, {3}.", airport.Profile.Name, new AirportCodeConverter().Convert(airport).ToString(), airport.Profile.Town.Name, ((Country)new CountryCurrentCountryConverter().Convert(airport.Profile.Country)).Name))); CalendarItems.AddCalendarItem(new CalendarItem(CalendarItem.ItemType.Airport_Opening, airport.Profile.Period.From, "Airport opening", string.Format("{0}, {1}", airport.Profile.Name, ((Country)new CountryCurrentCountryConverter().Convert(airport.Profile.Country)).Name))); } //checks for new airports which are opening List<Airport> openedAirports = Airports.GetAllAirports(a => a.Profile.Period.From.ToShortDateString() == GameObject.GetInstance().GameTime.ToShortDateString()); List<Airport> closedAirports = Airports.GetAllAirports(a => a.Profile.Period.To.ToShortDateString() == GameObject.GetInstance().GameTime.ToShortDateString()); //checks for airports which are closing down foreach (Airport airport in closedAirports) { //check for airport which are reallocated Airport reallocatedAirport = openedAirports.Find(a => a.Profile.Town == airport.Profile.Town); if (reallocatedAirport != null) { var airlines = new List<Airline>(from c in airport.AirlineContracts select c.Airline).Distinct(); foreach (Airline airline in airlines) { AirlineHelpers.ReallocateAirport(airport, reallocatedAirport, airline); if (airline.IsHuman) GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Airport_News, GameObject.GetInstance().GameTime, "Airport operations changed", string.Format("All your gates, routes and facilities has been moved from {0}({1}) to [LI airport={2}]({3})", airport.Profile.Name, new AirportCodeConverter().Convert(airport).ToString(), reallocatedAirport.Profile.IATACode, new AirportCodeConverter().Convert(reallocatedAirport).ToString()))); } } GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Airport_News, GameObject.GetInstance().GameTime, "Airport closed", string.Format("The airport {0}({1}) has now been closed. \n\rAll routes to and from the airports has been cancelled.", airport.Profile.Name, new AirportCodeConverter().Convert(airport).ToString()))); var obsoleteRoutes = (from r in Airlines.GetAllAirlines().SelectMany(a => a.Routes) where r.Destination1 == airport || r.Destination2 == airport select r); foreach (Route route in obsoleteRoutes) { route.Banned = true; foreach (FleetAirliner airliner in route.getAirliners()) { if (airliner.Homebase == airport) { if (airliner.Airliner.Airline.IsHuman) { airliner.Homebase = (Airport)PopUpNewAirlinerHomebase.ShowPopUp(airliner); } else { AIHelpers.SetAirlinerHomebase(airliner); } } } } } //checks for new airliner types for purchase foreach (AirlinerType aType in AirlinerTypes.GetTypes(a => a.Produced.From.ToShortDateString() == GameObject.GetInstance().GameTime.ToShortDateString())) { GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Airliner_News, GameObject.GetInstance().GameTime, "New airliner type available", string.Format("{0} has finished the design of {1} and it is now available for purchase", aType.Manufacturer.Name, aType.Name))); if (!AirlineFacilities.GetFacilities(f => f is PilotTrainingFacility).Exists(f => ((PilotTrainingFacility)f).AirlinerFamily == aType.AirlinerFamily)) AirlineFacilities.AddFacility(new PilotTrainingFacility("airlinefacilities", aType.AirlinerFamily, 9000, 1000, GameObject.GetInstance().GameTime.Year, 0, 0, aType.AirlinerFamily)); } //checks for airliner types which are out of production foreach (AirlinerType aType in AirlinerTypes.GetTypes(a => a.Produced.To.ToShortDateString() == GameObject.GetInstance().GameTime.ToShortDateString())) { GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Airliner_News, GameObject.GetInstance().GameTime, "Airliner type out of production", string.Format("{0} has taken {1} out of production", aType.Manufacturer.Name, aType.Name))); Boolean lastFromManufacturer = AirlinerTypes.GetAllTypes().Where(t=>t.Manufacturer == aType.Manufacturer && t.Produced.To > GameObject.GetInstance().GameTime).Count() == 0; if (lastFromManufacturer) { var manufacturerContracts = Airlines.GetAllAirlines().Where(a => a.Contract != null && a.Contract.Manufacturer == aType.Manufacturer); foreach (Airline contractedAirline in manufacturerContracts) contractedAirline.Contract = null; } } //checks for airport facilities for the human airline var humanAirportFacilities = (from f in humanAirlines.SelectMany(ai => ai.Airports.SelectMany(a => a.getAirportFacilities(ai))) where f.FinishedDate.ToShortDateString() == GameObject.GetInstance().GameTime.ToShortDateString() select f); foreach (AirlineAirportFacility facility in humanAirportFacilities) { GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Airport_News, GameObject.GetInstance().GameTime, "Airport facility", string.Format("Your airport facility {0} at [LI airport={1}] is now finished building", facility.Facility.Name, facility.Airport.Profile.IATACode))); facility.FinishedDate = GameObject.GetInstance().GameTime; } //checks for changed flight restrictions foreach (FlightRestriction restriction in FlightRestrictions.GetRestrictions().FindAll(r => r.StartDate.ToShortDateString() == GameObject.GetInstance().GameTime.ToShortDateString() || r.EndDate.ToShortDateString() == GameObject.GetInstance().GameTime.ToShortDateString())) { string restrictionNewsText = ""; if (restriction.Type == FlightRestriction.RestrictionType.Flights) { if (restriction.StartDate.ToShortDateString() == GameObject.GetInstance().GameTime.ToShortDateString()) restrictionNewsText = string.Format("All flights from {0} to {1} have been banned", restriction.From.Name, restriction.To.Name); else restrictionNewsText = string.Format("The ban for all flights from {0} to {1} have been lifted", restriction.From.Name, restriction.To.Name); } if (restriction.Type == FlightRestriction.RestrictionType.Airlines) { if (restriction.StartDate.ToShortDateString() == GameObject.GetInstance().GameTime.ToShortDateString()) restrictionNewsText = string.Format("All airlines flying from {0} flying to {1} have been blacklisted", restriction.From.Name, restriction.To.Name); else restrictionNewsText = string.Format("The blacklist on all airlines from {0} flying to {1} have been lifted", restriction.From.Name, restriction.To.Name); } if (restriction.StartDate.ToShortDateString() == GameObject.GetInstance().GameTime.ToShortDateString()) { if (restriction.Type == FlightRestriction.RestrictionType.Flights) { var bannedRoutes = (from r in Airlines.GetAllAirlines().SelectMany(a => a.Routes) where FlightRestrictions.HasRestriction(r.Destination1.Profile.Country, r.Destination2.Profile.Country, GameObject.GetInstance().GameTime) select r); foreach (Route route in bannedRoutes) { route.Banned = true; } } } GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Standard_News, GameObject.GetInstance().GameTime, "Flight restriction", restrictionNewsText)); } //checks for historic events foreach (HistoricEvent e in HistoricEvents.GetHistoricEvents(GameObject.GetInstance().GameTime)) { GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Standard_News, GameObject.GetInstance().GameTime, e.Name, e.Text)); foreach (HistoricEventInfluence influence in e.Influences) { SetHistoricEventInfluence(influence, false); } } //checks for historic events influences ending foreach (HistoricEventInfluence influence in HistoricEvents.GetHistoricEventInfluences(GameObject.GetInstance().GameTime)) { SetHistoricEventInfluence(influence, true); } //updates airports Parallel.ForEach(Airports.GetAllActiveAirports(), airport => { //AirportHelpers.CreateAirportWeather(airport); if (Settings.GetInstance().MailsOnBadWeather && humanAirlines.SelectMany(a => a.Airports.FindAll(aa => aa == airport)).Count() > 0 && (airport.Weather[airport.Weather.Length - 1].WindSpeed == Weather.eWindSpeed.Violent_Storm || airport.Weather[airport.Weather.Length - 1].WindSpeed == Weather.eWindSpeed.Hurricane)) { GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Airport_News, GameObject.GetInstance().GameTime, Translator.GetInstance().GetString("News", "1002"), string.Format(Translator.GetInstance().GetString("News", "1002", "message"), airport.Profile.IATACode, GameObject.GetInstance().GameTime.AddDays(airport.Weather.Length - 1).DayOfWeek))); } // chs, 2011-01-11 changed for delivery of terminals foreach (Terminal terminal in airport.Terminals.getTerminals()) { if (terminal.DeliveryDate.Year == GameObject.GetInstance().GameTime.Year && terminal.DeliveryDate.Month == GameObject.GetInstance().GameTime.Month && terminal.DeliveryDate.Day == GameObject.GetInstance().GameTime.Day) { if (terminal.Airline == null) GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Airport_News, GameObject.GetInstance().GameTime, "Construction of terminal", string.Format("[LI airport={0}], {1} has build a new terminal with {2} gates", airport.Profile.IATACode, airport.Profile.Country.Name, terminal.Gates.NumberOfGates))); if (terminal.Airline != null && terminal.Airline.IsHuman) GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Airport_News, GameObject.GetInstance().GameTime, "Construction of terminal", string.Format("Your terminal at [LI airport={0}], {1} is now finished and ready for use.", airport.Profile.IATACode, airport.Profile.Country.Name))); if (terminal.Airline != null) { List<AirportContract> oldContracts = new List<AirportContract>(airport.getAirlineContracts(terminal.Airline)); if (oldContracts.Count > 0) { int totalGates = oldContracts.Sum(c => c.NumberOfGates); int gatesDiff = totalGates - terminal.Gates.NumberOfGates; if (gatesDiff > 0) { int length = oldContracts.Max(c => c.Length); AirportContract newContract = new AirportContract(terminal.Airline, airport, AirportContract.ContractType.Full, GameObject.GetInstance().GameTime, gatesDiff, length, AirportHelpers.GetYearlyContractPayment(airport, AirportContract.ContractType.Full, gatesDiff, length) / 2, true); AirportHelpers.AddAirlineContract(newContract); } foreach (AirportContract oldContract in oldContracts) { airport.removeAirlineContract(oldContract); for (int i = 0; i < oldContract.NumberOfGates; i++) { Gate oldGate = airport.Terminals.getGates().Where(g => g.Airline == terminal.Airline).First(); oldGate.Airline = null; } } } double yearlyPayment = AirportHelpers.GetYearlyContractPayment(airport, AirportContract.ContractType.Full, terminal.Gates.NumberOfGates, 20); AirportHelpers.AddAirlineContract(new AirportContract(terminal.Airline, airport, AirportContract.ContractType.Full, GameObject.GetInstance().GameTime, terminal.Gates.NumberOfGates, 20, yearlyPayment * 0.75, true, false, false)); if (terminal.Airport.getAirportFacility(terminal.Airline, AirportFacility.FacilityType.CheckIn).TypeLevel == 0) { AirportFacility checkinFacility = AirportFacilities.GetFacilities(AirportFacility.FacilityType.CheckIn).Find(f => f.TypeLevel == 1); terminal.Airport.addAirportFacility(terminal.Airline, checkinFacility, GameObject.GetInstance().GameTime); } } } //new gates in an existing terminal else { int numberOfNewGates = terminal.Gates.getGates().Count(g => g.DeliveryDate.ToShortDateString() == GameObject.GetInstance().GameTime.ToShortDateString()); if (numberOfNewGates > 0) { GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Airport_News, GameObject.GetInstance().GameTime, "Expansion of terminal", string.Format("[LI airport={0}], {1} has expanded {2} with {3} gates", airport.Profile.IATACode, airport.Profile.Country.Name, terminal.Name, numberOfNewGates))); double yearlyPayment = AirportHelpers.GetYearlyContractPayment(airport, AirportContract.ContractType.Full, numberOfNewGates + terminal.Gates.NumberOfGates, 20); AirportContract terminalContract = airport.AirlineContracts.Find(c => c.Terminal != null && c.Terminal == terminal); if (terminalContract != null) { terminalContract.NumberOfGates += numberOfNewGates; terminalContract.YearlyPayment = yearlyPayment; for (int i = 0; i < numberOfNewGates; i++) { Gate newGate = airport.Terminals.getGates().Where(g => g.Airline == null).First(); newGate.Airline = terminalContract.Airline; } } } } //expired contracts var airlineContracts = new List<AirportContract>(airport.AirlineContracts.FindAll(c => c.ExpireDate.ToShortDateString() == GameObject.GetInstance().GameTime.ToShortDateString())); foreach (AirportContract contract in airlineContracts) { if (contract.AutoRenew) { contract.ContractDate = GameObject.GetInstance().GameTime; contract.ExpireDate = GameObject.GetInstance().GameTime.AddYears(contract.Length); if (contract.Airline.IsHuman) GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Airport_News, GameObject.GetInstance().GameTime, "Airport contract renewed", string.Format("Your contract for {0} gates at [LI airport={1}], {2} is now been renewed", contract.NumberOfGates, contract.Airport.Profile.IATACode, contract.Airport.Profile.Country.Name))); } else { for (int i = 0; i < contract.NumberOfGates; i++) { Gate gate = airport.Terminals.getGates().Where(g => g.Airline == contract.Airline).First(); gate.Airline = null; } if (contract.Airline.IsHuman) { int totalContractGates = airport.AirlineContracts.Where(c => c.Airline.IsHuman).Sum(c => c.NumberOfGates); var airlineRoutes = new List<Route>(AirportHelpers.GetAirportRoutes(airport, contract.Airline)); var remainingContracts = new List<AirportContract>(airport.AirlineContracts.FindAll(c => c.Airline == contract.Airline && c != contract)); Boolean canFillRoutes = AirportHelpers.CanFillRoutesEntries(airport, contract.Airline, remainingContracts, Weather.Season.All_Year); if (!canFillRoutes) { GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Airport_News, GameObject.GetInstance().GameTime, "Airport contract expired", string.Format("Your contract for {0} gates at [LI airport={1}], {2} is now expired, and a number of routes has been cancelled", contract.NumberOfGates, contract.Airport.Profile.IATACode, contract.Airport.Profile.Country.Name))); int currentRoute = 0; while (!canFillRoutes) { Route routeToDelete = airlineRoutes[currentRoute]; foreach (FleetAirliner fAirliner in routeToDelete.getAirliners()) { fAirliner.Status = FleetAirliner.AirlinerStatus.Stopped; fAirliner.removeRoute(routeToDelete); } contract.Airline.removeRoute(routeToDelete); currentRoute++; canFillRoutes = AirportHelpers.CanFillRoutesEntries(airport, contract.Airline, remainingContracts, Weather.Season.All_Year); } } else { GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Airport_News, GameObject.GetInstance().GameTime, "Airport contract expired", string.Format("Your contract for {0} gates at [LI airport={1}], {2} is now expired", contract.NumberOfGates, contract.Airport.Profile.IATACode, contract.Airport.Profile.Country.Name))); } airport.removeAirlineContract(contract); } else { int numberOfRoutes = AirportHelpers.GetAirportRoutes(airport, contract.Airline).Count; if (numberOfRoutes > 0) { contract.ContractDate = GameObject.GetInstance().GameTime; contract.ExpireDate = GameObject.GetInstance().GameTime.AddYears(contract.Length); } else airport.removeAirlineContract(contract); } } } } } ); //checks for airliners for the human airline foreach (FleetAirliner airliner in humanAirlines.SelectMany(a => a.Fleet.FindAll(f => f.Airliner.BuiltDate == GameObject.GetInstance().GameTime && f.Purchased != FleetAirliner.PurchasedType.BoughtDownPayment))) { if (airliner.Airliner.Airline == GameObject.GetInstance().HumanAirline) GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Fleet_News, GameObject.GetInstance().GameTime, "Delivery of airliner", string.Format("Your new airliner [LI airliner={0}] as been delivered to your fleet.\nThe airliner is currently at [LI airport={1}], {2}", airliner.Airliner.TailNumber, airliner.Homebase.Profile.IATACode, airliner.Homebase.Profile.Country.Name))); else GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Fleet_News, GameObject.GetInstance().GameTime, "Delivery of airliner", string.Format("The new airliner [LI airliner={0}] as been delivered for [LI airline={1}].\nThe airliner is currently at [LI airport={2}], {3}", airliner.Airliner.TailNumber, airliner.Airliner.Airline.Profile.IATACode, airliner.Homebase.Profile.IATACode, airliner.Homebase.Profile.Country.Name))); } Parallel.ForEach(Airlines.GetAllAirlines(), airline => { lock (airline.Fleet) { var fleet = new List<FleetAirliner>(airline.Fleet); foreach (FleetAirliner airliner in fleet.FindAll(a => a != null && a.Airliner.BuiltDate.ToShortDateString() == GameObject.GetInstance().GameTime.ToShortDateString() && a.Purchased == FleetAirliner.PurchasedType.BoughtDownPayment)) { if (airline.Money >= airliner.Airliner.Type.Price) { AirlineHelpers.AddAirlineInvoice(airline, GameObject.GetInstance().GameTime, Invoice.InvoiceType.Purchases, -airliner.Airliner.Type.Price); airliner.Purchased = FleetAirliner.PurchasedType.Bought; } else { airline.removeAirliner(airliner); if (airline.IsHuman) GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Fleet_News, GameObject.GetInstance().GameTime, "Delivery of airliner", string.Format("Your new airliner {0} can't be delivered to your fleet.\nYou don't have enough money to purchase it.", airliner.Name))); } } } if (airline.Contract != null && airline.Contract.ExpireDate.ToShortDateString() == GameObject.GetInstance().GameTime.ToShortDateString()) { int missingAirliners = airline.Contract.Airliners - airline.Contract.PurchasedAirliners; if (missingAirliners > 0) { double missingFee = (airline.Contract.getTerminationFee() / (airline.Contract.Length * 2)) * missingAirliners; AirlineHelpers.AddAirlineInvoice(airline, GameObject.GetInstance().GameTime, Invoice.InvoiceType.Purchases, -missingFee); if (airline.IsHuman) GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Fleet_News, GameObject.GetInstance().GameTime, "Contract expired", string.Format("Your contract with {0} has now expired.\nYou didn't purchased enough airliners with costs a fee of {1:C} for missing {2} airliners", airline.Contract.Manufacturer.Name, missingFee, missingAirliners))); } else if (airline.IsHuman) GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Fleet_News, GameObject.GetInstance().GameTime, "Contract expired", string.Format("Your contract with {0} has now expired.", airline.Contract.Manufacturer.Name))); airline.Contract = null; } //checks for students educated var educatedStudents = airline.FlightSchools.SelectMany(f => f.Students.FindAll(s => s.EndDate.ToShortDateString() == GameObject.GetInstance().GameTime.ToShortDateString())); foreach (PilotStudent student in educatedStudents) { Pilot pilot = new Pilot(student.Profile, GameObject.GetInstance().GameTime, student.Rating); if (student.AirlinerFamily != "") pilot.addAirlinerFamily(student.AirlinerFamily); student.Instructor.removeStudent(student); student.Instructor.FlightSchool.removeStudent(student); student.Instructor = null; airline.addPilot(pilot); if (airline.IsHuman) GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Flight_News, GameObject.GetInstance().GameTime, Translator.GetInstance().GetString("News", "1006"), string.Format(Translator.GetInstance().GetString("News", "1006", "message"), pilot.Profile.Name))); } var trainedPilots = airline.Pilots.Where(p => p.Training != null && p.Training.EndDate.ToShortDateString() == GameObject.GetInstance().GameTime.ToShortDateString()); foreach (Pilot pilot in trainedPilots) { pilot.addAirlinerFamily(pilot.Training.AirlinerFamily); if (airline.IsHuman) GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Flight_News, GameObject.GetInstance().GameTime, Translator.GetInstance().GetString("News", "1015"), string.Format(Translator.GetInstance().GetString("News", "1015", "message"), pilot.Profile.Name, pilot.Training.AirlinerFamily))); pilot.Training = null; } } ); //checks for mergers foreach (AirlineMerger merger in AirlineMergers.GetAirlineMergers(GameObject.GetInstance().GameTime)) { if (merger.Type == AirlineMerger.MergerType.Merger) { AirlineHelpers.SwitchAirline(merger.Airline2, merger.Airline1); Airlines.RemoveAirline(merger.Airline2); if (merger.NewName != null && merger.NewName.Length > 1) merger.Airline1.Profile.Name = merger.NewName; } if (merger.Type == AirlineMerger.MergerType.Subsidiary) { string oldLogo = merger.Airline2.Profile.Logo; SubsidiaryAirline sAirline = new SubsidiaryAirline(merger.Airline1, merger.Airline2.Profile, merger.Airline2.Mentality, merger.Airline2.MarketFocus, merger.Airline2.License, merger.Airline2.AirlineRouteFocus); AirlineHelpers.SwitchAirline(merger.Airline2, merger.Airline1); merger.Airline1.addSubsidiaryAirline(sAirline); Airlines.RemoveAirline(merger.Airline2); sAirline.Profile.Logos = merger.Airline2.Profile.Logos; sAirline.Profile.Color = merger.Airline2.Profile.Color; } GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Airline_News, GameObject.GetInstance().GameTime, "Airline merger", merger.Name)); } /* //does monthly budget work DateTime budgetExpires = GameObject.GetInstance().HumanAirline.Budget.BudgetExpires; if (budgetExpires <= GameObject.GetInstance().GameTime.AddDays(30)) { GameObject.GetInstance().NewsBox.addNews(new News(News.NewsType.Airline_News, GameObject.GetInstance().GameTime, "Budget Expires Soon", "Your budget will expire within the next 30 days. Please go to the budget screen and adjust it as needed and click 'Apply'.")); } else if (budgetExpires <= GameObject.GetInstance().GameTime) { //GraphicsModel.PageModel.PageFinancesModel.PageFinances.ResetValues(); } if (GameObject.GetInstance().HumanAirline.Money < GameObject.GetInstance().HumanAirline.Budget.TotalBudget / 12) { WPFMessageBox.Show("Low Cash!", "Your current cash is less than your budget deduction for the month! Decrease your budget immediately or you will be negative!", WPFMessageBoxButtons.Ok); } else { GameObject.GetInstance().HumanAirline.Money -= GameObject.GetInstance().HumanAirline.Budget.TotalBudget / 12; } * */ //check for insurance settlements and do maintenance foreach (Airline a in Airlines.GetAllAirlines()) { AirlineHelpers.CheckInsuranceSettlements(a); var airliners = new List<FleetAirliner>(a.Fleet); foreach (FleetAirliner airliner in airliners) { if (airliner != null) { FleetAirlinerHelpers.DoMaintenance(airliner); FleetAirlinerHelpers.RestoreMaintRoutes(airliner); } } } if (GameObject.GetInstance().GameTime.Day % 7 == 0) { GameObject.GetInstance().HumanAirline.OverallScore += StatisticsHelpers.GetWeeklyScore(GameObject.GetInstance().HumanAirline); } }
//removes a subsidary airline from the airline public void removeSubsidiaryAirline(SubsidiaryAirline subsidiary) { this.Subsidiaries.Remove(subsidiary); }
private void btnPurchaseAsSubsidiary_Click(object sender, RoutedEventArgs e) { double buyingPrice = this.Airline.getValue() * 1000000 * 1.10; WPFMessageBoxResult result = WPFMessageBox.Show(Translator.GetInstance().GetString("MessageBox", "2113"), string.Format(Translator.GetInstance().GetString("MessageBox", "2113", "message"), this.Airline.Profile.Name, buyingPrice), WPFMessageBoxButtons.YesNo); if (result == WPFMessageBoxResult.Yes) { List<AirlineLogo> oldLogos = this.Airline.Profile.Logos; string oldColor = this.Airline.Profile.Color; //creates independent airlines for each subsidiary while (this.Airline.Subsidiaries.Count > 0) { SubsidiaryAirline subAirline = this.Airline.Subsidiaries[0]; subAirline.Airline = null; this.Airline.removeSubsidiaryAirline(subAirline); } if (this.Airline.License > GameObject.GetInstance().HumanAirline.License) GameObject.GetInstance().HumanAirline.License = this.Airline.License; SubsidiaryAirline sAirline = new SubsidiaryAirline(GameObject.GetInstance().HumanAirline, this.Airline.Profile, this.Airline.Mentality, this.Airline.MarketFocus, this.Airline.License,this.Airline.AirlineRouteFocus); AirlineHelpers.SwitchAirline(this.Airline, sAirline); GameObject.GetInstance().HumanAirline.addSubsidiaryAirline(sAirline); AirlineHelpers.AddAirlineInvoice(GameObject.GetInstance().HumanAirline, GameObject.GetInstance().GameTime, Invoice.InvoiceType.Airline_Expenses, -buyingPrice); Airlines.RemoveAirline(this.Airline); Airlines.AddAirline(sAirline); sAirline.Profile.Logos = oldLogos; sAirline.Profile.Color = oldColor; foreach (AirlinePolicy policy in this.Airline.Policies) sAirline.addAirlinePolicy(policy); sAirline.Money = this.Airline.Money; sAirline.StartMoney = this.Airline.Money; sAirline.Fees = new AirlineFees(); PageNavigator.NavigateTo(new PageAirline(GameObject.GetInstance().HumanAirline)); } }
//creates a subsidiary airline for an airline public static SubsidiaryAirline CreateSubsidiaryAirline(Airline airline, double money, string name, string iata, Airline.AirlineMentality mentality, Airline.AirlineFocus market, Route.RouteType routefocus, Airport homebase) { AirlineProfile profile = new AirlineProfile(name, iata, airline.Profile.Color, airline.Profile.CEO, true, GameObject.GetInstance().GameTime.Year, 2199); profile.Country = homebase.Profile.Country; SubsidiaryAirline sAirline = new SubsidiaryAirline(airline, profile, mentality, market, airline.License, routefocus); AddSubsidiaryAirline(airline, sAirline, money, homebase); return sAirline; }
//adds a subsidiary airline to the airline public void addSubsidiaryAirline(SubsidiaryAirline subsidiary) { this.Subsidiaries.Add(subsidiary); }
//closes a subsidiary airline for an airline public static void CloseSubsidiaryAirline(SubsidiaryAirline airline) { AddAirlineInvoice(airline.Airline, GameObject.GetInstance().GameTime, Invoice.InvoiceType.Airline_Expenses, airline.Money); airline.Airline.removeSubsidiaryAirline(airline); Airlines.RemoveAirline(airline); var fleet = airline.Fleet; for (int f = 0; f < fleet.Count; f++) { fleet[f].Airliner.Airline = airline.Airline; airline.Airline.addAirliner(fleet[f]); } var airports = airline.Airports; for (int i = 0; i < airports.Count; i++) { var contracts = airports[i].getAirlineContracts(airline); for (int j = 0; j < contracts.Count; j++) { contracts[j].Airline = airline.Airline; } if (!airline.Airline.Airports.Contains(airports[i])) { airline.Airline.addAirport(airports[i]); } foreach (AirportFacility facility in airports[i].getCurrentAirportFacilities(airline)) { if (airports[i].getAirlineAirportFacility(airline.Airline, facility.Type).Facility.TypeLevel < facility.TypeLevel) airports[i].addAirportFacility(airline.Airline, facility, GameObject.GetInstance().GameTime); } airports[i].clearFacilities(airline); } //moves the terminals from the subsidiary to the parent airline foreach (Airport airport in airline.Airports) { var terminals = airport.Terminals.getTerminals().Where(t=>t.Airline == airline); foreach (Terminal terminal in terminals) terminal.Airline = airline.Airline; } }
//adds a subsidiary airline to an airline public static void AddSubsidiaryAirline(Airline airline, SubsidiaryAirline sAirline, double money, Airport airportHomeBase) { AddAirlineInvoice(airline, GameObject.GetInstance().GameTime, Invoice.InvoiceType.Airline_Expenses, -money); sAirline.Money = money; sAirline.StartMoney = money; sAirline.Fees = new AirlineFees(); airline.addSubsidiaryAirline(sAirline); if (!AirportHelpers.HasFreeGates(airportHomeBase, sAirline) && airportHomeBase.Terminals.getFreeGates() > 1) { AirportHelpers.RentGates(airportHomeBase, sAirline, AirportContract.ContractType.Full, 2); //sets all the facilities at an airport to none for all airlines foreach (Airport airport in Airports.GetAllAirports()) { foreach (AirportFacility.FacilityType type in Enum.GetValues(typeof(AirportFacility.FacilityType))) { AirportFacility noneFacility = AirportFacilities.GetFacilities(type).Find((delegate(AirportFacility facility) { return facility.TypeLevel == 0; })); airport.addAirportFacility(sAirline, noneFacility, GameObject.GetInstance().GameTime); } } foreach (AirlinePolicy policy in airline.Policies) sAirline.addAirlinePolicy(policy); AirportFacility serviceFacility = AirportFacilities.GetFacilities(AirportFacility.FacilityType.Service).Find(f => f.TypeLevel == 1); AirportFacility checkinFacility = AirportFacilities.GetFacilities(AirportFacility.FacilityType.CheckIn).Find(f => f.TypeLevel == 1); airportHomeBase.addAirportFacility(sAirline, serviceFacility, GameObject.GetInstance().GameTime); airportHomeBase.addAirportFacility(sAirline, checkinFacility, GameObject.GetInstance().GameTime); } Airlines.AddAirline(sAirline); }
//loads an airline from the saved file private static void LoadAirline(XmlElement airlineNode) { // chs, 2011-21-10 changed for the possibility of creating a new airline string airlineName = airlineNode.Attributes["name"].Value; string airlineIATA = airlineNode.Attributes["code"].Value; Boolean airlineIsSubsidiary = Convert.ToBoolean(airlineNode.Attributes["subsidiary"].Value); Country airlineCountry = Countries.GetCountry(airlineNode.Attributes["country"].Value); string color = airlineNode.Attributes["color"].Value; string airlineCEO = airlineNode.Attributes["CEO"].Value; double money = Convert.ToDouble(airlineNode.Attributes["money"].Value, new CultureInfo("de-DE", false)); int reputation = Convert.ToInt16(airlineNode.Attributes["reputation"].Value); Airline.AirlineMentality mentality = (Airline.AirlineMentality)Enum.Parse(typeof(Airline.AirlineMentality), airlineNode.Attributes["mentality"].Value); Airline.AirlineFocus market = (Airline.AirlineFocus)Enum.Parse(typeof(Airline.AirlineFocus), airlineNode.Attributes["market"].Value); Airline.AirlineLicense license = (Airline.AirlineLicense)Enum.Parse(typeof(Airline.AirlineLicense), airlineNode.Attributes["license"].Value); Route.RouteType routefocus = airlineNode.HasAttribute("routefocus") ? (Route.RouteType)Enum.Parse(typeof(Route.RouteType), airlineNode.Attributes["routefocus"].Value) : Route.RouteType.Passenger; Boolean isReal = airlineNode.HasAttribute("real") ? Convert.ToBoolean(airlineNode.Attributes["real"].Value) : true; int founded = airlineNode.HasAttribute("founded") ? Convert.ToInt16(airlineNode.Attributes["founded"].Value) : 1950; int folded = airlineNode.HasAttribute("folded") ? Convert.ToInt16(airlineNode.Attributes["folded"].Value) : 2199; Airline airline; if (airlineIsSubsidiary) { Airline parent = Airlines.GetAirline(airlineNode.Attributes["parentairline"].Value); airline = new SubsidiaryAirline(parent, new AirlineProfile(airlineName, airlineIATA, color, airlineCEO, isReal, founded, folded), mentality, market, license, routefocus); airline.Profile.Country = airlineCountry; parent.addSubsidiaryAirline((SubsidiaryAirline)airline); } else { airline = new Airline(new AirlineProfile(airlineName, airlineIATA, color, airlineCEO, isReal, founded, folded), mentality, market, license, routefocus); airline.Profile.Country = airlineCountry; } if (airlineNode.HasAttribute("logo")) { string logo = AppSettings.getDataPath() + "\\graphics\\airlinelogos\\" + airlineNode.Attributes["logo"].Value; airline.Profile.addLogo(new AirlineLogo(logo)); } airline.Fleet.Clear(); airline.Airports.Clear(); airline.Routes.Clear(); airline.Alliances.Clear(); airline.Money = money; airline.Reputation = reputation; XmlNodeList logosList = airlineNode.SelectNodes("logos/logo"); foreach (XmlElement logoElement in logosList) { int logoFromYear = Convert.ToInt16(logoElement.Attributes["from"].Value); int logoToYear = Convert.ToInt16(logoElement.Attributes["to"].Value); string logoPath = logoElement.Attributes["path"].Value; if (!File.Exists(logoPath)) logoPath = AppSettings.getDataPath() + "\\graphics\\airlinelogos\\" + logoPath.Substring(logoPath.LastIndexOf('\\') + 1); airline.Profile.addLogo(new AirlineLogo(logoFromYear, logoToYear, logoPath)); } XmlElement airlineContractNode = (XmlElement)airlineNode.SelectSingleNode("contract"); if (airlineContractNode != null) { Manufacturer contractManufacturer = Manufacturers.GetManufacturer(airlineContractNode.Attributes["manufacturer"].Value); DateTime contractSigningDate = DateTime.Parse(airlineContractNode.Attributes["signingdate"].Value, new CultureInfo("de-DE", false)); int contractLength = Convert.ToInt16(airlineContractNode.Attributes["length"].Value); double contractDiscount = Convert.ToDouble(airlineContractNode.Attributes["discount"].Value, new CultureInfo("de-DE", false)); int contractAirliners = Convert.ToInt16(airlineContractNode.Attributes["airliners"].Value); ManufacturerContract contract = new ManufacturerContract(contractManufacturer, contractSigningDate, contractLength, contractDiscount); contract.PurchasedAirliners = contractAirliners; airline.Contract = contract; } // chs, 2011-17-10 added for loading of passenger happiness XmlElement airlinePassengerNode = (XmlElement)airlineNode.SelectSingleNode("passengerhappiness"); double passengerHappiness = Convert.ToDouble(airlinePassengerNode.Attributes["value"].Value, new CultureInfo("de-DE", false)); PassengerHelpers.SetPassengerHappiness(airline, passengerHappiness); XmlNodeList airlineFacilitiesList = airlineNode.SelectNodes("facilities/facility"); foreach (XmlElement airlineFacilityNode in airlineFacilitiesList) { string airlineFacility = airlineFacilityNode.Attributes["uid"].Value; airline.addFacility(AirlineFacilities.GetFacility(airlineFacility)); } XmlNodeList airlinePoliciesList = airlineNode.SelectNodes("policies/policy"); foreach (XmlElement airlinePolicyNode in airlinePoliciesList) { string policyName = airlinePolicyNode.Attributes["name"].Value; object policyValue = (object)airlinePolicyNode.Attributes["value"].Value; int number; if (int.TryParse(policyValue.ToString(), out number)) airline.addAirlinePolicy(new AirlinePolicy(policyName, number)); else airline.addAirlinePolicy(new AirlinePolicy(policyName, policyValue)); } XmlNodeList airlineLoanList = airlineNode.SelectNodes("loans/loan"); foreach (XmlElement airlineLoanNode in airlineLoanList) { DateTime date = DateTime.Parse(airlineLoanNode.Attributes["date"].Value, new CultureInfo("de-DE", false)); double rate = Convert.ToDouble(airlineLoanNode.Attributes["rate"].Value, new CultureInfo("de-DE", false)); double amount = Convert.ToDouble(airlineLoanNode.Attributes["amount"].Value, new CultureInfo("de-DE", false)); int length = Convert.ToInt16(airlineLoanNode.Attributes["length"].Value); double payment = Convert.ToDouble(airlineLoanNode.Attributes["payment"].Value, new CultureInfo("de-DE", false)); Loan loan = new Loan(date, amount, length, rate); loan.PaymentLeft = payment; airline.addLoan(loan); } XmlNodeList airlineStatList = airlineNode.SelectNodes("stats/stat"); foreach (XmlElement airlineStatNode in airlineStatList) { int year = Convert.ToInt32(airlineStatNode.Attributes["year"].Value); string airlineStatType = airlineStatNode.Attributes["type"].Value; double value = Convert.ToDouble(airlineStatNode.Attributes["value"].Value, new CultureInfo("de-DE", false)); airline.Statistics.setStatisticsValue(year, StatisticsTypes.GetStatisticsType(airlineStatType), value); } XmlNodeList airlineInvoiceList = airlineNode.SelectNodes("invoices/invoice"); foreach (XmlElement airlineInvoiceNode in airlineInvoiceList) { Invoice.InvoiceType type = (Invoice.InvoiceType)Enum.Parse(typeof(Invoice.InvoiceType), airlineInvoiceNode.Attributes["type"].Value); int invoiceYear = Convert.ToInt16(airlineInvoiceNode.Attributes["year"].Value); int invoiceMonth = Convert.ToInt16(airlineInvoiceNode.Attributes["month"].Value); double invoiceAmount = Convert.ToDouble(airlineInvoiceNode.Attributes["amount"].Value, new CultureInfo("de-DE", false)); airline.setInvoice(type, invoiceYear, invoiceMonth, invoiceAmount); } // chs, 2011-13-10 added for loading of airline advertisements XmlNodeList advertisementList = airlineNode.SelectNodes("advertisements/advertisement"); foreach (XmlElement advertisementNode in advertisementList) { AdvertisementType.AirlineAdvertisementType type = (AdvertisementType.AirlineAdvertisementType)Enum.Parse(typeof(AdvertisementType.AirlineAdvertisementType), advertisementNode.Attributes["type"].Value); string advertisementName = advertisementNode.Attributes["name"].Value; airline.setAirlineAdvertisement(AdvertisementTypes.GetType(type, advertisementName)); } // chs, 2011-17-10 added for loading of fees AirlineFees fees = new AirlineFees(); XmlNodeList airlineFeeList = airlineNode.SelectNodes("fees/fee"); foreach (XmlElement feeNode in airlineFeeList) { string feeType = feeNode.Attributes["type"].Value; double feeValue = Convert.ToDouble(feeNode.Attributes["value"].Value, new CultureInfo("de-DE", false)); fees.setValue(FeeTypes.GetType(feeType), feeValue); } airline.Fees = fees; XmlNodeList flightschoolsList = airlineNode.SelectNodes("flightschools/flightschool"); foreach (XmlElement flightschoolNode in flightschoolsList) { string fsID = flightschoolNode.Attributes["id"].Value; Airport fsAirport = Airports.GetAirportFromID(flightschoolNode.Attributes["airport"].Value); FlightSchool fs = new FlightSchool(fsAirport); fs.ID = fsID; XmlNodeList aircraftsList = flightschoolNode.SelectNodes("trainingaircrafts/trainingaircraft"); foreach (XmlElement aircraftNode in aircraftsList) { TrainingAircraftType aircraftType = TrainingAircraftTypes.GetAircraftType(aircraftNode.Attributes["type"].Value); DateTime aircraftDate = DateTime.Parse(aircraftNode.Attributes["date"].Value, new CultureInfo("de-DE", false)); fs.addTrainingAircraft(new TrainingAircraft(aircraftType, aircraftDate, fs)); } XmlNodeList studentsList = flightschoolNode.SelectNodes("students/student"); foreach (XmlElement studentNode in studentsList) { string firstname = studentNode.Attributes["firstname"].Value; string lastname = studentNode.Attributes["lastname"].Value; DateTime birthdate = DateTime.Parse(studentNode.Attributes["birthdate"].Value, new CultureInfo("de-DE", false)); Town town = Towns.GetTown(studentNode.Attributes["town"].Value); DateTime startdate = DateTime.Parse(studentNode.Attributes["startdate"].Value, new CultureInfo("de-DE", false)); fs.addStudent(new PilotStudent(new PilotProfile(firstname, lastname, birthdate, town), startdate, null,null,"")); } airline.addFlightSchool(fs); } XmlNodeList airlineFleetList = airlineNode.SelectNodes("fleet/airliner"); foreach (XmlElement airlineAirlinerNode in airlineFleetList) { Airliner airliner = Airliners.GetAirliner(airlineAirlinerNode.Attributes["airliner"].Value); string fAirlinerName = airlineAirlinerNode.Attributes["name"].Value; Airport homebase = Airports.GetAirport(airlineAirlinerNode.Attributes["homebase"].Value); FleetAirliner.PurchasedType purchasedtype = (FleetAirliner.PurchasedType)Enum.Parse(typeof(FleetAirliner.PurchasedType), airlineAirlinerNode.Attributes["purchased"].Value); DateTime purchasedDate = DateTime.Parse(airlineAirlinerNode.Attributes["date"].Value, new CultureInfo("de-DE", false)); FleetAirliner.AirlinerStatus status = (FleetAirliner.AirlinerStatus)Enum.Parse(typeof(FleetAirliner.AirlinerStatus), airlineAirlinerNode.Attributes["status"].Value); DateTime groundedDate = DateTime.Parse(airlineAirlinerNode.Attributes["groundeddate"].Value, new CultureInfo("de-DE", false)); // Coordinate latitude = Coordinate.Parse(airlineAirlinerNode.Attributes["latitude"].Value); //Coordinate longitude = Coordinate.Parse(airlineAirlinerNode.Attributes["longitude"].Value); string[] latitude = airlineAirlinerNode.Attributes["value"].Value.Split(new Char[] { '°', '\'', '\'' }); string[] longitude = airlineAirlinerNode.Attributes["value"].Value.Split(new Char[] { '°', '\'', '\'' }); int[] coords = new int[6]; foreach (string l in latitude) { int c = 0; int.TryParse(l, out coords[c]); c++; } foreach (string l in longitude) { int c = 3; int.TryParse(l, out coords[c]); c++; } //cleaning up latitude = null; longitude = null; GeoCoordinate pos = new GeoCoordinate(MathHelpers.DMStoDeg(coords[0], coords[1], coords[2]), MathHelpers.DMStoDeg(coords[3], coords[4], coords[5])); FleetAirliner fAirliner = new FleetAirliner(purchasedtype, purchasedDate, airline, airliner, homebase); fAirliner.CurrentPosition = null; fAirliner.Status = status; fAirliner.GroundedToDate = groundedDate; XmlNodeList airlinerStatList = airlineAirlinerNode.SelectNodes("stats/stat"); foreach (XmlElement airlinerStatNode in airlinerStatList) { int year = Convert.ToInt32(airlinerStatNode.Attributes["year"].Value); string statType = airlinerStatNode.Attributes["type"].Value; double statValue = Convert.ToDouble(airlinerStatNode.Attributes["value"].Value, new CultureInfo("de-DE", false)); fAirliner.Statistics.setStatisticsValue(year, StatisticsTypes.GetStatisticsType(statType), statValue); } airline.addAirliner(fAirliner); } XmlNodeList routeList = airlineNode.SelectNodes("routes/route"); foreach (XmlElement routeNode in routeList) { airline.addRoute(LoadRoute(routeNode, airline)); } XmlNodeList flightNodes = airlineNode.SelectNodes("flights/flight"); foreach (XmlElement flightNode in flightNodes) { FleetAirliner airliner = airline.Fleet.Find(a => a.Airliner.ID == flightNode.Attributes["airliner"].Value); if (airliner != null) { Route route = airline.Routes.Find(r => r.Id == flightNode.Attributes["route"].Value); if (route != null) { string destination = flightNode.Attributes["destination"].Value; DayOfWeek day = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), flightNode.Attributes["day"].Value); TimeSpan time = TimeSpan.Parse(flightNode.Attributes["time"].Value); DateTime flightTime = DateTime.Parse(flightNode.Attributes["flighttime"].Value, new CultureInfo("de-DE", false)); XmlElement stopoverNode = (XmlElement)flightNode.SelectSingleNode("stopover"); Boolean isStopoverFlight = stopoverNode != null; if (destination != "Service") { RouteTimeTableEntry rtte = route.TimeTable.Entries.Find(delegate(RouteTimeTableEntry e) { return e.Destination.FlightCode == destination && e.Day == day && e.Time == time; }); Flight currentFlight = new Flight(rtte); currentFlight.FlightTime = flightTime; currentFlight.Classes.Clear(); if (currentFlight.isPassengerFlight()) { XmlNodeList flightClassList = flightNode.SelectNodes("flightclasses/flightclass"); foreach (XmlElement flightClassNode in flightClassList) { AirlinerClass.ClassType airlinerClassType = (AirlinerClass.ClassType)Enum.Parse(typeof(AirlinerClass.ClassType), flightClassNode.Attributes["type"].Value); int flightPassengers = Convert.ToInt16(flightClassNode.Attributes["passengers"].Value); currentFlight.Classes.Add(new FlightAirlinerClass(((PassengerRoute)route).getRouteAirlinerClass(airlinerClassType), flightPassengers)); } } if (currentFlight.isCargoFlight()) { XmlElement flightCargoNode = (XmlElement)flightNode.SelectSingleNode("flightcargo"); double flightCargo = Convert.ToDouble(flightCargoNode.Attributes["cargo"].Value, new CultureInfo("de-DE", false)); currentFlight.Cargo = flightCargo; } if (isStopoverFlight) { int currentStopoverFlight = Convert.ToInt32(stopoverNode.Attributes["currentflight"].Value); XmlNodeList stopoverClassesList = stopoverNode.SelectNodes("classes/class"); Dictionary<RouteTimeTableEntry, List<FlightAirlinerClass>> stopEntryAllClasses = new Dictionary<RouteTimeTableEntry, List<FlightAirlinerClass>>(); foreach (XmlElement stopoverClassNode in stopoverClassesList) { RouteTimeTableEntry stopoverEntry = airline.Routes.SelectMany(r => r.TimeTable.Entries).ToList().Find(e => e.ID == stopoverClassNode.Attributes["id"].Value); List<FlightAirlinerClass> stopoverFlightClasses = new List<FlightAirlinerClass>(); XmlNodeList stopoverFlightClassList = stopoverClassNode.SelectNodes("flightclasses/flightclass"); foreach (XmlElement stopoverFlightClassNode in stopoverFlightClassList) { AirlinerClass.ClassType stopoverAirlinerClassType = (AirlinerClass.ClassType)Enum.Parse(typeof(AirlinerClass.ClassType), stopoverFlightClassNode.Attributes["type"].Value); int stopoverFlightPassengers = Convert.ToInt16(stopoverFlightClassNode.Attributes["passengers"].Value); stopoverFlightClasses.Add(new FlightAirlinerClass(((PassengerRoute)route).getRouteAirlinerClass(stopoverAirlinerClassType), stopoverFlightPassengers)); } stopEntryAllClasses.Add(stopoverEntry, stopoverFlightClasses); } XmlNodeList stopoverCargosList = stopoverNode.SelectNodes("cargos/cargo"); Dictionary<RouteTimeTableEntry, double> stopEntryAllCargo = new Dictionary<RouteTimeTableEntry, double>(); foreach (XmlElement stopoverCargoNode in stopoverCargosList) { RouteTimeTableEntry stopoverEntry = airline.Routes.SelectMany(r => r.TimeTable.Entries).ToList().Find(e => e.ID == stopoverCargoNode.Attributes["id"].Value); double cargoValue = Convert.ToDouble(stopoverCargoNode.Attributes["value"].Value, new CultureInfo("de-DE", false)); stopEntryAllCargo.Add(stopoverEntry, cargoValue); } StopoverFlight stopoverFlight = new StopoverFlight(rtte); stopoverFlight.AllClasses = stopEntryAllClasses; stopoverFlight.AllCargo = stopEntryAllCargo; stopoverFlight.CurrentFlight = currentStopoverFlight; stopoverFlight.FlightTime = currentFlight.FlightTime; stopoverFlight.Classes = currentFlight.Classes; airliner.CurrentFlight = stopoverFlight; } else { airliner.CurrentFlight = currentFlight; } } else { airliner.CurrentFlight = new Flight(new RouteTimeTableEntry(route.TimeTable, GameObject.GetInstance().GameTime.DayOfWeek, GameObject.GetInstance().GameTime.TimeOfDay, new RouteEntryDestination(airliner.Homebase, "Service",null),null)); airliner.Status = FleetAirliner.AirlinerStatus.On_service; } } else airliner.Status = FleetAirliner.AirlinerStatus.Stopped; } } Airlines.AddAirline(airline); }
//launches a subsidiary to operate on its own public static void MakeSubsidiaryAirlineIndependent(SubsidiaryAirline airline) { airline.Airline.removeSubsidiaryAirline(airline); airline.Airline = null; airline.Profile.CEO = string.Format("{0} {1}", Names.GetInstance().getRandomFirstName(airline.Profile.Country), Names.GetInstance().getRandomLastName(airline.Profile.Country)); if (!Airlines.ContainsAirline(airline)) Airlines.AddAirline(airline); }
private void btnCreateSubsidiary_Click(object sender, RoutedEventArgs e) { string iata = txtIATA.Text.ToUpper().Trim(); string name = txtAirlineName.Text.Trim(); Airport airport = (Airport)cbAirport.SelectedItem; string color = ((PropertyInfo)cbColor.SelectedItem).Name; Route.RouteType focus = rbPassengerType.IsChecked.Value ? Route.RouteType.Passenger : Route.RouteType.Cargo; string pattern = @"^[A-Za-z0-9]+$"; Regex regex = new Regex(pattern); if (name.Length > 0 && iata.Length == 2 && regex.IsMatch(iata) && !Airlines.GetAllAirlines().Exists(a=>a.Profile.IATACode == iata)) { WPFMessageBoxResult result = WPFMessageBox.Show(Translator.GetInstance().GetString("MessageBox", "2402"), Translator.GetInstance().GetString("MessageBox", "2402", "message"), WPFMessageBoxButtons.YesNo); if (result == WPFMessageBoxResult.Yes) { AirlineProfile profile = new AirlineProfile(name, iata, color, GameObject.GetInstance().MainAirline.Profile.CEO, false, GameObject.GetInstance().GameTime.Year, 2199); profile.Logos.Clear(); profile.addLogo(new AirlineLogo(logoPath)); profile.Country = GameObject.GetInstance().MainAirline.Profile.Country; SubsidiaryAirline subAirline = new SubsidiaryAirline(GameObject.GetInstance().MainAirline, profile, Model.AirlineModel.Airline.AirlineMentality.Safe, Model.AirlineModel.Airline.AirlineFocus.Local, Model.AirlineModel.Airline.AirlineLicense.Domestic, focus); subAirline.addAirport(airport); subAirline.Money = slMoney.Value; this.Airline.addSubsidiaryAirline(subAirline); } } else WPFMessageBox.Show(Translator.GetInstance().GetString("MessageBox", "2404"), Translator.GetInstance().GetString("MessageBox", "2404", "message"), WPFMessageBoxButtons.Ok); }
//closes a subsidiary airline for an airline public static void CloseSubsidiaryAirline(SubsidiaryAirline airline) { AddAirlineInvoice(airline.Airline, GameObject.GetInstance().GameTime, Invoice.InvoiceType.Airline_Expenses, airline.Money); airline.Airline.removeSubsidiaryAirline(airline); Airlines.RemoveAirline(airline); var fleet = airline.Fleet; for (int f = 0; f < fleet.Count; f++) { fleet[f].Airliner.Airline = airline.Airline; airline.Airline.addAirliner(fleet[f]); } var airports = airline.Airports; for (int i = 0; i < airports.Count; i++) { var contracts = airports[i].getAirlineContracts(airline); for (int j = 0; j < contracts.Count; j++) { contracts[j].Airline = airline.Airline; } if (!airline.Airline.Airports.Contains(airports[i])) { airline.Airline.addAirport(airports[i]); } airports[i].clearFacilities(airline); } }
//removes a subsidiary airline public void removeSubsidiaryAirline(SubsidiaryAirline airline) { this.Subsidiaries.Remove(airline); this.AirlineAirlines.Remove(airline); }
//adds a subsidiary airline public void addSubsidiaryAirline(SubsidiaryAirline airline) { this.Subsidiaries.Add(airline); AirlineHelpers.AddSubsidiaryAirline(GameObject.GetInstance().MainAirline, airline, airline.Money, airline.Airports[0]); airline.Airports.RemoveAt(0); this.MaxSubsidiaryMoney = this.Airline.Money / 2; this.AirlineAirlines.Add(airline); }
private void btnOk_Click(object sender, RoutedEventArgs e) { Airport airport = (Airport)cbAirport.SelectedItem; string color = ((PropertyInfo)cbColor.SelectedItem).Name; AirlineProfile profile = new AirlineProfile(txtAirlineName.Text.Trim(),txtIATA.Text.ToUpper().Trim(),color,GameObject.GetInstance().MainAirline.Profile.CEO,false,GameObject.GetInstance().GameTime.Year,2199); profile.addLogo(new AirlineLogo(logoPath)); profile.Country = GameObject.GetInstance().MainAirline.Profile.Country; SubsidiaryAirline subAirline = new SubsidiaryAirline(GameObject.GetInstance().MainAirline,profile,Airline.AirlineMentality.Safe,Airline.AirlineFocus.Local,Airline.AirlineLicense.Domestic,airlineType); subAirline.addAirport(airport); subAirline.Money = slMoney.Value; this.Selected = subAirline; this.Close(); }