X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.logic.core%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fcore%2Ftimeline%2FPauseableTimeFunction.java;h=f086268faf1c9e3abec4b529cf3a5f7ca6e01055;hb=f5d961acea5bee7c3b38c0b31119a9998fa97667;hp=4a99310c38dec9207ff8e0599155bea86a69df00;hpb=26eb7899013bc52e4501ee97422d79d6e1ea2b9c;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 index 4a99310c..f086268f 100644 --- 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 @@ -1,5 +1,8 @@ package net.mograsim.logic.core.timeline; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; import java.util.function.LongSupplier; public class PauseableTimeFunction implements LongSupplier @@ -8,6 +11,8 @@ public class PauseableTimeFunction implements LongSupplier private long unpausedSysTime = 0, lastPausedInternalTime = 0; private double speedFactor = 1; + private final List> simulTimeToRealTimeFactorChangedListeners = new ArrayList<>(); + public void pause() { if (!paused) @@ -22,7 +27,7 @@ public class PauseableTimeFunction implements LongSupplier if (paused) { paused = false; - unpausedSysTime = System.currentTimeMillis(); + unpausedSysTime = System.nanoTime() / 1000; } } @@ -30,12 +35,12 @@ public class PauseableTimeFunction implements LongSupplier public long getAsLong() { return (long) (paused ? lastPausedInternalTime - : lastPausedInternalTime + (System.currentTimeMillis() - unpausedSysTime) * speedFactor); + : lastPausedInternalTime + (System.nanoTime() / 1000 - unpausedSysTime) * speedFactor); } - public long simulTimeDeltaToRealTimeMillis(long simulTime) + public double getSimulTimeToRealTimeFactor() { - return paused ? -1 : (long) (simulTime / speedFactor); + return 1 / 1000d / speedFactor; } public void setSpeedFactor(double factor) @@ -48,8 +53,18 @@ public class PauseableTimeFunction implements LongSupplier unpause(); } this.speedFactor = factor; + callSimulTimeToRealTimeFactorChangedListeners(getSimulTimeToRealTimeFactor()); } + //@formatter:off + public void addSimulTimeToRealTimeFactorChangedListener(Consumer listener) + {simulTimeToRealTimeFactorChangedListeners.add (listener);} + public void removeSimulTimeToRealTimeFactorChangedListener(Consumer listener) + {simulTimeToRealTimeFactorChangedListeners.remove(listener);} + private void callSimulTimeToRealTimeFactorChangedListeners(double f) + {simulTimeToRealTimeFactorChangedListeners.forEach(l -> l.accept(f));} + //@formatter:on + public boolean isPaused() { return paused;