001package com.fs.starfarer.api.util;
002
003public class RollingAverageTracker {
004
005        private IntervalUtil timer;
006        private final float f;
007        private float elaspedFractionOverride = -1;
008        private float curr = 0, avg = 0;
009        
010        
011        public RollingAverageTracker(float minInterval, float maxInterval, float factor) {
012                this.f = factor;
013                timer = new IntervalUtil(minInterval, maxInterval);
014        }
015        
016        public void advance(float amount) {
017                timer.advance(amount);
018                if (timer.intervalElapsed()) {
019                        updateAverage();
020                }
021        }
022        
023        public void updateAverage() {
024                if (avg <= 0) {
025                        avg = curr;
026                } else {
027                        avg = avg * (1f - f) + curr * f;
028                }
029                curr = 0;
030        }
031        
032        public float getCurr() {
033                return curr;
034        }
035
036        public float getAverage() {
037                float e = timer.getElapsed() / timer.getIntervalDuration();
038                if (elaspedFractionOverride >= 0) {
039                        e = elaspedFractionOverride;
040                }
041                return avg * (1f - f * e) + curr * f * e;
042//              return curr;
043        }
044        
045        public void add(float val) {
046                curr += val;
047        }
048        public void sub(float val) {
049                curr -= val;
050                if (curr < 0) curr = 0;
051        }
052
053        public void setElaspedFractionOverride(float elaspedFractionOverride) {
054                this.elaspedFractionOverride = elaspedFractionOverride;
055        }
056        
057        
058}