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=7a6185e808600467fed8d6d064bbc1beb32929af;hb=HEAD;hp=b1bfcf3aadf34a52ee9d71cd0d91538025b39edc;hpb=67aacda56e0c89f073a02071a07ea1e3d5551fe7;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 b1bfcf3a..7a6185e8 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 @@ -3,13 +3,14 @@ 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 +import net.mograsim.logic.core.timeline.Timeline.TimeFunction; + +public class PauseableTimeFunction implements TimeFunction { private boolean paused = false; private long unpausedSysTime = 0, lastPausedInternalTime = 0; - private double speedFactor = 1; + private double speedFactor = 0; private final List> simulTimeToRealTimeFactorChangedListeners = new ArrayList<>(); @@ -17,7 +18,7 @@ public class PauseableTimeFunction implements LongSupplier { if (!paused) { - lastPausedInternalTime = getAsLong(); + lastPausedInternalTime = getTime(); paused = true; } } @@ -32,17 +33,29 @@ public class PauseableTimeFunction implements LongSupplier } @Override - public long getAsLong() + public long getTime() { return (long) (paused ? lastPausedInternalTime : lastPausedInternalTime + (System.nanoTime() / 1000 - unpausedSysTime) * speedFactor); } + @Override + public void setTime(long time) + { + lastPausedInternalTime = time; + unpausedSysTime = System.nanoTime() / 1000; + } + public double getSimulTimeToRealTimeFactor() { return 1 / 1000d / speedFactor; } + public double getSpeedFactor() + { + return speedFactor; + } + public void setSpeedFactor(double factor) { if (factor <= 0)