Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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);
 }