diff options
| author | unknown <james.jenour@protonmail.com> | 2020-05-31 01:59:47 +1000 |
|---|---|---|
| committer | unknown <james.jenour@protonmail.com> | 2020-05-31 01:59:47 +1000 |
| commit | de97f55968d183cc7d76aad87e3b27d382bfdbc9 (patch) | |
| tree | eab5e7769069f31b79016e3702855ebb9f614a8e /src/main/java/io/github/moulberry/notenoughupdates/util/LerpingFloat.java | |
| download | notenoughupdates-de97f55968d183cc7d76aad87e3b27d382bfdbc9.tar.gz notenoughupdates-de97f55968d183cc7d76aad87e3b27d382bfdbc9.tar.bz2 notenoughupdates-de97f55968d183cc7d76aad87e3b27d382bfdbc9.zip | |
1.5
Diffstat (limited to 'src/main/java/io/github/moulberry/notenoughupdates/util/LerpingFloat.java')
| -rw-r--r-- | src/main/java/io/github/moulberry/notenoughupdates/util/LerpingFloat.java | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/LerpingFloat.java b/src/main/java/io/github/moulberry/notenoughupdates/util/LerpingFloat.java new file mode 100644 index 00000000..83fa1a6d --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/LerpingFloat.java @@ -0,0 +1,68 @@ +package io.github.moulberry.notenoughupdates.util; + +public class LerpingFloat { + + private int timeSpent; + private long lastMillis; + private int timeToReachTarget; + + private float targetValue; + private float lerpValue; + + public LerpingFloat(float initialValue, int timeToReachTarget) { + this.targetValue = this.lerpValue = initialValue; + this.timeToReachTarget = timeToReachTarget; + } + + public LerpingFloat(int initialValue) { + this(initialValue, 200); + } + + public void tick() { + int lastTimeSpent = timeSpent; + this.timeSpent += System.currentTimeMillis() - lastMillis; + + float lastDistPercentToTarget = lastTimeSpent/(float)timeToReachTarget; + float distPercentToTarget = timeSpent/(float)timeToReachTarget; + float fac = (1-lastDistPercentToTarget)/lastDistPercentToTarget; + + float startValue = lerpValue - (targetValue - lerpValue)/fac; + + float dist = targetValue - startValue; + if(dist == 0) return; + + float oldLerpValue = lerpValue; + if(distPercentToTarget >= 1) { + lerpValue = targetValue; + } else { + lerpValue = startValue + dist*distPercentToTarget; + } + + if(lerpValue == oldLerpValue) { + timeSpent = lastTimeSpent; + } else { + this.lastMillis = System.currentTimeMillis(); + } + } + + public void resetTimer() { + this.timeSpent = 0; + this.lastMillis = System.currentTimeMillis(); + } + + public void setTarget(float targetValue) { + this.targetValue = targetValue; + } + + public void setValue(float value) { + this.targetValue = this.lerpValue = value; + } + + public float getValue() { + return lerpValue; + } + + public float getTarget() { + return targetValue; + } +} |
