diff options
| author | Paul Buetow <paul@buetow.org> | 2008-05-22 21:07:20 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2008-05-22 21:07:20 +0000 |
| commit | 8a589edb90f21cfcc1f08a4b2c158cccc53035c3 (patch) | |
| tree | 079cee06c82ab6d9e940cf9068f275cbef63724a /sources/simulator/VSSimulationCanvas.java | |
| parent | ac07ae639b1baf4b1b080fa199eba51c0f6d9732 (diff) | |
Clock Speed implemented. For slow motion.
Diffstat (limited to 'sources/simulator/VSSimulationCanvas.java')
| -rw-r--r-- | sources/simulator/VSSimulationCanvas.java | 59 |
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; |
