summaryrefslogtreecommitdiff
path: root/sources/simulator/VSSimulationCanvas.java
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2008-05-22 21:07:20 +0000
committerPaul Buetow <paul@buetow.org>2008-05-22 21:07:20 +0000
commit8a589edb90f21cfcc1f08a4b2c158cccc53035c3 (patch)
tree079cee06c82ab6d9e940cf9068f275cbef63724a /sources/simulator/VSSimulationCanvas.java
parentac07ae639b1baf4b1b080fa199eba51c0f6d9732 (diff)
Clock Speed implemented. For slow motion.
Diffstat (limited to 'sources/simulator/VSSimulationCanvas.java')
-rw-r--r--sources/simulator/VSSimulationCanvas.java59
1 files changed, 37 insertions, 22 deletions
diff --git a/sources/simulator/VSSimulationCanvas.java b/sources/simulator/VSSimulationCanvas.java
index dea55ae..3874ec8 100644
--- a/sources/simulator/VSSimulationCanvas.java
+++ b/sources/simulator/VSSimulationCanvas.java
@@ -40,6 +40,9 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL
private VSTaskManager taskManager;
private LinkedList<VSMessageLine> messageLines;
private LinkedList<VSProcess> processes;
+ private double clockSpeed;
+ private double clockOffset;
+ private long simulationTime;
/* GFX buffering */
private BufferStrategy strategy;
@@ -248,12 +251,26 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL
}
private void updateSimulation(final long globalTime, final long lastGlobalTime) {
- final long offset = globalTime - lastGlobalTime;
+ if (isPaused || isFinished)
+ return;
+
+ final long lastSimulationTime = simulationTime;
+ long offset = globalTime - lastGlobalTime;
+
+ clockOffset += offset * clockSpeed;
+
+ while (clockOffset >= 1) {
+ --clockOffset;
+ ++simulationTime;
+ }
+
+ offset = simulationTime - lastSimulationTime;
+
for (long l = 0; l < offset; ++l)
- taskManager.runTasks(l, offset, lastGlobalTime);
+ taskManager.runTasks(l, offset, lastSimulationTime);
for (VSProcess process : processes)
- process.syncTime(globalTime);
+ process.syncTime(simulationTime);
}
public void paint() {
@@ -277,7 +294,7 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL
}
g.fillRect(0, 0, getWidth(), getHeight());
- final long globalTime = time;
+ final long globalTime = simulationTime;
globalTimeXPosition = getTimeXPosition(globalTime);
paintSecondlines(g);
@@ -459,7 +476,7 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL
}
public long getTime() {
- return time;
+ return simulationTime;
}
public long getUntilTime() {
@@ -486,8 +503,6 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL
}
public void run() {
- //play();
-
while (true) {
while (!isThreadStopped && (isPaused || isFinished || isResetted)) {
try {
@@ -514,25 +529,15 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL
lastTime = time;
time = System.currentTimeMillis() - startTime;
- if (time > untilTime)
- time = untilTime;
+ if (simulationTime > untilTime)
+ simulationTime = untilTime;
- if (time == untilTime) {
+ if (simulationTime == untilTime) {
finish();
break;
}
}
- if (isPaused) {
- for (VSProcess p : processes)
- p.pause();
-
- pauseTime = System.currentTimeMillis();
-
- logging.logg(prefs.getString("lang.simulation.paused"));
- paint();
- }
-
updateSimulation(time, lastTime);
paint();
}
@@ -577,6 +582,13 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL
public void pause() {
isPaused = true;
+ for (VSProcess p : processes)
+ p.pause();
+
+ pauseTime = System.currentTimeMillis();
+
+ logging.logg(prefs.getString("lang.simulation.paused"));
+ paint();
}
public void reset() {
@@ -589,6 +601,8 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL
startTime = System.currentTimeMillis();
time = 0;
lastTime = 0;
+ clockOffset = 0;
+ simulationTime = 0;
for (VSProcess process : processes)
process.reset();
@@ -805,12 +819,13 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL
public void updateFromPrefs() {
untilTime = prefs.getInteger("sim.seconds") * 1000;
+ clockSpeed = prefs.getFloat("sim.clock.speed");
- secondsSpaceing = (int) untilTime / 15000;
+ secondsSpaceing = (int) (untilTime / 15000);
if (secondsSpaceing == 0)
secondsSpaceing = 1;
- threadSleep = (int) untilTime / 7500;
+ threadSleep = (int) (untilTime / 7500);
if (threadSleep == 0)
threadSleep = 1;