MPROMEditor now calls its columns "Opcode" and "muPC"
[Mograsim.git] / plugins / net.mograsim.logic.core / src / net / mograsim / logic / core / timeline / PauseableTimeFunction.java
index b1bfcf3..7a6185e 100644 (file)
@@ -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<Consumer<Double>> 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)