X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.logic.core%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fcore%2Ftimeline%2FPauseableTimeFunction.java;fp=plugins%2Fnet.mograsim.logic.core%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fcore%2Ftimeline%2FPauseableTimeFunction.java;h=86f4ce996d990ba4c8fc7b3fee833fc37719a9ba;hb=46d4c053db9a363185a9dce28fcefbc3bf9d6afd;hp=0000000000000000000000000000000000000000;hpb=76c2b3eab6cec47490bb75713356152deb5d07ed;p=Mograsim.git diff --git a/plugins/net.mograsim.logic.core/src/net/mograsim/logic/core/timeline/PauseableTimeFunction.java b/plugins/net.mograsim.logic.core/src/net/mograsim/logic/core/timeline/PauseableTimeFunction.java new file mode 100644 index 00000000..86f4ce99 --- /dev/null +++ b/plugins/net.mograsim.logic.core/src/net/mograsim/logic/core/timeline/PauseableTimeFunction.java @@ -0,0 +1,58 @@ +package net.mograsim.logic.core.timeline; + +import java.util.function.LongSupplier; + +public class PauseableTimeFunction implements LongSupplier +{ + private boolean paused = false; + private long unpausedSysTime = 0, lastPausedInternalTime = 0; + private int speedPercentage = 100; + + public void pause() + { + if (!paused) + { + lastPausedInternalTime = getAsLong(); + paused = true; + } + } + + public void unpause() + { + if (paused) + { + paused = false; + unpausedSysTime = System.currentTimeMillis(); + } + } + + @Override + public long getAsLong() + { + return paused ? lastPausedInternalTime + : lastPausedInternalTime + ((System.currentTimeMillis() - unpausedSysTime) * speedPercentage) / 100; + } + + public void setSpeedPercentage(int percentage) + { + if (!paused) + { + pause(); + unpause(); + } + this.speedPercentage = Integer.min(100, Integer.max(percentage, 1)); + } + + public boolean isPaused() + { + return paused; + } + + public void toggle() + { + if (paused) + unpause(); + else + pause(); + } +}