예제 #1
0
        //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;
            }
        }
예제 #2
0
        /*! creates some airliners and routes for a computer airline.
         */
        private static void CreateComputerRoutes(Airline airline)
        {
            Boolean leaseAircraft = airline.Profile.PrimaryPurchasing == AirlineProfile.PreferedPurchasing.Leasing;

            Airport airportHomeBase = FindComputerHomeBase(airline);

            AirportFacility serviceFacility = AirportFacilities.GetFacilities(AirportFacility.FacilityType.Service).Find(f => f.TypeLevel == 1);
            AirportFacility checkinFacility = AirportFacilities.GetFacilities(AirportFacility.FacilityType.CheckIn).Find(f => f.TypeLevel == 1);
            AirportFacility cargoTerminal = AirportFacilities.GetFacilities(AirportFacility.FacilityType.Cargo).Find(f => f.TypeLevel > 0);

            airportHomeBase.addAirportFacility(airline, serviceFacility, GameObject.GetInstance().GameTime);
            airportHomeBase.addAirportFacility(airline, checkinFacility, GameObject.GetInstance().GameTime);

            if (airline.AirlineRouteFocus == Route.RouteType.Cargo)
                airportHomeBase.addAirportFacility(airline, cargoTerminal, GameObject.GetInstance().GameTime);

            AirlineStartData startData = AirlineStartDatas.GetAirlineStartData(airline);

            //creates the start data for an airline
            if (startData != null)
            {
                AirportHelpers.RentGates(airportHomeBase, airline, AirportContract.ContractType.Full);

                CreateAirlineStartData(airline, startData);
            }
            else
            {
                List<Airport> airportDestinations = AIHelpers.GetDestinationAirports(airline, airportHomeBase);

                if (airportDestinations.Count == 0)
                {
                    airportDestinations = Airports.GetAirports(a => a.Profile.Country.Region == airportHomeBase.Profile.Country.Region && a != airportHomeBase);
                }

                KeyValuePair<Airliner, Boolean>? airliner = null;
                Airport airportDestination = null;

                int counter = 0;

                while ((airportDestination == null || airliner == null || !airliner.HasValue) && airportDestinations.Count > counter)
                {
                    airportDestination = airportDestinations[counter];

                    airliner = AIHelpers.GetAirlinerForRoute(airline, airportHomeBase, airportDestination, leaseAircraft, airline.AirlineRouteFocus == Route.RouteType.Cargo, true);

                    counter++;

                }

                if (airportDestination == null || !airliner.HasValue)
                {
                    CreateComputerRoutes(airline);

                }
                else
                {

                    AirportHelpers.AddAirlineContract(new AirportContract(airline, airportHomeBase, AirportContract.ContractType.Full, GameObject.GetInstance().GameTime, 2, 25, 0, true));

                    AirportHelpers.RentGates(airportDestination, airline, AirportContract.ContractType.Low_Service);
                    //airportDestination.addAirportFacility(airline, checkinFacility, GameObject.GetInstance().GameTime);

                    Guid id = Guid.NewGuid();

                    double price = PassengerHelpers.GetPassengerPrice(airportDestination, airline.Airports[0]);

                    Route route = null;
                    if (airline.AirlineRouteFocus == Route.RouteType.Passenger)
                    {
                        route = new PassengerRoute(id.ToString(), airportDestination, airline.Airports[0], GameObject.GetInstance().GameTime, price);

                        RouteClassesConfiguration configuration = AIHelpers.GetRouteConfiguration((PassengerRoute)route);

                        foreach (RouteClassConfiguration classConfiguration in configuration.getClasses())
                        {
                            ((PassengerRoute)route).getRouteAirlinerClass(classConfiguration.Type).FarePrice = price * GeneralHelpers.ClassToPriceFactor(classConfiguration.Type);

                            foreach (RouteFacility rFacility in classConfiguration.getFacilities())
                                ((PassengerRoute)route).getRouteAirlinerClass(classConfiguration.Type).addFacility(rFacility);
                        }
                    }
                    if (airline.AirlineRouteFocus == Route.RouteType.Cargo)
                    {
                        route = new CargoRoute(id.ToString(), airportDestination, airline.Airports[0], GameObject.GetInstance().GameTime, PassengerHelpers.GetCargoPrice(airportDestination, airline.Airports[0]));

                        airportDestination.addAirportFacility(airline, cargoTerminal, GameObject.GetInstance().GameTime);

                    }
                    if (leaseAircraft)
                        AirlineHelpers.AddAirlineInvoice(airline, GameObject.GetInstance().GameTime, Invoice.InvoiceType.Rents, -airliner.Value.Key.LeasingPrice * 2);
                    else
                        AirlineHelpers.AddAirlineInvoice(airline, GameObject.GetInstance().GameTime, Invoice.InvoiceType.Purchases, -airliner.Value.Key.getPrice());

                    FleetAirliner fAirliner = new FleetAirliner(leaseAircraft ? FleetAirliner.PurchasedType.Leased : FleetAirliner.PurchasedType.Bought, GameObject.GetInstance().GameTime, airline, airliner.Value.Key, airportHomeBase);
                    fAirliner.Status = FleetAirliner.AirlinerStatus.To_route_start;
                    fAirliner.addRoute(route);
                    AirlinerHelpers.CreateAirlinerClasses(fAirliner.Airliner);
                    AirlineHelpers.HireAirlinerPilots(fAirliner);

                    airline.addAirliner(fAirliner);

                    airline.addRoute(route);
                    route.LastUpdated = GameObject.GetInstance().GameTime;

                    if (route.Type == Route.RouteType.Passenger || route.Type == Route.RouteType.Mixed)
                    {
                        AIHelpers.CreateRouteTimeTable(route, fAirliner);
                    }
                    if (route.Type == Route.RouteType.Cargo)
                    {
                        AIHelpers.CreateCargoRouteTimeTable(route, fAirliner);
                    }

                }
            }
        }
