diff --git a/pom.xml b/pom.xml
index 3c89c61..df49a3f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 1.1.6
+ 1.1.7
Web4Rail
jar
Java Model Railway Control
diff --git a/resources/css/style.css b/resources/css/style.css
index a7ba551..7af28c8 100644
--- a/resources/css/style.css
+++ b/resources/css/style.css
@@ -286,4 +286,20 @@ fieldset.notes{
}
fieldset.notes textarea{
min-width: 100%;
+}
+
+table.brake-times{
+ border-collapse: collapse;
+}
+
+table.brake-times tr > *{
+ border-style: solid;
+ border-color: black;
+ border-width: 0 1px;
+ text-align: center;
+ padding: 2px 5px;
+}
+
+table.brake-times th{
+ border-width: 0 1px 1px;
}
\ No newline at end of file
diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation
index 0aefd35..76e0ca9 100644
--- a/resources/translations/Application.de.translation
+++ b/resources/translations/Application.de.translation
@@ -29,6 +29,9 @@ Block properties : Block-Eigenschaften
BrakeCancel : Bremsvorgang abbrechen
BrakeStart : Bremsvorgang starten
BrakeStop : Zug anhalten
+Brake time¹, forward : Bremszeit¹, vorwärts
+Brake time¹, reverse : Bremszeit¹, rückwärts
+Brake time table : Bremszeit-Tabelle
Car manager : Waggon-Verwaltung
Cars\: : Waggons:
Click here to select train! : HIer klicken, um Zug auszuwählen!
@@ -65,6 +68,7 @@ disabled : deaktiviert
Display "{}" on clients. : „{}“ auf den Clients anzeigen.
Drop : Verwerfen
Dropped destination of {}. : Ziel von {} verworfen.
+1) Duration between 5 {} steps during brake process. : 1) Zeit zwischen 5 {}-Schritten beim Bremsvorgang.
EAST : Osten
editable train properties : veränderliche Zug-Eigenschaften
Emergency : Notfall
diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java
index fd0511a..5b03967 100644
--- a/src/main/java/de/srsoftware/web4rail/Route.java
+++ b/src/main/java/de/srsoftware/web4rail/Route.java
@@ -39,6 +39,7 @@ import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Form;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
+import de.srsoftware.web4rail.tags.Table;
import de.srsoftware.web4rail.tiles.Block;
import de.srsoftware.web4rail.tiles.Contact;
import de.srsoftware.web4rail.tiles.Shadow;
@@ -76,17 +77,23 @@ public class Route extends BaseClass implements Comparable{
private class BrakeProcessor extends Thread {
private int startSpeed;
private long timestamp;
- private int timeStep;
+ private Integer timeStep;
private Route route;
private Train train;
private boolean aborted = false;
+ private String brakeId;
private static final int ENDSPEED = 5;
- public BrakeProcessor(Route route, Train train, Integer timestep) {
- startSpeed = train.speed;
- this.timeStep = isNull(timestep) ? 100 : timestep;
- this.route = route;
+ public BrakeProcessor(Route route, Train train) {
this.train = train;
+ this.route = route;
+
+ startSpeed = train.speed;
+ brakeId = train.brakeId();
+
+ timeStep = brakeTimes.get(brakeId);
+ // if no brake time is available for this train, use the fastest brake time already known for this route:
+ if (isNull(timeStep)) timeStep = route.brakeTimes.values().stream().min(Integer::compare).orElse(100);
start();
}
@@ -109,7 +116,7 @@ public class Route extends BaseClass implements Comparable{
newTimeStep = diff < 0 ? timeStep - absDiff : timeStep + absDiff;
if (newTimeStep != timeStep) {
- route.brakeTimes.put(train.brakeId(),newTimeStep);
+ route.brakeTimes.put(brakeId,newTimeStep);
LOG.debug("Corrected brake timestep for {} @ {} from {} to {} ms.",train,route,timeStep,newTimeStep);
}
}
@@ -233,6 +240,19 @@ public class Route extends BaseClass implements Comparable{
}
}
+ private void addBraketimesTo(Window win) {
+ new Tag("h4").content(t("Brake time table")).addTo(win);
+ Table table = new Table();
+ table.addHead(t("Train"),t("Brake time¹, forward"),t("Brake time¹, reverse"));
+ for (Train t : Train.list()) {
+ Integer fTime = brakeTimes.get(t.brakeId());
+ Integer rTime = brakeTimes.get(t.brakeId(true));
+ table.addRow(t,isSet(fTime)? fTime+NBSP+"ms" : "–",isSet(rTime)? fTime+NBSP+"ms" : "–");
+ }
+ table.clazz("brake-times").addTo(win);
+ new Tag("p").content(t("1) Duration between 5 {} steps during brake process.",speedUnit)).addTo(win);
+ }
+
private void addConditionsTo(Window win) {
new Tag("h4").content(t("Conditions")).addTo(win);
if (!conditions.isEmpty()) {
@@ -365,8 +385,7 @@ public class Route extends BaseClass implements Comparable{
public void brakeStart() {
if (isNull(train)) return;
- Integer brakeTime = brakeTimes.get(train.brakeId());
- brakeProcessor = new BrakeProcessor(this,train,brakeTime);
+ brakeProcessor = new BrakeProcessor(this,train);
}
public void brakeStop() {
@@ -695,7 +714,7 @@ public class Route extends BaseClass implements Comparable{
addTurnoutsTo(win);
addConditionsTo(win);
addContactsTo(win);
-
+ addBraketimesTo(win);
return win;
}
diff --git a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java
index 04d83d4..60ad891 100644
--- a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java
+++ b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java
@@ -28,7 +28,7 @@ public class Locomotive extends Car implements Constants,Device{
private static final String REVERSE = "reverse";
public static final String LOCOMOTIVE = "locomotive";
- private boolean reverse = false;
+ boolean reverse = false;
private Protocol proto = Protocol.DCC128;
private int address = 3;
private int speed = 0;
diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java
index 387ee89..5286272 100644
--- a/src/main/java/de/srsoftware/web4rail/moving/Train.java
+++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java
@@ -80,9 +80,7 @@ public class Train extends BaseClass implements Comparable {
private Block currentBlock,destination = null;
LinkedList trace = new LinkedList();
-
- private String brakeId = null;
-
+
private class Autopilot extends Thread{
boolean stop = false;
int waitTime = 100;
@@ -197,7 +195,6 @@ public class Train extends BaseClass implements Comparable {
if (car instanceof Locomotive) {
locos.add((Locomotive) car);
} else cars.add(car);
- brakeId = null;
car.train(this);
}
@@ -210,13 +207,15 @@ public class Train extends BaseClass implements Comparable {
}
public String brakeId() {
- if (isNull(brakeId)) {
- TreeSet carIds = new TreeSet();
- locos.stream().map(loco -> loco.id()).forEach(carIds::add);
- cars.stream().map(car -> car.id()).forEach(carIds::add);
- brakeId = md5sum(carIds+":"+direction);
- LOG.debug("generated new brake id for {}: {}",brakeId,this);
- }
+ return brakeId(false);
+ }
+
+ public String brakeId(boolean reversed) {
+ TreeSet carIds = new TreeSet();
+ locos.stream().map(loco -> loco.id()+":"+(reversed != loco.reverse?"r":"f")).forEach(carIds::add);
+ cars.stream().map(car -> ""+car.id()).forEach(carIds::add);
+ String brakeId = md5sum(carIds);
+ LOG.debug("generated new brake id for {}: {}",this,brakeId);
return brakeId;
}
@@ -309,7 +308,6 @@ public class Train extends BaseClass implements Comparable {
locos.remove(loco);
loco.train(null);
}
- brakeId = null;
return properties();
}