Пример #1
0
        private static JobChainControllerWithEmptyHaulGeneration GenerateTransportChainController(
            StationController startingStation,
            Track startingTrack,
            StationController destStation,
            Track destTrack,
            List <TrainCar> orderedTrainCars,
            List <CargoType> orderedCargoTypes,
            List <float> orderedCargoAmounts,
            bool forceCorrectCargoStateOnCars,
            float bonusTimeLimit,
            float initialWage,
            JobLicenses requiredLicenses)
        {
            Debug.Log(string.Format(
                          "[PersistentJobs] transport: attempting to generate ChainJob[{0}]: {1} - {2}",
                          JobType.ShuntingLoad,
                          startingStation.logicStation.ID,
                          destStation.logicStation.ID
                          ));
            GameObject gameObject = new GameObject(string.Format(
                                                       "ChainJob[{0}]: {1} - {2}",
                                                       JobType.Transport,
                                                       startingStation.logicStation.ID,
                                                       destStation.logicStation.ID
                                                       ));

            gameObject.transform.SetParent(startingStation.transform);
            JobChainControllerWithEmptyHaulGeneration jobChainController
                = new JobChainControllerWithEmptyHaulGeneration(gameObject);
            StationsChainData chainData = new StationsChainData(
                startingStation.stationInfo.YardID,
                destStation.stationInfo.YardID
                );

            jobChainController.trainCarsForJobChain = orderedTrainCars;
            List <Car> orderedLogicCars = TrainCar.ExtractLogicCars(orderedTrainCars);
            StaticTransportJobDefinition staticTransportJobDefinition
                = gameObject.AddComponent <StaticTransportJobDefinition>();

            staticTransportJobDefinition.PopulateBaseJobDefinition(
                startingStation.logicStation,
                bonusTimeLimit,
                initialWage,
                chainData,
                requiredLicenses
                );
            staticTransportJobDefinition.startingTrack                = startingTrack;
            staticTransportJobDefinition.destinationTrack             = destTrack;
            staticTransportJobDefinition.trainCarsToTransport         = orderedLogicCars;
            staticTransportJobDefinition.transportedCargoPerCar       = orderedCargoTypes;
            staticTransportJobDefinition.cargoAmountPerCar            = orderedCargoAmounts;
            staticTransportJobDefinition.forceCorrectCargoStateOnCars = forceCorrectCargoStateOnCars;
            jobChainController.AddJobDefinitionToChain(staticTransportJobDefinition);
            return(jobChainController);
        }
Пример #2
0
        private static JobChainControllerWithEmptyHaulGeneration GenerateShuntingUnloadChainController(
            StationController startingStation,
            Track startingTrack,
            WarehouseMachine unloadMachine,
            StationController destinationStation,
            List <CarsPerTrack> carsPerDestinationTrack,
            List <TrainCar> orderedTrainCars,
            List <CargoType> orderedCargoTypes,
            List <float> orderedCargoAmounts,
            bool forceCorrectCargoStateOnCars,
            float bonusTimeLimit,
            float initialWage,
            JobLicenses requiredLicenses)
        {
            Debug.Log(string.Format(
                          "[PersistentJobs] unload: attempting to generate ChainJob[{0}]: {1} - {2}",
                          JobType.ShuntingLoad,
                          startingStation.logicStation.ID,
                          destinationStation.logicStation.ID
                          ));
            GameObject gameObject = new GameObject(string.Format(
                                                       "ChainJob[{0}]: {1} - {2}",
                                                       JobType.ShuntingUnload,
                                                       startingStation.logicStation.ID,
                                                       destinationStation.logicStation.ID
                                                       ));

            gameObject.transform.SetParent(destinationStation.transform);
            JobChainControllerWithEmptyHaulGeneration jobChainController
                = new JobChainControllerWithEmptyHaulGeneration(gameObject);
            StationsChainData chainData = new StationsChainData(
                startingStation.stationInfo.YardID,
                destinationStation.stationInfo.YardID);

            jobChainController.trainCarsForJobChain = orderedTrainCars;
            Dictionary <CargoType, List <(TrainCar, float)> > cargoTypeToTrainCarAndAmount
                = new Dictionary <CargoType, List <(TrainCar, float)> >();

            for (int i = 0; i < orderedTrainCars.Count; i++)
            {
                if (!cargoTypeToTrainCarAndAmount.ContainsKey(orderedCargoTypes[i]))
                {
                    cargoTypeToTrainCarAndAmount[orderedCargoTypes[i]] = new List <(TrainCar, float)>();
                }
                cargoTypeToTrainCarAndAmount[orderedCargoTypes[i]].Add((orderedTrainCars[i], orderedCargoAmounts[i]));
            }
            List <CarsPerCargoType> unloadData = cargoTypeToTrainCarAndAmount.Select(
                kvPair => new CarsPerCargoType(
                    kvPair.Key,
                    kvPair.Value.Select(t => t.Item1.logicCar).ToList(),
                    kvPair.Value.Aggregate(0.0f, (sum, t) => sum + t.Item2))).ToList();
            StaticShuntingUnloadJobDefinition staticShuntingUnloadJobDefinition
                = gameObject.AddComponent <StaticShuntingUnloadJobDefinition>();

            staticShuntingUnloadJobDefinition.PopulateBaseJobDefinition(
                destinationStation.logicStation,
                bonusTimeLimit,
                initialWage,
                chainData,
                requiredLicenses);
            staticShuntingUnloadJobDefinition.startingTrack           = startingTrack;
            staticShuntingUnloadJobDefinition.carsPerDestinationTrack = carsPerDestinationTrack;
            staticShuntingUnloadJobDefinition.unloadData    = unloadData;
            staticShuntingUnloadJobDefinition.unloadMachine = unloadMachine;
            staticShuntingUnloadJobDefinition.forceCorrectCargoStateOnCars = forceCorrectCargoStateOnCars;
            jobChainController.AddJobDefinitionToChain(staticShuntingUnloadJobDefinition);
            return(jobChainController);
        }