summaryrefslogtreecommitdiff
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
parentac07ae639b1baf4b1b080fa199eba51c0f6d9732 (diff)
Clock Speed implemented. For slow motion.
-rw-r--r--ROADMAP3
-rw-r--r--sources/prefs/VSDefaultPrefs.java1
-rw-r--r--sources/simulator/VSSimulation.java2
-rw-r--r--sources/simulator/VSSimulationCanvas.java59
4 files changed, 40 insertions, 25 deletions
diff --git a/ROADMAP b/ROADMAP
index aad7f96..ecd68f8 100644
--- a/ROADMAP
+++ b/ROADMAP
@@ -1,6 +1,6 @@
TODO:
-Icon Toolbar
+
Slow-Motion
Neuen Protokolleditor bauen
Prozesse hinzufuegen/loeschen koennen
@@ -30,4 +30,3 @@ Evtl:
Optimierungen:
Methoden alphanumerisch sortieren, code tools
KeyEvent Manager
- Weitere Optimierungen: Linienobjekte von nicht aendernden Linien erzeugen!
diff --git a/sources/prefs/VSDefaultPrefs.java b/sources/prefs/VSDefaultPrefs.java
index 8cc1e30..a7f659f 100644
--- a/sources/prefs/VSDefaultPrefs.java
+++ b/sources/prefs/VSDefaultPrefs.java
@@ -181,6 +181,7 @@ public class VSDefaultPrefs extends VSPrefs {
public void fillDefaultFloats() {
/* Simulation prefs */
initFloat("process.clock.variance", 0, "Uhrabweichung");
+ initFloat("sim.clock.speed", 0.5f, "Simulationsgeschwindigkeit");
}
public void fillDefaultLongs() {
diff --git a/sources/simulator/VSSimulation.java b/sources/simulator/VSSimulation.java
index 7701349..799acd6 100644
--- a/sources/simulator/VSSimulation.java
+++ b/sources/simulator/VSSimulation.java
@@ -120,7 +120,7 @@ public class VSSimulation extends JPanel {
globalTextFields.add("0000");
}
- processesComboBox.setSelectedIndex(numProcesses);
+ processesComboBox.setSelectedIndex(0);
localPIDComboBox.setSelectedIndex(0);
globalPIDComboBox.setSelectedIndex(0);
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;