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=fc4aa13d5d9eb8c68a6ac75ab153cf2e20ff0a05;hb=fac8a9fce341bc42173af3cde70ef6aef00d7ee7;hp=ed95ec038a6761a73dd947a93cd822dd6064a34b;hpb=083389c8016a79ae6d65d5227bd6a66de1732092;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 ed95ec03..fc4aa13d 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) @@ -33,9 +38,9 @@ public class PauseableTimeFunction implements LongSupplier : lastPausedInternalTime + (System.nanoTime() / 1000 - unpausedSysTime) * speedFactor); } - public long simulTimeDeltaToRealTimeMillis(long simulTime) + public double getSimulTimeToRealTimeFactor() { - return paused ? -1 : (long) (simulTime / speedFactor / 1000); + return 1 / 1000 / 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;