コード例 #1
0
        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;
        }
コード例 #2
0
        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;
        }