From d08eda142fc26a2f23f26f75ccfe72b47321e05f Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Thu, 6 May 2021 09:24:58 +0200 Subject: [PATCH] minor improvements * when a train in shunting mode is directed to an occupied block, the train there is moved to the parking list of that block * some null pointer checks --- pom.xml | 2 +- src/main/java/de/srsoftware/web4rail/Route.java | 1 + src/main/java/de/srsoftware/web4rail/moving/Train.java | 5 +++-- .../de/srsoftware/web4rail/threads/BrakeProcess.java | 1 + src/main/java/de/srsoftware/web4rail/tiles/Block.java | 9 +++++++++ src/main/java/de/srsoftware/web4rail/tiles/Tile.java | 4 ++-- 6 files changed, 17 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index abac4da..247eee3 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.srsoftware web4rail - 1.4.28 + 1.4.29 Web4Rail jar Java Model Railway Control diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java index fab643e..c442c11 100644 --- a/src/main/java/de/srsoftware/web4rail/Route.java +++ b/src/main/java/de/srsoftware/web4rail/Route.java @@ -401,6 +401,7 @@ public class Route extends BaseClass { } private void freeIgnoring(Vector skipTiles) { + if (isNull(context)) return; Train train = context.train(); Vector reversedPath = reverse(path()); if (isSet(skipTiles)) reversedPath.removeAll(skipTiles); diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java index 86273c3..93b138f 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Train.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java @@ -432,10 +432,11 @@ public class Train extends BaseClass implements Comparable { } - public void dropTrace(boolean dropStuck) { + public Train dropTrace(boolean dropStuck) { while (!trace.isEmpty()) trace.stream().findFirst().get().free(this); trace.clear(); if (dropStuck) stuckTrace = null; + return this; } private BrakeProcess endBrake() { @@ -453,7 +454,6 @@ public class Train extends BaseClass implements Comparable { direction = endedRoute.endDirection; // muss vor der Auswertung des Destination-Tags stehen! Block endBlock = endedRoute.endBlock(); Block startBlock = endedRoute.startBlock(); - shunting = false; if (endBlock == destination) { destination = null; @@ -504,6 +504,7 @@ public class Train extends BaseClass implements Comparable { if ((!autopilot) || isNull(nextPreparedRoute) || (isSet(waitTime) && waitTime > 0)) setSpeed(0); route = null; endBlock.setTrain(this); + shunting = false; // wird in setTrain verwendet, muss also danach stehen currentBlock = endBlock; trace.add(endBlock); if (!trace.contains(startBlock)) startBlock.dropTrain(this); diff --git a/src/main/java/de/srsoftware/web4rail/threads/BrakeProcess.java b/src/main/java/de/srsoftware/web4rail/threads/BrakeProcess.java index 2e76b7e..a6affc9 100644 --- a/src/main/java/de/srsoftware/web4rail/threads/BrakeProcess.java +++ b/src/main/java/de/srsoftware/web4rail/threads/BrakeProcess.java @@ -85,6 +85,7 @@ public class BrakeProcess extends BaseClass implements Runnable{ updateDistance(); LOG.debug("updateTime(): start speed was {} {}.",startSpeed,BaseClass.speedUnit); Integer newTimeStep = timeStep; + if (isNull(newTimeStep)) return; long calculated; int step = 32*newTimeStep; for (int i=0; i<20; i++) { diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Block.java b/src/main/java/de/srsoftware/web4rail/tiles/Block.java index 05caddc..602b158 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Block.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Block.java @@ -453,6 +453,15 @@ public abstract class Block extends StretchableTile{ internalContacts.remove(blockContact); } + @Override + public boolean setTrain(Train newTrain) { + if (isDisabled()) return false; + if (isNull(newTrain)) return false; + Train occupyingTrain = occupyingTrain(); + if (isSet(occupyingTrain) && newTrain != occupyingTrain && newTrain.isShunting()) parkedTrains.add(occupyingTrain.dropTrace(false)); + return super.setTrain(newTrain); + } + public abstract List startPoints(); @Override diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java index 53ec2f0..5fea179 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java @@ -465,10 +465,10 @@ public abstract class Tile extends BaseClass implements Comparable { if (isNull(newTrain)) return false; if (isSet(reservingTrain) && newTrain != reservingTrain) return false; if (isSet(lockingTrain) && newTrain != lockingTrain) return false; - if (isSet(occupyingTrain) && newTrain != occupyingTrain) return false; + if (isSet(occupyingTrain) && (newTrain != occupyingTrain) && !newTrain.isShunting()) return false; + reservingTrain = lockingTrain = null; if (occupyingTrain == newTrain) return true; occupyingTrain = newTrain; - reservingTrain = lockingTrain = null; plan.place(this); return true; }