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;
}
}
+