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(); } } }