diff --git a/pom.xml b/pom.xml
index a967a7b..04ce705 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 0.10.16
+ 0.11.1
Web4Rail
jar
Java Model Railway Control
diff --git a/src/main/java/de/srsoftware/web4rail/Range.java b/src/main/java/de/srsoftware/web4rail/Range.java
new file mode 100644
index 0000000..2d31f59
--- /dev/null
+++ b/src/main/java/de/srsoftware/web4rail/Range.java
@@ -0,0 +1,37 @@
+package de.srsoftware.web4rail;
+
+import java.util.Map;
+import java.util.Random;
+
+import org.json.JSONObject;
+
+/**
+ * Class for integer ranges (min…max)
+ * @author Stephan Richter
+ */
+public class Range {
+ private static final Random random = new Random();
+ private static final String MAX = "max";
+ private static final String MIN = "min";
+
+ public int min=0,max=10000;
+
+ public JSONObject json() {
+ return new JSONObject(Map.of(MIN,min,MAX,max));
+ }
+
+ public Range load(JSONObject json) {
+ min = json.getInt(MIN);
+ max = json.getInt(MAX);
+ return this;
+ }
+
+ public int random() {
+ return min + random.nextInt(max - min);
+ }
+
+ @Override
+ public String toString() {
+ return min+"…"+max;
+ }
+}
diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java
index 9715ca2..f3fb852 100644
--- a/src/main/java/de/srsoftware/web4rail/Route.java
+++ b/src/main/java/de/srsoftware/web4rail/Route.java
@@ -365,6 +365,7 @@ public class Route extends BaseClass{
}
if (isSet(train)) {
train.set(endBlock);
+ train.setWaitTime(endBlock.getWaitTime(train));
train.heading(endDirection.inverse());
if (train.route == this) train.route = null;
}
diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java
index 35aa342..0069d28 100644
--- a/src/main/java/de/srsoftware/web4rail/moving/Train.java
+++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java
@@ -27,6 +27,7 @@ import de.srsoftware.web4rail.Application;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Plan;
import de.srsoftware.web4rail.Plan.Direction;
+import de.srsoftware.web4rail.Range;
import de.srsoftware.web4rail.Route;
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.actions.Action.Context;
@@ -47,7 +48,6 @@ public class Train extends BaseClass implements Comparable {
public static final String LOCO_ID = "locoId";
private static final String TRACE = "trace";
private static final HashMap trains = new HashMap<>();
-
public static final String ID = "id";
public int id;
@@ -79,6 +79,7 @@ public class Train extends BaseClass implements Comparable {
private class Autopilot extends Thread{
boolean stop = false;
+ int waitTime = 100;
@Override
public void run() {
@@ -86,7 +87,9 @@ public class Train extends BaseClass implements Comparable {
stop = false;
while (true) {
if (isNull(route)) {
- Thread.sleep(1000);
+ LOG.debug("Waiting {} secs...",waitTime/1000d);
+ Thread.sleep(waitTime);
+ if (waitTime > 100) waitTime /=2;
if (stop) return;
Train.this.start();
}
@@ -645,4 +648,8 @@ public class Train extends BaseClass implements Comparable {
public void removeFromTrace(Tile tile) {
trace.remove(tile);
}
+
+ public void setWaitTime(Range waitTime) {
+ if (autopilot != null) autopilot.waitTime = waitTime.random();
+ }
}
diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Block.java b/src/main/java/de/srsoftware/web4rail/tiles/Block.java
index bc4568c..92570f8 100644
--- a/src/main/java/de/srsoftware/web4rail/tiles/Block.java
+++ b/src/main/java/de/srsoftware/web4rail/tiles/Block.java
@@ -13,6 +13,7 @@ import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction;
+import de.srsoftware.web4rail.Range;
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.moving.Train;
import de.srsoftware.web4rail.tags.Button;
@@ -33,8 +34,6 @@ public abstract class Block extends StretchableTile{
private static final String NO_TAG = "[default]";
private static final String NEW_TAG = "new_tag";
private static final String TAG = "tag";
- private static final String MAX = "max";
- private static final String MIN = "min";
private static final String WAIT_TIMES = "wait_times";
public String name = "Block";
@@ -50,28 +49,6 @@ public abstract class Block extends StretchableTile{
waitTimes.add(defaultWT);
}
- /**
- * class for min-max range
- */
- public class Range{
- public int min=0,max=10000;
-
- public JSONObject json() {
- return new JSONObject(Map.of(MIN,min,MAX,max));
- }
-
- public Range load(JSONObject json) {
- min = json.getInt(MIN);
- max = json.getInt(MAX);
- return this;
- }
-
- @Override
- public String toString() {
- return min+"…"+max;
- }
- }
-
/**
* aggregates all (directional) wait times for one tag
*/
@@ -313,4 +290,13 @@ public abstract class Block extends StretchableTile{
}
return null;
}
+
+ public Range getWaitTime(Train train) {
+ for (WaitTime wt : waitTimes) {
+ if (train.tags().contains(wt.tag)) {
+ return wt.get(train.direction());
+ }
+ }
+ return getWaitTime(NO_TAG).get(train.direction());
+ }
}