diff --git a/src/main/java/com/minelittlepony/unicopia/util/Lerp.java b/src/main/java/com/minelittlepony/unicopia/util/Lerp.java index c0169aab..2032209c 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/Lerp.java +++ b/src/main/java/com/minelittlepony/unicopia/util/Lerp.java @@ -1,5 +1,7 @@ package com.minelittlepony.unicopia.util; +import com.minelittlepony.unicopia.Unicopia; + import net.minecraft.util.Util; import net.minecraft.util.math.MathHelper; @@ -23,14 +25,30 @@ public class Lerp { } public boolean update(float newTarget, long changeDuration) { + if (Float.isNaN(newTarget) || Float.isInfinite(newTarget)) { + Unicopia.LOGGER.error("Invalid lerp target. Target cannot be NaN or Infinity"); + } if (MathHelper.approximatelyEquals(end, newTarget)) { return false; } + if (changeDuration == 0) { + start = newTarget; + end = newTarget; + finished = true; + return false; + } + start = getValue(); startTime = Util.getMeasuringTimeMs(); end = newTarget; duration = changeDuration; finished = false; + if (Float.isNaN(start) || Float.isInfinite(start)) { + Unicopia.LOGGER.error("Invalid lerp start. Value cannot be NaN or Infinity"); + } + if (Float.isNaN(end) || Float.isInfinite(end)) { + Unicopia.LOGGER.error("Invalid lerp end. Value cannot be NaN or Infinity"); + } return true; } @@ -55,6 +73,9 @@ public class Lerp { } private float getDelta() { + if (duration == 0) { + return 1; + } return MathHelper.clamp((float)(Util.getMeasuringTimeMs() - startTime) / (float)duration, 0, 1); } }