예제 #3
0
        //switches from one airline to another airline
        public static void SwitchAirline(Airline airlineFrom, Airline airlineTo)
        {
            while (airlineFrom.Alliances.Count > 0)
            {
                Alliance alliance = airlineFrom.Alliances[0];
                alliance.removeMember(airlineFrom);
                alliance.addMember(new AllianceMember(airlineTo, GameObject.GetInstance().GameTime));
            }
            while (airlineFrom.Facilities.Count > 0)
            {
                AirlineFacility airlineFacility = airlineFrom.Facilities[0];
                airlineFrom.removeFacility(airlineFacility);
                airlineTo.addFacility(airlineFacility);
            }


            while (airlineFrom.getFleetSize() > 0)
            {
                FleetAirliner airliner = airlineFrom.Fleet[0];
                airlineFrom.removeAirliner(airliner);
                airlineTo.addAirliner(airliner);
                airliner.Airliner.Airline = airlineTo;
            }

            while (airlineFrom.Routes.Count > 0)
            {
                Route route = airlineFrom.Routes[0];
                route.Airline = airlineTo;

                airlineFrom.removeRoute(route);
                airlineTo.addRoute(route);
            }
            while (airlineFrom.Pilots.Count > 0)
            {
                Pilot pilot = airlineFrom.Pilots[0];
                airlineFrom.removePilot(pilot);

                pilot.Airline = airlineTo;
                airlineTo.addPilot(pilot);
            }
            while (airlineFrom.Airports.Count > 0)
            {
                Airport airport = airlineFrom.Airports[0];
                airport.Terminals.switchAirline(airlineFrom, airlineTo);

                foreach (AirportFacility facility in airport.getCurrentAirportFacilities(airlineFrom))
                {
                    if (facility.TypeLevel > airport.getCurrentAirportFacility(airlineTo, facility.Type).TypeLevel)
                        airport.addAirportFacility(airlineTo, facility, GameObject.GetInstance().GameTime);

                    AirportFacility noneFacility = AirportFacilities.GetFacilities(facility.Type).Find(f => f.TypeLevel == 0);

                    airport.addAirportFacility(airlineFrom, noneFacility, GameObject.GetInstance().GameTime);

                }
            }
        }
