Browse Source

bugfixes, reimplemented train simulator

lookup-tables
Stephan Richter 4 years ago
parent
commit
61ae9c727c
  1. 2
      pom.xml
  2. 7
      src/main/java/de/srsoftware/web4rail/Route.java
  3. 26
      src/main/java/de/srsoftware/web4rail/threads/Simulator.java
  4. 14
      src/main/java/de/srsoftware/web4rail/tiles/Bridge.java
  5. 4
      src/main/java/de/srsoftware/web4rail/tiles/Tile.java

2
pom.xml

@ -4,7 +4,7 @@ @@ -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>

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

@ -36,6 +36,7 @@ import de.srsoftware.web4rail.tags.Input; @@ -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 { @@ -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 { @@ -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

@ -0,0 +1,26 @@ @@ -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);
}
}
}

14
src/main/java/de/srsoftware/web4rail/tiles/Bridge.java

@ -66,6 +66,20 @@ public abstract class Bridge extends Tile { @@ -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;

4
src/main/java/de/srsoftware/web4rail/tiles/Tile.java

@ -434,6 +434,10 @@ public abstract class Tile extends BaseClass implements Comparable<Tile> { @@ -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;

Loading…
Cancel
Save