diff --git a/pom.xml b/pom.xml index 1d95907..bc893b5 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.srsoftware web4rail - 1.4.11 + 1.4.12 Web4Rail jar Java Model Railway Control diff --git a/resources/logback.xml b/resources/logback.xml index ea36924..ab98e5f 100644 --- a/resources/logback.xml +++ b/resources/logback.xml @@ -1,4 +1,4 @@ - DEBUG - Brake, Contact, Feed, Route, Train + Brake, Contact, Feed, Route, e, u diff --git a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java index f4f6bc0..91f5068 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java @@ -153,14 +153,14 @@ public class Locomotive extends Car implements Constants,Device{ if (isSet(train)) { Block currentBlock = train.currentBlock(); if (isSet(currentBlock)) { - if (!train.isStoppable()) { + if (isSet(train.direction()) && !train.isStoppable()) { params.put(ACTION, ACTION_START); new Button(t("depart"),params).addTo(direction); } if (train.usesAutopilot()) { params.put(ACTION, ACTION_QUIT); new Button(t("quit autopilot"),params).addTo(direction); - } else { + } else if (isSet(train.direction())){ params.put(ACTION, ACTION_AUTO); new Button(t("auto"),params).addTo(direction); } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Bridge.java b/src/main/java/de/srsoftware/web4rail/tiles/Bridge.java index 98123b0..db6252d 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Bridge.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Bridge.java @@ -43,6 +43,7 @@ public abstract class Bridge extends Tile { @Override public boolean free(Train train) { + if (isFree()) return true; if (!super.free(train)) return false; return isSet(counterpart) ? counterpart.free(train) : true; } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java index 954dbd6..a5cbe6b 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java @@ -102,7 +102,7 @@ public abstract class Tile extends BaseClass implements Comparable { if (isNull(oldTrain)) return false; if (isSet(reservingTrain) && reservingTrain != oldTrain) return false; if (isSet(lockingTrain) && lockingTrain != oldTrain) return false; - if (isSet(occupyingTrain) && occupyingTrain != oldTrain) return false; + if (isSet(occupyingTrain) && occupyingTrain != oldTrain) return false; reservingTrain = lockingTrain = occupyingTrain = null; plan.place(this); return true; @@ -131,6 +131,13 @@ public abstract class Tile extends BaseClass implements Comparable { public boolean isDisabled() { return disabled; } + + protected boolean isFree() { + if (isSet(lockingTrain)) return false; + if (isSet(reservingTrain)) return false; + if (isSet(occupyingTrain)) return false; + return true; + } public boolean isFreeFor(Context newTrain) { LOG.debug("{}.isFreeFor({})", this, newTrain); @@ -369,7 +376,27 @@ public abstract class Tile extends BaseClass implements Comparable { return super.properties(preForm, formInputs, postForm, errors); } + + @Override + public BaseClass remove() { + while (!routes.isEmpty()) routes.first().remove(); + return super.remove(); + } + + @Override + public void removeChild(BaseClass child) { + String childAsString = child.toString(); + if (childAsString.length() > 20) childAsString = childAsString.substring(0, 20) + "…"; + LOG.debug("Removing {} from {}", childAsString, this); + if (child instanceof Route) routes.remove(child); + if (child == reservingTrain) reservingTrain = null; + if (child == lockingTrain) lockingTrain = null; + if (child == occupyingTrain) occupyingTrain = null; + super.removeChild(child); + plan.place(this); + } + private static String replace(String line, Entry replacement) { String key = replacement.getKey(); Object val = replacement.getValue(); @@ -387,6 +414,27 @@ public abstract class Tile extends BaseClass implements Comparable { return line; } + public boolean reserveFor(Context context) { + Train newTrain = context.train(); + LOG.debug("{}.reserverFor({})",this,newTrain); + if (isNull(newTrain)) return false; + if (isSet(reservingTrain)) { + if (reservingTrain != newTrain) return debug("{} already reserved for {}",this,reservingTrain); + return true; // already reserved for newTrain + } + if (isSet(lockingTrain)) { + if (lockingTrain != newTrain) return debug("{} already locked by {}",this,lockingTrain); + return true; // do not downgrade! + } + if (isSet(occupyingTrain)) { + if (occupyingTrain != newTrain && !newTrain.isShunting()) return debug("{} already occupied by {}",this,occupyingTrain); + return true; // do not downgrade! + } + reservingTrain = newTrain; + plan.place(this); + return true; + } + public TreeSet routes() { return routes; } @@ -400,6 +448,13 @@ public abstract class Tile extends BaseClass implements Comparable { file.close(); } + + public void setEnabled(boolean enabled) { + boolean show = (disabled == enabled); + disabled = !enabled; + if (show) plan.place(this); + } + public boolean setTrain(Train newTrain) { if (disabled) return false; if (isNull(newTrain)) return false; @@ -478,55 +533,6 @@ public abstract class Tile extends BaseClass implements Comparable { return t("{}({},{})", getClass().getSimpleName(), x, y); } - @Override - public BaseClass remove() { - while (!routes.isEmpty()) routes.first().remove(); - return super.remove(); - } - - @Override - public void removeChild(BaseClass child) { - String childAsString = child.toString(); - if (childAsString.length() > 20) childAsString = childAsString.substring(0, 20) + "…"; - LOG.debug("Removing {} from {}", childAsString, this); - if (child instanceof Route) routes.remove(child); - - if (child == reservingTrain) reservingTrain = null; - if (child == lockingTrain) lockingTrain = null; - if (child == occupyingTrain) occupyingTrain = null; - super.removeChild(child); - plan.place(this); - } - - - - public boolean reserveFor(Context context) { - Train newTrain = context.train(); - LOG.debug("{}.reserverFor({})",this,newTrain); - if (isNull(newTrain)) return false; - if (isSet(reservingTrain)) { - if (reservingTrain != newTrain) return debug("{} already reserved for {}",this,reservingTrain); - return true; // already reserved for newTrain - } - if (isSet(lockingTrain)) { - if (lockingTrain != newTrain) return debug("{} already locked by {}",this,lockingTrain); - return true; // do not downgrade! - } - if (isSet(occupyingTrain)) { - if (occupyingTrain != newTrain && !newTrain.isShunting()) return debug("{} already occupied by {}",this,occupyingTrain); - return true; // do not downgrade! - } - reservingTrain = newTrain; - plan.place(this); - return true; - } - - public void setEnabled(boolean enabled) { - boolean show = (disabled == enabled); - disabled = !enabled; - if (show) plan.place(this); - } - public Tile update(HashMap params) { LOG.debug("{}.update({})", getClass().getSimpleName(), params); String oneWayDir = params.get("oneway"); @@ -550,3 +556,4 @@ public abstract class Tile extends BaseClass implements Comparable { return 1; } } +