extended TurnTrain action into AlterDirection action

This commit is contained in:
Stephan Richter
2021-01-15 10:43:03 +01:00
parent f8a9c86a0e
commit 323a48dcd6
5 changed files with 114 additions and 23 deletions

View File

@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>de.srsoftware</groupId>
<artifactId>web4rail</artifactId>
<version>1.3.13</version>
<version>1.3.14</version>
<name>Web4Rail</name>
<packaging>jar</packaging>
<description>Java Model Railway Control</description>

View File

@@ -42,6 +42,7 @@ public abstract class Action extends BaseClass {
public static List<Class<? extends Action>> classes() {
return List.of(
AddRemoveTag.class,
AlterDirection.class,
BrakeCancel.class,
BrakeStart.class,
ConditionalAction.class,
@@ -64,8 +65,7 @@ public abstract class Action extends BaseClass {
StartStopAuto.class,
StopTrain.class,
SwitchFunction.class,
TriggerContact.class,
TurnTrain.class
TriggerContact.class
);
}

View File

@@ -0,0 +1,110 @@
package de.srsoftware.web4rail.actions;
import java.util.HashMap;
import java.util.List;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.moving.Train;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Radio;
public class AlterDirection extends Action{
enum NEWDIR {
EAST, WEST, NORTH, SOUTH, REVERSE, TURN
}
private static final String NEW_DIRECTION = "new_dir";
private NEWDIR newDir = NEWDIR.REVERSE;
public AlterDirection(BaseClass parent) {
super(parent);
}
@SuppressWarnings("incomplete-switch")
@Override
public boolean fire(Context context) {
Train train = context.train();
if (isNull(train)) return false;
if (isNull(train.direction())) {
switch (newDir) {
case EAST:
train.heading(Direction.EAST);
return true;
case WEST:
train.heading(Direction.WEST);
return true;
case NORTH:
train.heading(Direction.NORTH);
return true;
case SOUTH:
train.heading(Direction.SOUTH);
return true;
}
}
switch (newDir) {
case REVERSE:
train.reverse();
return true;
case TURN:
train.turn();
return true;
}
if (newDir == NEWDIR.valueOf(train.direction().inverse().toString())) train.turn();
return (newDir == NEWDIR.valueOf(train.direction().toString())); // train already has correct direction
}
@Override
public JSONObject json() {
JSONObject json = super.json();
json.put(NEW_DIRECTION, newDir);
return json;
}
@Override
public Action load(JSONObject json) {
if (json.has(NEW_DIRECTION)) newDir = NEWDIR.valueOf(json.getString(NEW_DIRECTION));
return super.load(json);
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
Tag radios = new Tag("div");
for (NEWDIR d : NEWDIR.values()) {
new Radio(NEW_DIRECTION, d, t("{}",d), newDir == d).addTo(radios);
}
formInputs.add(t("new direction"),radios);
return super.properties(preForm, formInputs, postForm);
}
@SuppressWarnings("incomplete-switch")
@Override
public String toString() {
switch (newDir) {
case REVERSE:
return t("reverse train");
case TURN:
return t("turn train");
default:
return t("Set direction of train to {}",newDir);
}
}
@Override
protected Object update(HashMap<String, String> params) {
if (params.containsKey(NEW_DIRECTION)) {
newDir = NEWDIR.valueOf(params.get(NEW_DIRECTION));
}
return super.update(params);
}
}

View File

@@ -1,19 +0,0 @@
package de.srsoftware.web4rail.actions;
import de.srsoftware.web4rail.BaseClass;
public class TurnTrain extends Action{
public TurnTrain(BaseClass parent) {
super(parent);
}
@Override
public boolean fire(Context context) {
if (context.train() != null) {
context.train().turn();
return true;
}
return false;
}
}

View File

@@ -673,7 +673,7 @@ public class Train extends BaseClass implements Comparable<Train> {
* before: CabCar→ MiddleCar→ Loco→
* after: ←Loco ←MiddleCar ←CabCar
*/
private Tag reverse() {
public Tag reverse() {
LOG.debug("train.reverse();");
if (isSet(direction)) {