diff --git a/pom.xml b/pom.xml
index fcce1ed..d6567bc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 1.4.20
+ 1.4.21
Web4Rail
jar
Java Model Railway Control
diff --git a/resources/js/plan.js b/resources/js/plan.js
index 7a0043e..75887cf 100644
--- a/resources/js/plan.js
+++ b/resources/js/plan.js
@@ -26,7 +26,7 @@ function addMessage(txt){
messages.unshift(txt);
if (messages.length>5) messages.pop();
updateMessages();
- setTimeout(fadeMessage,30000);
+ setTimeout(fadeMessage,60000);
}
function addTile(x,y){
diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java
index 7ae9e58..fab643e 100644
--- a/src/main/java/de/srsoftware/web4rail/Route.java
+++ b/src/main/java/de/srsoftware/web4rail/Route.java
@@ -428,6 +428,10 @@ public class Route extends BaseClass {
return nextPreparedRoute;
}
+ public boolean hasTriggeredContacts() {
+ return triggeredContacts.size()>0;
+ }
+
public Id id() {
if (isNull(id)) id = new Id(""+(generateName().hashCode()));
return id;
diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java
index f26c98e..b41c691 100644
--- a/src/main/java/de/srsoftware/web4rail/moving/Train.java
+++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java
@@ -195,7 +195,10 @@ public class Train extends BaseClass implements Comparable {
public String brakeId(boolean reversed) {
TreeSet carIds = new TreeSet();
- cars.stream().map(car -> car.id()+":"+(car.orientation == reversed ? "r":"f")).forEach(carIds::add);
+ cars.stream()
+ .filter(car -> car instanceof Locomotive)
+ .map(car -> car.id()+":"+(car.orientation == reversed ? "r":"f"))
+ .forEach(carIds::add);
String brakeId = md5sum(carIds);
LOG.debug("generated new {} brake id for {}: {}",reversed?"backward":"forward",this,brakeId);
return brakeId;
@@ -885,7 +888,10 @@ public class Train extends BaseClass implements Comparable {
public Train set(Block newBlock) {
LOG.debug("{}.set({})",this,newBlock);
if (isSet(currentBlock)) {
- if (newBlock == currentBlock) return this;
+ if (newBlock == currentBlock) {
+ if (currentBlock.occupyingTrain() != this) currentBlock.setTrain(this);
+ return this;
+ }
currentBlock.free(this);
}
currentBlock = newBlock;
@@ -1042,7 +1048,7 @@ public class Train extends BaseClass implements Comparable {
endBrake();
setSpeed(0);
quitAutopilot();
- if (isSet(route)) {
+ if (isSet(route) && route.hasTriggeredContacts()) {
stuckTrace = new HashSet();
for (Tile tile : route.path()) { // collect occupied tiles of route. stuckTrace is considered during next route search
if (trace.contains(tile)) stuckTrace.add(tile);
diff --git a/src/main/java/de/srsoftware/web4rail/threads/RoutePrepper.java b/src/main/java/de/srsoftware/web4rail/threads/RoutePrepper.java
index b2370b3..5dd959d 100644
--- a/src/main/java/de/srsoftware/web4rail/threads/RoutePrepper.java
+++ b/src/main/java/de/srsoftware/web4rail/threads/RoutePrepper.java
@@ -78,6 +78,8 @@ public class RoutePrepper extends BaseClass implements Runnable{
LOG.debug("{} is heading for {}, starting breadth-first search…",train,destination);
HashMap predecessors = new HashMap<>() {
+ private static final long serialVersionUID = -42682947866294566L;
+
public String toString() {
return entrySet().stream()
.sorted((e1,e2) -> e1.getValue().toString().compareTo(e2.getValue().toString()))
diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Block.java b/src/main/java/de/srsoftware/web4rail/tiles/Block.java
index 9138096..e1efd08 100644
--- a/src/main/java/de/srsoftware/web4rail/tiles/Block.java
+++ b/src/main/java/de/srsoftware/web4rail/tiles/Block.java
@@ -503,8 +503,12 @@ public abstract class Block extends StretchableTile{
if (isSet(newTrain) && newTrain != occupyingTrain()) {
free(occupyingTrain());
newTrain.dropTrace();
- if (connections(newTrain.direction()).isEmpty()) newTrain.heading(null);
- newTrain.set(this);
+ if (connections(newTrain.direction()).isEmpty()) newTrain.heading(null);
+ newTrain.set(this);
+ }
+ if (newTrain.currentBlock() != this) {
+ newTrain.dropTrace();
+ newTrain.set(this);
}
}
}