예제 #4
0
        /*!creates the start data for an airline
         */
        private static void CreateAirlineStartData(Airline airline, AirlineStartData startData)
        {
            AirportFacility checkinFacility = AirportFacilities.GetFacilities(AirportFacility.FacilityType.CheckIn).Find(f => f.TypeLevel == 1);
            AirportFacility cargoTerminal = AirportFacilities.GetFacilities(AirportFacility.FacilityType.Cargo).Find(f => f.TypeLevel > 0);

            //  int difficultyFactor = GameObject.GetInstance().Difficulty.AILevel > 1 ? 2 : 1; //level easy

            int startDataFactor = Convert.ToInt16(GameObject.GetInstance().Difficulty.StartDataLevel);
            var startroutes = startData.Routes.FindAll(r => r.Opened <= GameObject.GetInstance().GameTime.Year && r.Closed >= GameObject.GetInstance().GameTime.Year);

            //creates the routes
            var sRoutes = startroutes.GetRange(0, startroutes.Count / startDataFactor);
            Parallel.ForEach(sRoutes, startRoute =>
            {
                Airport dest1 = Airports.GetAirport(startRoute.Destination1);
                Airport dest2 = Airports.GetAirport(startRoute.Destination2);

                if (dest1 != null && dest2 != null)
                {
                    //if (dest1.getAirportFacility(airline, AirportFacility.FacilityType.CheckIn).TypeLevel == 0)
                    //dest1.addAirportFacility(airline, checkinFacility, GameObject.GetInstance().GameTime);

                    //if (dest2.getAirportFacility(airline, AirportFacility.FacilityType.CheckIn).TypeLevel == 0)
                    //dest2.addAirportFacility(airline, checkinFacility, GameObject.GetInstance().GameTime);

                    if (dest1.getAirportFacility(airline, AirportFacility.FacilityType.Cargo).TypeLevel == 0 && dest1.getAirportFacility(null, AirportFacility.FacilityType.Cargo).TypeLevel == 0 && airline.AirlineRouteFocus == Route.RouteType.Cargo)
                        dest1.addAirportFacility(airline, cargoTerminal, GameObject.GetInstance().GameTime);

                    if (dest2.getAirportFacility(airline, AirportFacility.FacilityType.Cargo).TypeLevel == 0 && dest2.getAirportFacility(null, AirportFacility.FacilityType.Cargo).TypeLevel == 0 && airline.AirlineRouteFocus == Route.RouteType.Cargo)
                        dest2.addAirportFacility(airline, cargoTerminal, GameObject.GetInstance().GameTime);

                    if (!AirportHelpers.HasFreeGates(dest1, airline))
                        AirportHelpers.RentGates(dest1, airline, AirportContract.ContractType.Low_Service);

                    if (!AirportHelpers.HasFreeGates(dest2, airline))
                        AirportHelpers.RentGates(dest2, airline, AirportContract.ContractType.Low_Service);

                    Guid id = Guid.NewGuid();

                    Route route = null;

                    double price = PassengerHelpers.GetPassengerPrice(dest1, dest2);

                    if (startRoute.RouteType == Route.RouteType.Mixed || startRoute.RouteType == Route.RouteType.Passenger)
                    {
                        route = new PassengerRoute(id.ToString(), dest1, dest2, GameObject.GetInstance().GameTime, price);
                    }

                    if (startRoute.RouteType == Route.RouteType.Cargo)
                        route = new CargoRoute(id.ToString(), dest1, dest2, GameObject.GetInstance().GameTime, PassengerHelpers.GetCargoPrice(dest1, dest2));

                    KeyValuePair<Airliner, Boolean>? airliner = null;
                    if (startRoute.Type != null)
                    {
                        double distance = MathHelpers.GetDistance(dest1, dest2);

                        if (startRoute.Type.Range > distance)
                        {
                            airliner = new KeyValuePair<Airliner, bool>(Airliners.GetAirlinersForSale(a => a.Type == startRoute.Type).FirstOrDefault(), true);

                            if (airliner.Value.Key == null)
                            {
                                id = Guid.NewGuid();
                                Airliner nAirliner = new Airliner(id.ToString(), startRoute.Type, airline.Profile.Country.TailNumbers.getNextTailNumber(), GameObject.GetInstance().GameTime);
                                Airliners.AddAirliner(nAirliner);

                                nAirliner.clearAirlinerClasses();

                                AirlinerHelpers.CreateAirlinerClasses(nAirliner);

                                airliner = new KeyValuePair<Airliner, bool>(nAirliner, true);
                            }
                        }

                    }

                    Boolean leaseAircraft = airline.Profile.PrimaryPurchasing == AirlineProfile.PreferedPurchasing.Leasing;

                    if (airliner == null)
                    {

                        airliner = AIHelpers.GetAirlinerForRoute(airline, dest2, dest1, leaseAircraft, startRoute.RouteType == Route.RouteType.Cargo, true);

                        if (airliner == null && airline.Profile.PrimaryPurchasing == AirlineProfile.PreferedPurchasing.Random)
                            AIHelpers.GetAirlinerForRoute(airline, dest2, dest1, true, startRoute.RouteType == Route.RouteType.Cargo, true);

                    }

                    if (airliner != null)
                    {
                        FleetAirliner fAirliner = AirlineHelpers.AddAirliner(airline, airliner.Value.Key, airline.Airports[0],leaseAircraft);
                        fAirliner.addRoute(route);
                        fAirliner.Status = FleetAirliner.AirlinerStatus.To_route_start;
                        AirlineHelpers.HireAirlinerPilots(fAirliner);

                        route.LastUpdated = GameObject.GetInstance().GameTime;

                        if (startRoute.RouteType == Route.RouteType.Mixed || startRoute.RouteType == Route.RouteType.Passenger)
                        {
                            AirlinerHelpers.CreateAirlinerClasses(fAirliner.Airliner);

                            RouteClassesConfiguration configuration = AIHelpers.GetRouteConfiguration((PassengerRoute)route);

                            foreach (RouteClassConfiguration classConfiguration in configuration.getClasses())
                            {
                                ((PassengerRoute)route).getRouteAirlinerClass(classConfiguration.Type).FarePrice = price * GeneralHelpers.ClassToPriceFactor(classConfiguration.Type);

                                foreach (RouteFacility rFacility in classConfiguration.getFacilities())
                                    ((PassengerRoute)route).getRouteAirlinerClass(classConfiguration.Type).addFacility(rFacility);
                            }

                            AIHelpers.CreateRouteTimeTable(route, fAirliner);
                        }
                        if (startRoute.RouteType == Route.RouteType.Cargo)
                        {
                            AIHelpers.CreateCargoRouteTimeTable(route, fAirliner);
                        }
                    }
                    airline.addRoute(route);
                }

            });

            //adds the airliners
            Parallel.ForEach(startData.Airliners, airliners =>
            {
                AirlinerType type = AirlinerTypes.GetType(airliners.Type);

                int totalSpan = 2010 - 1960;
                int yearSpan = GameObject.GetInstance().GameTime.Year - 1960;
                double valueSpan = Convert.ToDouble(airliners.AirlinersLate - airliners.AirlinersEarly);
                double span = valueSpan / Convert.ToDouble(totalSpan);

                int numbers = Math.Max(1, Convert.ToInt16(span * yearSpan) / startDataFactor);
                //type==null
                if (type.Produced.From <= GameObject.GetInstance().GameTime)
                {
                    for (int i = 0; i < Math.Max(numbers, airliners.AirlinersEarly); i++)
                    {
                        Guid id = Guid.NewGuid();

                        int countryNumber = rnd.Next(Countries.GetCountries().Count() - 1);
                        Country country = Countries.GetCountries()[countryNumber];

                        int builtYear = rnd.Next(type.Produced.From.Year, Math.Min(GameObject.GetInstance().GameTime.Year - 1, type.Produced.To.Year));

                        Airliner airliner = new Airliner(id.ToString(), type, country.TailNumbers.getNextTailNumber(), new DateTime(builtYear, 1, 1));

                        int age = MathHelpers.CalculateAge(airliner.BuiltDate, GameObject.GetInstance().GameTime);

                        long kmPerYear = rnd.Next(100000, 1000000);
                        long km = kmPerYear * age;

                        airliner.Flown = km;

                        Airliners.AddAirliner(airliner);

                        Boolean leaseAircraft = airline.Profile.PrimaryPurchasing == AirlineProfile.PreferedPurchasing.Leasing;

                        FleetAirliner fAirliner = AirlineHelpers.AddAirliner(airline, airliner, airline.Airports[0],leaseAircraft);
                        fAirliner.Status = FleetAirliner.AirlinerStatus.Stopped;
                        AirlineHelpers.HireAirlinerPilots(fAirliner);

                        AirlinerHelpers.CreateAirlinerClasses(fAirliner.Airliner);

                    }
                }

            });

            //the origin routes
            Parallel.ForEach(startData.OriginRoutes, routes =>
            {
                Airport origin = Airports.GetAirport(routes.Origin);

                if (origin != null)
                {
                    for (int i = 0; i < Math.Min(routes.Destinations / startDataFactor, origin.Terminals.getFreeGates()); i++)
                    {
                        //if (origin.getAirportFacility(airline, AirportFacility.FacilityType.CheckIn).TypeLevel == 0)
                        //origin.addAirportFacility(airline, checkinFacility, GameObject.GetInstance().GameTime);

                        if (!AirportHelpers.HasFreeGates(origin, airline))
                            AirportHelpers.RentGates(origin, airline, AirportContract.ContractType.Low_Service);

                        Airport destination = GetStartDataRoutesDestination(routes);

                        //if (destination.getAirportFacility(airline, AirportFacility.FacilityType.CheckIn).TypeLevel == 0)
                        //destination.addAirportFacility(airline, checkinFacility, GameObject.GetInstance().GameTime);

                        if (!AirportHelpers.HasFreeGates(destination, airline))
                            AirportHelpers.RentGates(destination, airline, AirportContract.ContractType.Low_Service);

                        Guid id = Guid.NewGuid();

                        Route route = null;

                        double price = PassengerHelpers.GetPassengerPrice(origin, destination);

                        if (routes.RouteType == Route.RouteType.Mixed || routes.RouteType == Route.RouteType.Passenger)
                            route = new PassengerRoute(id.ToString(), origin, destination, GameObject.GetInstance().GameTime, price);

                        if (routes.RouteType == Route.RouteType.Cargo)
                            route = new CargoRoute(id.ToString(), origin, destination, GameObject.GetInstance().GameTime, PassengerHelpers.GetCargoPrice(origin, destination));

                        Boolean leaseAircraft = airline.Profile.PrimaryPurchasing == AirlineProfile.PreferedPurchasing.Leasing;

                        KeyValuePair<Airliner, Boolean>? airliner = AIHelpers.GetAirlinerForRoute(airline, origin, destination, leaseAircraft, routes.RouteType == Route.RouteType.Cargo, true);

                        if (airliner == null && airline.Profile.PrimaryPurchasing == AirlineProfile.PreferedPurchasing.Random)
                            airliner = AIHelpers.GetAirlinerForRoute(airline, origin, destination, true, routes.RouteType == Route.RouteType.Cargo, true);

                        double distance = MathHelpers.GetDistance(origin, destination);

                        if (airliner != null)
                        {
                            FleetAirliner fAirliner = AirlineHelpers.AddAirliner(airline, airliner.Value.Key, airline.Airports[0], leaseAircraft);
                            fAirliner.addRoute(route);
                            fAirliner.Status = FleetAirliner.AirlinerStatus.To_route_start;
                            AirlineHelpers.HireAirlinerPilots(fAirliner);

                            route.LastUpdated = GameObject.GetInstance().GameTime;

                            if (routes.RouteType == Route.RouteType.Passenger || routes.RouteType == Route.RouteType.Mixed)
                            {
                                AirlinerHelpers.CreateAirlinerClasses(fAirliner.Airliner);

                                RouteClassesConfiguration configuration = AIHelpers.GetRouteConfiguration((PassengerRoute)route);

                                foreach (RouteClassConfiguration classConfiguration in configuration.getClasses())
                                {
                                    ((PassengerRoute)route).getRouteAirlinerClass(classConfiguration.Type).FarePrice = price * GeneralHelpers.ClassToPriceFactor(classConfiguration.Type);

                                    foreach (RouteFacility rFacility in classConfiguration.getFacilities())
                                        ((PassengerRoute)route).getRouteAirlinerClass(classConfiguration.Type).addFacility(rFacility);
                                }

                                AIHelpers.CreateRouteTimeTable(route, fAirliner);
                            }
                            if (routes.RouteType == Route.RouteType.Cargo)
                                AIHelpers.CreateCargoRouteTimeTable(route, fAirliner);

                            airline.addRoute(route);

                        }
                    }
                }
            });
        }