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}