new feature: Train wait times for autopilot now randomly chosen from
within range defined in block's settings
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -4,7 +4,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>de.srsoftware</groupId>
|
||||
<artifactId>web4rail</artifactId>
|
||||
<version>0.10.16</version>
|
||||
<version>0.11.1</version>
|
||||
<name>Web4Rail</name>
|
||||
<packaging>jar</packaging>
|
||||
<description>Java Model Railway Control</description>
|
||||
|
||||
37
src/main/java/de/srsoftware/web4rail/Range.java
Normal file
37
src/main/java/de/srsoftware/web4rail/Range.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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<Train> {
|
||||
public static final String LOCO_ID = "locoId";
|
||||
private static final String TRACE = "trace";
|
||||
private static final HashMap<Integer, Train> trains = new HashMap<>();
|
||||
|
||||
public static final String ID = "id";
|
||||
public int id;
|
||||
|
||||
@@ -79,6 +79,7 @@ public class Train extends BaseClass implements Comparable<Train> {
|
||||
|
||||
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<Train> {
|
||||
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<Train> {
|
||||
public void removeFromTrace(Tile tile) {
|
||||
trace.remove(tile);
|
||||
}
|
||||
|
||||
public void setWaitTime(Range waitTime) {
|
||||
if (autopilot != null) autopilot.waitTime = waitTime.random();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user