public ProcessCounter UpdateProcesses(long delta)
        {
            var counter = new ProcessCounter();

            for (var i = 0; i < ProcessList.Count; i++)
            {
                var process = ProcessList[i];

                // process is uninitialized, so initialize it
                if (process.State == ProcessState.Uninitialized)
                {
                    process.OnInit();
                }

                // give the process an update tick if it's running
                if (process.State == ProcessState.Running)
                {
                    process.OnUpdate(delta);
                }

                // check to see if the process is dead
                if (process.IsDead)
                {
                    HandleDeadProcess(process, ref counter);
                }
            }

            return(counter);
        }
Ejemplo n.º 2
0
        public bool Equals(CarGeneratorData other)
        {
            if (other == null)
            {
                return(false);
            }

            return(NumberOfCarGenerators.Equals(other.NumberOfCarGenerators) &&
                   NumberOfEnabledCarGenerators.Equals(other.NumberOfEnabledCarGenerators) &&
                   ProcessCounter.Equals(other.ProcessCounter) &&
                   GenerateEvenIfPlayerIsCloseCounter.Equals(other.GenerateEvenIfPlayerIsCloseCounter) &&
                   CarGenerators.SequenceEqual(other.CarGenerators));
        }
        private void HandleDeadProcess(Process process, ref ProcessCounter counter)
        {
            var successCount = 0;
            var failCount    = 0;

            // run the appropriate exit function
            switch (process.State)
            {
            case ProcessState.Succeeded:
                process.OnSuccess();
                var child = process.RemoveChild();
                if (child != null)
                {
                    AttachProcess(child);
                }
                else
                {
                    ++successCount;     // only counts if the whole chain completed
                }
                break;

            case ProcessState.Failed:
                process.OnFail();
                ++failCount;
                break;

            case ProcessState.Aborted:
                process.OnAbort();
                ++failCount;
                break;
            }

            // remove the process and destroy it
            process.Destroy();
            ProcessList.Remove(process);

            counter.Fail    += failCount;
            counter.Success += successCount;
        }