public System.Collections.IEnumerator GeneratePassengerJobs() { PassengerJobs.ModEntry.Logger.Log($"Generating jobs at {Controller.stationInfo.Name}"); // Create commuter hauls until >= half of storage tracks are filled var existingChains = Controller.ProceduralJobsController.GetCurrentJobChains(); //int nExtantCommutes = existingChains.Count(c => c is CommuterChainController); int nChains = existingChains.Count; double totalTrackSpace = StorageTracks.Select(t => t.length).Sum(); // generate max 3 commuter chains from each station //int nCommToGenerate = 3 - nExtantCommutes; PassengerJobs.ModEntry.Logger.Log($"{Controller.stationInfo.YardID} has {nChains} pax jobs"); // alternate express/commuter, starting w/ express bool genExpress = true; for (int attemptCounter = 5; attemptCounter > 0; attemptCounter--) { // break on storage tracks >70% full double reservedSpace = StorageTracks.Select(t => TrackOrg.GetReservedSpace(t)).Sum(); if ((reservedSpace / totalTrackSpace) >= 0.7d) { break; } yield return(new WaitForSeconds(0.2f)); try { JobChainController result; if (genExpress) { result = GenerateNewTransportJob(); } else { result = GenerateNewCommuterRun(); } } catch (Exception ex) { PassengerJobs.ModEntry.Logger.LogException(ex); } genExpress = !genExpress; } GenerationRoutine = null; yield break; }
public System.Collections.IEnumerator GeneratePassengerJobs() { PassengerJobs.ModEntry.Logger.Log($"Generating jobs at {Controller.stationInfo.Name}"); // Create passenger hauls until >= half the platforms are filled int attemptCounter; for (attemptCounter = 2; attemptCounter > 0; attemptCounter--) { // break if there are no more available outbound platforms if (TrackOrg.FilterOutReservedTracks(TrackOrg.FilterOutOccupiedTracks(PlatformTracks)).Count == 0) { break; } try { GenerateNewTransportJob(); } catch (Exception ex) { PassengerJobs.ModEntry.Logger.LogException(ex); } yield return(null); } // Create commuter hauls until >= half of storage tracks are filled var existingChains = Controller.ProceduralJobsController.GetCurrentJobChains(); int nExtantCommutes = existingChains.Count(c => c is CommuterChainController); double totalTrackSpace = StorageTracks.Select(t => t.length).Sum(); // generate max 3 commuter chains from each station int nToGenerate = 3 - nExtantCommutes; PassengerJobs.ModEntry.Logger.Log($"{Controller.stationInfo.YardID} has {nExtantCommutes} commute jobs, generating up to {nToGenerate} additional"); for (attemptCounter = 5; attemptCounter > 0; attemptCounter--) { if (nToGenerate <= 0) { break; } // break on storage tracks >60% full double reservedSpace = StorageTracks.Select(t => TrackOrg.GetReservedSpace(t)).Sum(); if ((reservedSpace / totalTrackSpace) >= 0.6d) { break; } yield return(new WaitForSeconds(0.2f)); try { var result = GenerateNewCommuterRun(); if (result != null) { nToGenerate -= 1; } } catch (Exception ex) { PassengerJobs.ModEntry.Logger.LogException(ex); } } GenerationRoutine = null; yield break; }