Browse Source

new feature: Train wait times for autopilot now randomly chosen from

within range defined in block's settings
lookup-tables
Stephan Richter 5 years ago
parent
commit
9b6b1edce2
  1. 2
      pom.xml
  2. 37
      src/main/java/de/srsoftware/web4rail/Range.java
  3. 1
      src/main/java/de/srsoftware/web4rail/Route.java
  4. 11
      src/main/java/de/srsoftware/web4rail/moving/Train.java
  5. 34
      src/main/java/de/srsoftware/web4rail/tiles/Block.java

2
pom.xml

@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>de.srsoftware</groupId> <groupId>de.srsoftware</groupId>
<artifactId>web4rail</artifactId> <artifactId>web4rail</artifactId>
<version>0.10.16</version> <version>0.11.1</version>
<name>Web4Rail</name> <name>Web4Rail</name>
<packaging>jar</packaging> <packaging>jar</packaging>
<description>Java Model Railway Control</description> <description>Java Model Railway Control</description>

37
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 (minmax)
* @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;
}
}

1
src/main/java/de/srsoftware/web4rail/Route.java

@ -365,6 +365,7 @@ public class Route extends BaseClass{
} }
if (isSet(train)) { if (isSet(train)) {
train.set(endBlock); train.set(endBlock);
train.setWaitTime(endBlock.getWaitTime(train));
train.heading(endDirection.inverse()); train.heading(endDirection.inverse());
if (train.route == this) train.route = null; if (train.route == this) train.route = null;
} }

11
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.BaseClass;
import de.srsoftware.web4rail.Plan; import de.srsoftware.web4rail.Plan;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.Range;
import de.srsoftware.web4rail.Route; import de.srsoftware.web4rail.Route;
import de.srsoftware.web4rail.Window; import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.actions.Action.Context; 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"; public static final String LOCO_ID = "locoId";
private static final String TRACE = "trace"; private static final String TRACE = "trace";
private static final HashMap<Integer, Train> trains = new HashMap<>(); private static final HashMap<Integer, Train> trains = new HashMap<>();
public static final String ID = "id"; public static final String ID = "id";
public int id; public int id;
@ -79,6 +79,7 @@ public class Train extends BaseClass implements Comparable<Train> {
private class Autopilot extends Thread{ private class Autopilot extends Thread{
boolean stop = false; boolean stop = false;
int waitTime = 100;
@Override @Override
public void run() { public void run() {
@ -86,7 +87,9 @@ public class Train extends BaseClass implements Comparable<Train> {
stop = false; stop = false;
while (true) { while (true) {
if (isNull(route)) { if (isNull(route)) {
Thread.sleep(1000); LOG.debug("Waiting {} secs...",waitTime/1000d);
Thread.sleep(waitTime);
if (waitTime > 100) waitTime /=2;
if (stop) return; if (stop) return;
Train.this.start(); Train.this.start();
} }
@ -645,4 +648,8 @@ public class Train extends BaseClass implements Comparable<Train> {
public void removeFromTrace(Tile tile) { public void removeFromTrace(Tile tile) {
trace.remove(tile); trace.remove(tile);
} }
public void setWaitTime(Range waitTime) {
if (autopilot != null) autopilot.waitTime = waitTime.random();
}
} }

34
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.tools.Tag;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.Range;
import de.srsoftware.web4rail.Window; import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.moving.Train; import de.srsoftware.web4rail.moving.Train;
import de.srsoftware.web4rail.tags.Button; 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 NO_TAG = "[default]";
private static final String NEW_TAG = "new_tag"; private static final String NEW_TAG = "new_tag";
private static final String TAG = "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"; private static final String WAIT_TIMES = "wait_times";
public String name = "Block"; public String name = "Block";
@ -50,28 +49,6 @@ public abstract class Block extends StretchableTile{
waitTimes.add(defaultWT); 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 * aggregates all (directional) wait times for one tag
*/ */
@ -313,4 +290,13 @@ public abstract class Block extends StretchableTile{
} }
return null; 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());
}
} }

Loading…
Cancel
Save