public void Add(Vector3 velocity)
            {
                if (this.FilterSize == 0)
                {
                    this.mLastGoodHeading = velocity;
                    return;
                }
                float magnitude = velocity.magnitude;

                if (magnitude > 0.0001f)
                {
                    CinemachineOrbitalTransposer.HeadingTracker.Item item = default(CinemachineOrbitalTransposer.HeadingTracker.Item);
                    item.velocity = velocity;
                    item.weight   = magnitude;
                    item.time     = Time.time;
                    if (this.mCount == this.FilterSize)
                    {
                        this.PopBottom();
                    }
                    this.mCount++;
                    this.mHistory[this.mTop] = item;
                    if (++this.mTop == this.FilterSize)
                    {
                        this.mTop = 0;
                    }
                    this.mWeightSum  *= CinemachineOrbitalTransposer.HeadingTracker.Decay(item.time - this.mWeightTime);
                    this.mWeightTime  = item.time;
                    this.mWeightSum  += magnitude;
                    this.mHeadingSum += item.velocity;
                }
            }
 private void PopBottom()
 {
     if (this.mCount > 0)
     {
         float time = Time.time;
         CinemachineOrbitalTransposer.HeadingTracker.Item item = this.mHistory[this.mBottom];
         if (++this.mBottom == this.FilterSize)
         {
             this.mBottom = 0;
         }
         this.mCount--;
         float num = CinemachineOrbitalTransposer.HeadingTracker.Decay(time - item.time);
         this.mWeightSum  -= item.weight * num;
         this.mHeadingSum -= item.velocity * num;
         if (this.mWeightSum <= 0.0001f || this.mCount == 0)
         {
             this.ClearHistory();
         }
     }
 }