extended TurnTrain action into AlterDirection action
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -4,7 +4,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>de.srsoftware</groupId>
|
<groupId>de.srsoftware</groupId>
|
||||||
<artifactId>web4rail</artifactId>
|
<artifactId>web4rail</artifactId>
|
||||||
<version>1.3.13</version>
|
<version>1.3.14</version>
|
||||||
<name>Web4Rail</name>
|
<name>Web4Rail</name>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<description>Java Model Railway Control</description>
|
<description>Java Model Railway Control</description>
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ public abstract class Action extends BaseClass {
|
|||||||
public static List<Class<? extends Action>> classes() {
|
public static List<Class<? extends Action>> classes() {
|
||||||
return List.of(
|
return List.of(
|
||||||
AddRemoveTag.class,
|
AddRemoveTag.class,
|
||||||
|
AlterDirection.class,
|
||||||
BrakeCancel.class,
|
BrakeCancel.class,
|
||||||
BrakeStart.class,
|
BrakeStart.class,
|
||||||
ConditionalAction.class,
|
ConditionalAction.class,
|
||||||
@@ -64,8 +65,7 @@ public abstract class Action extends BaseClass {
|
|||||||
StartStopAuto.class,
|
StartStopAuto.class,
|
||||||
StopTrain.class,
|
StopTrain.class,
|
||||||
SwitchFunction.class,
|
SwitchFunction.class,
|
||||||
TriggerContact.class,
|
TriggerContact.class
|
||||||
TurnTrain.class
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
110
src/main/java/de/srsoftware/web4rail/actions/AlterDirection.java
Normal file
110
src/main/java/de/srsoftware/web4rail/actions/AlterDirection.java
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -673,7 +673,7 @@ public class Train extends BaseClass implements Comparable<Train> {
|
|||||||
* before: CabCar→ MiddleCar→ Loco→
|
* before: CabCar→ MiddleCar→ Loco→
|
||||||
* after: ←Loco ←MiddleCar ←CabCar
|
* after: ←Loco ←MiddleCar ←CabCar
|
||||||
*/
|
*/
|
||||||
private Tag reverse() {
|
public Tag reverse() {
|
||||||
LOG.debug("train.reverse();");
|
LOG.debug("train.reverse();");
|
||||||
|
|
||||||
if (isSet(direction)) {
|
if (isSet(direction)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user