private void UpdateEngineSoundsStraight()
        {
            int startSoundIndex    = this.startSoundIndex;
            int rPMDataArrayLength = this.RPMDataArrayLength;
            int num3 = 1;

            while (true)
            {
                if (startSoundIndex != rPMDataArrayLength)
                {
                    RPMSoundBehaviour rpmSoundBehaviour = this.RPMSoundBehaviourArray[startSoundIndex];
                    if (!this.IsRPMBelowEndRange(this.EngineRpm, rpmSoundBehaviour) && rpmSoundBehaviour.NeedToStop)
                    {
                        rpmSoundBehaviour.Stop();
                        this.startSoundIndex += num3;
                        startSoundIndex      += num3;
                        continue;
                    }
                    if (this.IsRPMAboveBeginRange(this.EngineRpm, rpmSoundBehaviour))
                    {
                        rpmSoundBehaviour.Play(this.engineVolume);
                        this.endSoundIndex = startSoundIndex;
                        startSoundIndex   += num3;
                        continue;
                    }
                    rpmSoundBehaviour.Stop();
                }
                return;
            }
        }
        private void UpdateCurrentEngineSoundList()
        {
            int  startSoundIndex = this.startSoundIndex;
            int  endSoundIndex   = this.endSoundIndex;
            bool flag            = true;

            for (int i = this.startSoundIndex; i <= this.endSoundIndex; i++)
            {
                RPMSoundBehaviour behaviour = this.RPMSoundBehaviourArray[i];
                if (behaviour.NeedToStop)
                {
                    behaviour.Stop();
                }
                else
                {
                    behaviour.Play(this.engineVolume);
                    endSoundIndex = i;
                    if (flag)
                    {
                        flag            = false;
                        startSoundIndex = i;
                    }
                }
            }
            this.endSoundIndex   = endSoundIndex;
            this.startSoundIndex = startSoundIndex;
        }
        private void UpdateEngineSoundsReverse()
        {
            int endSoundIndex = this.endSoundIndex;
            int num2          = -1;
            int num3          = -1;

            while (true)
            {
                if (endSoundIndex != num2)
                {
                    RPMSoundBehaviour rpmSoundBehaviour = this.RPMSoundBehaviourArray[endSoundIndex];
                    if (!this.IsRPMAboveBeginRange(this.EngineRpm, rpmSoundBehaviour) && rpmSoundBehaviour.NeedToStop)
                    {
                        rpmSoundBehaviour.Stop();
                        this.endSoundIndex += num3;
                        endSoundIndex      += num3;
                        continue;
                    }
                    if (this.IsRPMBelowEndRange(this.EngineRpm, rpmSoundBehaviour))
                    {
                        rpmSoundBehaviour.Play(this.engineVolume);
                        this.startSoundIndex = endSoundIndex;
                        endSoundIndex       += num3;
                        continue;
                    }
                    rpmSoundBehaviour.Stop();
                }
                return;
            }
        }
        public virtual void Build(HullSoundEngineController engine, AbstractRPMSoundModifier abstractRPMSoundModifier, RPMSoundBehaviour rpmSoundBehaviour)
        {
            RPMVolumeUpdaterFinishBehaviour component = base.gameObject.GetComponent <RPMVolumeUpdaterFinishBehaviour>();

            if (component != null)
            {
                DestroyImmediate(component);
            }
            this.engine            = engine;
            this.parentModifier    = abstractRPMSoundModifier;
            this.rpmSoundBehaviour = rpmSoundBehaviour;
        }
        public void Build(RPMSoundBehaviour rpmSoundBehaviour)
        {
            this.rpmSoundBehaviour = rpmSoundBehaviour;
            this.targetRPM         = rpmSoundBehaviour.RPM;
            HullSoundEngineController hullSoundEngine = rpmSoundBehaviour.HullSoundEngine;

            if (hullSoundEngine.UseAudioFilters)
            {
                this.InitChildUpdater <RPMAudioFilter, RPMVolumeUpdater>();
            }
            else
            {
                this.InitChildUpdater <RPMVolumeUpdater, RPMAudioFilter>();
            }
            this.childUpdater.Build(hullSoundEngine, this, rpmSoundBehaviour);
        }
        public void Build()
        {
            this.RPMDataArrayLength = this.RPMSoundBehaviourArray.Length;
            if (this.RPMDataArrayLength == 0)
            {
                base.enabled = false;
                throw new Exception("No data for hull sound engine");
            }
            this.RPMSoundBehaviourArray = this.RPMSoundBehaviourArray.ToList <RPMSoundBehaviour>().OrderBy <RPMSoundBehaviour, float>(new Func <RPMSoundBehaviour, float>(this.SortByRPMProperty)).ToArray <RPMSoundBehaviour>();
            this.lastRPMDataIndex       = this.RPMDataArrayLength - 1;
            RPMSoundBehaviour behaviour  = this.RPMSoundBehaviourArray[0];
            RPMSoundBehaviour behaviour2 = this.RPMSoundBehaviourArray[this.lastRPMDataIndex];

            this.minRPM = behaviour.RPM;
            this.maxRPM = behaviour2.RPM;
            for (int i = 0; i < this.RPMDataArrayLength; i++)
            {
                float prevRPM = (i != 0) ? this.RPMSoundBehaviourArray[i - 1].RPM : (this.minRPM - ((this.extremalRPMStartOffset + this.hesitationAmplitudeRPM) / this.blendRange));
                this.RPMSoundBehaviourArray[i].Build(this, prevRPM, (i != this.lastRPMDataIndex) ? this.RPMSoundBehaviourArray[i + 1].RPM : (this.maxRPM + ((this.extremalRPMEndOffset + this.hesitationAmplitudeRPM) / this.blendRange)), this.blendRange);
            }
        }
        private void PlayAppropriateEngineSounds()
        {
            bool flag = false;

            for (int i = 0; i < this.RPMDataArrayLength; i++)
            {
                RPMSoundBehaviour rpmSoundBehaviour = this.RPMSoundBehaviourArray[i];
                if (!this.IsRPMWithinRange(rpmSoundBehaviour, this.EngineRpm))
                {
                    rpmSoundBehaviour.Stop();
                }
                else
                {
                    if (!flag)
                    {
                        flag = true;
                        this.startSoundIndex = i;
                    }
                    rpmSoundBehaviour.Play(this.engineVolume);
                    this.endSoundIndex = i;
                }
            }
        }
 public override void Build(HullSoundEngineController engine, AbstractRPMSoundModifier abstractRPMSoundModifier, RPMSoundBehaviour rpmSoundBehaviour)
 {
     base.Build(engine, abstractRPMSoundModifier, rpmSoundBehaviour);
     this.rpmVolumeUpdaterFinishBehaviour = base.gameObject.AddComponent <RPMVolumeUpdaterFinishBehaviour>();
     this.rpmVolumeUpdaterFinishBehaviour.Build(base.parentModifier.Source);
 }
 private float SortByRPMProperty(RPMSoundBehaviour currentRPMSoundBehaviour) =>
 currentRPMSoundBehaviour.RPM;
 public bool IsRPMWithinRange(RPMSoundBehaviour rpmSoundBehaviour, float rpm) =>
 this.IsRPMAboveBeginRange(rpm, rpmSoundBehaviour) && this.IsRPMBelowEndRange(rpm, rpmSoundBehaviour);
 private bool IsRPMBelowEndRange(float rpm, RPMSoundBehaviour rpmSoundBehaviour) =>
 rpm < rpmSoundBehaviour.RangeEndRpm;
 private bool IsRPMAboveBeginRange(float rpm, RPMSoundBehaviour rpmSoundBehaviour) =>
 rpm >= rpmSoundBehaviour.RangeBeginRpm;