コード例 #1
0
ファイル: Patches.cs プロジェクト: fauxnik/DVPassengerJobs
 static void Postfix(JobChainController __instance, ref JobChainSaveData __result)
 {
     if (__instance is PassengerTransportChainController)
     {
         __result = new PassengerChainSaveData(PassengerChainSaveData.PassChainType.Transport, __result);
     }
     else if (__instance is CommuterChainController)
     {
         __result = new PassengerChainSaveData(PassengerChainSaveData.PassChainType.Commuter, __result);
     }
 }
コード例 #2
0
        private static JobChainController CreateSavedJobChain(PassengerChainSaveData passChainData)
        {
            // Figure out chain type
            PassengerChainSaveData.PassChainType chainType = passChainData.ChainType;

            if (InitializeCorrespondingJobBooklet == null)
            {
                PrintError("Failed to connect to JobSaveManager methods");
                return(null);
            }

            List <TrainCar> trainCarsFromCarGuids = GetTrainCarsFromCarGuids(passChainData.trainCarGuids);

            if (trainCarsFromCarGuids == null)
            {
                PrintError("Couldn't find trainCarsForJobChain with trainCarGuids from chainSaveData! Skipping load of this job chain!");
                return(null);
            }

            var jobChainGO = new GameObject();
            JobChainController chainController;

            if (chainType == PassengerChainSaveData.PassChainType.Transport)
            {
                // PASSENGER TRANSPORT (EXPRESS) CHAIN
                StaticJobDefinition jobDefinition;
                StationsChainData   chainData = null;
                chainController = new PassengerTransportChainController(jobChainGO)
                {
                    trainCarsForJobChain = trainCarsFromCarGuids
                };

                foreach (JobDefinitionDataBase jobData in passChainData.jobChainData)
                {
                    if (jobData is PassengerJobDefinitionData pjData)
                    {
                        jobDefinition = CreateSavedPassengerJob(jobChainGO, pjData);
                        jobDefinition?.ForceJobId(passChainData.firstJobId);
                        chainData = new StationsChainData(jobData.originStationId, jobData.destinationStationId);
                    }
                    else
                    {
                        PrintError("Express pax chain contains invalid job type");
                        return(null);
                    }

                    if (jobDefinition == null)
                    {
                        PrintError("Failed to generate job definition from save data");
                        UnityEngine.Object.Destroy(jobChainGO);
                        return(null);
                    }

                    chainController.AddJobDefinitionToChain(jobDefinition);
                }

                jobChainGO.name = $"[LOADED] ChainJob[Passenger]: {chainData.chainOriginYardId} - {chainData.chainDestinationYardId}";
            }
            else
            {
                // COMMUTER JOB CHAIN
                StaticJobDefinition jobDefinition;
                StationsChainData   chainData = null;
                bool first = true;

                chainController = new CommuterChainController(jobChainGO)
                {
                    trainCarsForJobChain = trainCarsFromCarGuids
                };

                foreach (JobDefinitionDataBase jobDataBase in passChainData.jobChainData)
                {
                    if (jobDataBase is PassengerJobDefinitionData jobData)
                    {
                        jobDefinition = CreateSavedPassengerJob(jobChainGO, jobData);

                        if (first)
                        {
                            chainData = new StationsChainData(jobData.originStationId, jobData.destinationStationId);
                            jobDefinition?.ForceJobId(passChainData.firstJobId);
                            first = false;
                        }
                    }
                    else
                    {
                        PrintError("Commuter chain contains invalid job type");
                        return(null);
                    }

                    if (jobDefinition == null)
                    {
                        PrintError("Failed to generate job definition from save data");
                        UnityEngine.Object.Destroy(jobChainGO);
                        return(null);
                    }

                    chainController.AddJobDefinitionToChain(jobDefinition);
                }

                jobChainGO.name = $"[LOADED] ChainJob[Commuter]: {chainData.chainOriginYardId} - {chainData.chainDestinationYardId}";
            }

            return(chainController);
        }