bugfixes, reimplemented train simulator
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>1.4.12</version>
|
||||
<version>1.4.13</version>
|
||||
<name>Web4Rail</name>
|
||||
<packaging>jar</packaging>
|
||||
<description>Java Model Railway Control</description>
|
||||
|
||||
@@ -36,6 +36,7 @@ import de.srsoftware.web4rail.tags.Input;
|
||||
import de.srsoftware.web4rail.tags.Table;
|
||||
import de.srsoftware.web4rail.tags.Window;
|
||||
import de.srsoftware.web4rail.threads.RoutePrepper;
|
||||
import de.srsoftware.web4rail.threads.Simulator;
|
||||
import de.srsoftware.web4rail.tiles.Block;
|
||||
import de.srsoftware.web4rail.tiles.BlockContact;
|
||||
import de.srsoftware.web4rail.tiles.Contact;
|
||||
@@ -855,6 +856,10 @@ public class Route extends BaseClass {
|
||||
return this;
|
||||
}
|
||||
|
||||
private void simulate() {
|
||||
new Simulator(this);
|
||||
}
|
||||
|
||||
public boolean startNow() {
|
||||
LOG.debug("{}.startNow()",this);
|
||||
|
||||
@@ -885,6 +890,8 @@ public class Route extends BaseClass {
|
||||
}
|
||||
|
||||
context.waitTime(endBlock.getWaitTime(train, endDirection).random());
|
||||
|
||||
if (!contacts.isEmpty() && contacts.stream().filter(contact -> contact.addr() != 0).findAny().isEmpty()) simulate();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
26
src/main/java/de/srsoftware/web4rail/threads/Simulator.java
Normal file
26
src/main/java/de/srsoftware/web4rail/threads/Simulator.java
Normal file
@@ -0,0 +1,26 @@
|
||||
package de.srsoftware.web4rail.threads;
|
||||
|
||||
import de.srsoftware.web4rail.Application;
|
||||
import de.srsoftware.web4rail.BaseClass;
|
||||
import de.srsoftware.web4rail.Route;
|
||||
import de.srsoftware.web4rail.tiles.Contact;
|
||||
import de.srsoftware.web4rail.tiles.Tile;
|
||||
|
||||
public class Simulator extends BaseClass implements Runnable {
|
||||
|
||||
private Route route;
|
||||
|
||||
public Simulator(Route route) {
|
||||
this.route = route;
|
||||
new Thread(this,Application.threadName(this)).start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
for (Tile tile : route.path()) {
|
||||
sleep(1000);
|
||||
if (tile instanceof Contact) ((Contact)tile).activate(true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -66,6 +66,20 @@ public abstract class Bridge extends Tile {
|
||||
return super.load(json);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean lockFor(Context context, boolean downgrade) {
|
||||
if (lockingTrain() == context.train()) return true;
|
||||
if (!super.lockFor(context, downgrade)) return false;
|
||||
return isSet(counterpart) ? counterpart.lockFor(context, downgrade) : true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean reserveFor(Context context) {
|
||||
if (reservingTrain() == context.train()) return true;
|
||||
if (!super.reserveFor(context)) return false;
|
||||
return isSet(counterpart) ? counterpart.reserveFor(context) : true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setTrain(Train newTrain) {
|
||||
if (occupyingTrain() == newTrain) return true;
|
||||
|
||||
@@ -434,6 +434,10 @@ public abstract class Tile extends BaseClass implements Comparable<Tile> {
|
||||
plan.place(this);
|
||||
return true;
|
||||
}
|
||||
|
||||
protected Train reservingTrain() {
|
||||
return reservingTrain;
|
||||
}
|
||||
|
||||
public TreeSet<Route> routes() {
|
||||
return routes;
|
||||
|
||||
Reference in New Issue
Block a user