public static Airline LoadAirline(string path) { var doc = new XmlDocument(); doc.Load(path); XmlElement root = doc.DocumentElement; var profileElement = (XmlElement) root?.SelectSingleNode("profile"); if (profileElement != null) { string name = profileElement.Attributes["name"].Value; string iata = profileElement.Attributes["iata"].Value; string color = profileElement.Attributes["color"].Value; string logoImage = profileElement.HasAttribute("logo") ? profileElement.Attributes["logo"].Value : ""; string sCountries = profileElement.Attributes["country"].Value; var countries = sCountries.Split(';').Select(Countries.GetCountry).ToList(); //Country country = Countries.GetCountry(profileElement.Attributes["country"].Value); string ceo = profileElement.Attributes["CEO"].Value; var mentality = (Airline.AirlineMentality) Enum.Parse(typeof (Airline.AirlineMentality), profileElement.Attributes["mentality"].Value); var market = (AirlineFocus) Enum.Parse(typeof (AirlineFocus), profileElement.Attributes["market"].Value); var routeFocus = Route.RouteType.Passenger; if (profileElement.HasAttribute("routefocus")) { routeFocus = (Route.RouteType) Enum.Parse(typeof (Route.RouteType), profileElement.Attributes["routefocus"].Value); } var narrativeElement = (XmlElement) profileElement.SelectSingleNode("narrative"); string narrative = ""; if (narrativeElement != null) { narrative = narrativeElement.Attributes["narrative"].Value; } bool isReal = true; int founded = 1950; int folded = 2199; var infoElement = (XmlElement) root.SelectSingleNode("info"); if (infoElement != null) { isReal = Convert.ToBoolean(infoElement.Attributes["real"].Value); founded = Convert.ToInt16(infoElement.Attributes["from"].Value); folded = Convert.ToInt16(infoElement.Attributes["to"].Value); } var license = Airline.AirlineLicense.Domestic; if (market == AirlineFocus.Global) { license = mentality == Airline.AirlineMentality.Aggressive ? Airline.AirlineLicense.LongHaul : Airline.AirlineLicense.ShortHaul; } if (market == AirlineFocus.Regional) { license = Airline.AirlineLicense.Regional; } var airline = new Airline( new AirlineProfile(name, iata, color, ceo, isReal, founded, folded), mentality, market, license, routeFocus) {Profile = {Countries = countries}}; airline.Profile.Country = airline.Profile.Countries[0]; airline.Profile.LogoName = logoImage; var preferedsElement = (XmlElement) root.SelectSingleNode("prefereds"); if (preferedsElement != null) { if (preferedsElement.HasAttribute("aircrafts")) { string[] preferedAircrafts = preferedsElement.Attributes["aircrafts"].Value.Split(','); foreach (string preferedAircraft in preferedAircrafts) { AirlinerType pAircraft = AirlinerTypes.GetType(preferedAircraft); airline.Profile.AddPreferedAircraft(pAircraft); } } if (preferedsElement.HasAttribute("primarypurchasing")) { var primarypurchasing = (AirlineProfile.PreferedPurchasing) Enum.Parse( typeof (AirlineProfile.PreferedPurchasing), preferedsElement.Attributes["primarypurchasing"].Value); airline.Profile.PrimaryPurchasing = primarypurchasing; } } XmlNodeList logosList = profileElement.SelectNodes("logos/logo"); if (logosList != null) foreach (XmlElement logoElement in logosList) { int logoFromYear = Convert.ToInt16(logoElement.Attributes["from"].Value); int logoToYear = Convert.ToInt16(logoElement.Attributes["to"].Value); string logoPath = AppSettings.GetDataPath() + "\\graphics\\airlinelogos\\multilogos\\" + logoElement.Attributes["path"].Value + ".png"; airline.Profile.AddLogo(new AirlineLogo(logoFromYear, logoToYear, logoPath)); } if (profileElement.HasAttribute("preferedairport")) { Airport preferedAirport = Airports.GetAirport(profileElement.Attributes["preferedairport"].Value); airline.Profile.PreferedAirport = preferedAirport; } XmlNodeList subsidiariesList = root.SelectNodes("subsidiaries/subsidiary"); if (subsidiariesList != null) { foreach (XmlElement subsidiaryElement in subsidiariesList) { string subName = subsidiaryElement.Attributes["name"].Value; string subIATA = subsidiaryElement.Attributes["IATA"].Value; Airport subAirport = Airports.GetAirport(subsidiaryElement.Attributes["homebase"].Value); var subMentality = (Airline.AirlineMentality) Enum.Parse( typeof (Airline.AirlineMentality), subsidiaryElement.Attributes["mentality"].Value); var subMarket = (AirlineFocus) Enum.Parse(typeof (AirlineFocus), subsidiaryElement.Attributes["market"].Value); string subLogo = AppSettings.GetDataPath() + "\\graphics\\airlinelogos\\" + subsidiaryElement.Attributes["logo"].Value + ".png"; var airlineRouteFocus = Route.RouteType.Passenger; if (subsidiaryElement.HasAttribute("routefocus")) { airlineRouteFocus = (Route.RouteType) Enum.Parse(typeof (Route.RouteType), subsidiaryElement.Attributes["routefocus"].Value); } airline.FutureAirlines.Add( new FutureSubsidiaryAirline( subName, subIATA, subAirport, subMentality, subMarket, airlineRouteFocus, subLogo)); } } var startDataElement = (XmlElement) root.SelectSingleNode("startdata"); if (startDataElement != null) { var startData = new AirlineStartData(airline); XmlNodeList routesList = startDataElement.SelectNodes("routes/route"); if (routesList != null) foreach (XmlElement routeElement in routesList) { string dest1 = routeElement.Attributes["destination1"].Value; string dest2 = routeElement.Attributes["destination2"].Value; int opened = Convert.ToInt16(routeElement.Attributes["opened"].Value); int closed = Convert.ToInt16(routeElement.Attributes["closed"].Value); Route.RouteType routetype = airline.AirlineRouteFocus; if (routeElement.HasAttribute("routetype")) { routetype = (Route.RouteType) Enum.Parse(typeof (Route.RouteType), routeElement.Attributes["routetype"].Value); } var sdr = new StartDataRoute(dest1, dest2, opened, closed, routetype); startData.AddRoute(sdr); if (routeElement.HasAttribute("airliner")) { AirlinerType airlinerType = AirlinerTypes.GetType(routeElement.Attributes["airliner"].Value); sdr.Type = airlinerType; } } XmlNodeList airlinersList = startDataElement.SelectNodes("airliners/airliner"); foreach (XmlElement airlinerElement in airlinersList) { string type = airlinerElement.Attributes["type"].Value; int early = Convert.ToInt16(airlinerElement.Attributes["early"].Value); int late = Convert.ToInt16(airlinerElement.Attributes["late"].Value); startData.AddAirliners(new StartDataAirliners(type, early, late)); } XmlNodeList randomRoutesList = startDataElement.SelectNodes("random_routes/routes"); foreach (XmlElement routeElement in randomRoutesList) { string origin = routeElement.Attributes["origin"].Value; int destinations = Convert.ToInt16(routeElement.Attributes["destinations"].Value); var minimumsize = (GeneralHelpers.Size) Enum.Parse(typeof (GeneralHelpers.Size), routeElement.Attributes["minimumsize"].Value); Route.RouteType routetype = airline.AirlineRouteFocus; if (routeElement.HasAttribute("routetype")) { routetype = (Route.RouteType) Enum.Parse(typeof (Route.RouteType), routeElement.Attributes["routetype"].Value); } var routes = new StartDataRoutes(origin, destinations, minimumsize, routetype); XmlNodeList countriesList = routeElement.SelectNodes("countries/country"); foreach (XmlElement countryElement in countriesList) { Country routesCountry = Countries.GetCountry(countryElement.Attributes["value"].Value); routes.AddCountry(routesCountry); } startData.AddOriginRoutes(routes); } AirlineStartDatas.AddStartData(startData); } airline.Profile.Narrative = narrative; Airlines.AddAirline(airline); return airline; } return null; }
private static Airport GetStartDataRoutesDestination(StartDataRoutes routes) { double maxRange = (AirlinerTypes.GetTypes( t => t.Produced.From <= GameObject.GetInstance().GameTime && t.Produced.To > GameObject.GetInstance().GameTime).Max(t => t.Range))*0.8; var airports = new List<Airport>(); if (routes.RouteType == Route.RouteType.Cargo) { airports = Airports.GetAirports( a => routes.Countries.Contains(a.Profile.Country) && MathHelpers.GetDistance(Airports.GetAirport(routes.Origin), a) < maxRange && a != Airports.GetAirport(routes.Origin) && ((int) a.Profile.Cargo) >= ((int) routes.MinimumSize) && a.Terminals.GetFreeGates(Terminal.TerminalType.Cargo) > 0); } if (routes.RouteType == Route.RouteType.Passenger || routes.RouteType == Route.RouteType.Mixed) { airports = Airports.GetAirports( a => routes.Countries.Contains(a.Profile.Country) && MathHelpers.GetDistance(Airports.GetAirport(routes.Origin), a) < maxRange && a != Airports.GetAirport(routes.Origin) && ((int) a.Profile.Size) >= ((int) routes.MinimumSize) && a.Terminals.GetFreeGates(Terminal.TerminalType.Passenger) > 0); } return airports[Rnd.Next(airports.Count)]; }
//adds origin routes to the list public void AddOriginRoutes(StartDataRoutes route) { OriginRoutes.Add(route); }