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); } }
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); }