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(); }