From a8156d0626dd5e0b77bc89ce502ccebc2ac25624 Mon Sep 17 00:00:00 2001 From: Stephan Richter <github@keawe.de> Date: Wed, 16 Sep 2020 09:48:31 +0200 Subject: [PATCH] added contacts and signals --- resources/css/style.css | 17 ++++++++++++++- resources/svg/ContactH.svg | 4 ++++ resources/svg/ContactV.svg | 4 ++++ resources/svg/SignalE.svg | 7 +++++++ resources/svg/SignalN.svg | 7 +++++++ resources/svg/SignalS.svg | 7 +++++++ resources/svg/SignalW.svg | 7 +++++++ resources/svg/StraightV.svg | 2 +- .../java/de/srsoftware/web4rail/Plan.java | 12 +++++++++++ .../de/srsoftware/web4rail/tiles/Contact.java | 2 +- .../srsoftware/web4rail/tiles/ContactH.java | 20 ++++++++++++++++++ .../srsoftware/web4rail/tiles/ContactV.java | 21 +++++++++++++++++++ .../de/srsoftware/web4rail/tiles/Shadow.java | 3 ++- .../de/srsoftware/web4rail/tiles/Signal.java | 9 ++++++++ .../de/srsoftware/web4rail/tiles/SignalE.java | 20 ++++++++++++++++++ .../de/srsoftware/web4rail/tiles/SignalN.java | 21 +++++++++++++++++++ .../de/srsoftware/web4rail/tiles/SignalS.java | 21 +++++++++++++++++++ .../de/srsoftware/web4rail/tiles/SignalV.java | 21 +++++++++++++++++++ .../de/srsoftware/web4rail/tiles/SignalW.java | 20 ++++++++++++++++++ .../de/srsoftware/web4rail/tiles/Tile.java | 5 +++++ 20 files changed, 226 insertions(+), 4 deletions(-) create mode 100644 resources/svg/ContactH.svg create mode 100644 resources/svg/ContactV.svg create mode 100644 resources/svg/SignalE.svg create mode 100644 resources/svg/SignalN.svg create mode 100644 resources/svg/SignalS.svg create mode 100644 resources/svg/SignalW.svg create mode 100644 src/main/java/de/srsoftware/web4rail/tiles/ContactH.java create mode 100644 src/main/java/de/srsoftware/web4rail/tiles/ContactV.java create mode 100644 src/main/java/de/srsoftware/web4rail/tiles/Signal.java create mode 100644 src/main/java/de/srsoftware/web4rail/tiles/SignalE.java create mode 100644 src/main/java/de/srsoftware/web4rail/tiles/SignalN.java create mode 100644 src/main/java/de/srsoftware/web4rail/tiles/SignalS.java create mode 100644 src/main/java/de/srsoftware/web4rail/tiles/SignalV.java create mode 100644 src/main/java/de/srsoftware/web4rail/tiles/SignalW.java diff --git a/resources/css/style.css b/resources/css/style.css index 5920c32..4d6226e 100644 --- a/resources/css/style.css +++ b/resources/css/style.css @@ -30,6 +30,8 @@ body{ height: 60px !important; } +svg circle, +svg line, svg polygon, svg rect{ fill:#617de4; @@ -40,10 +42,15 @@ svg rect{ svg text{ font-size: 50px; } + svg .block{ fill: #ffffff; } +svg circle{ + fill: gray; +} + .menu{ position: fixed; width: 100%; @@ -125,4 +132,12 @@ h2{ #Eraser polygon{ stroke: red; -} \ No newline at end of file +} + +.sig_a{ + fill: red; +} + +.sig_b{ + fill: black; +} diff --git a/resources/svg/ContactH.svg b/resources/svg/ContactH.svg new file mode 100644 index 0000000..0e6a209 --- /dev/null +++ b/resources/svg/ContactH.svg @@ -0,0 +1,4 @@ +<svg width="%width%" height="100" viewbox="0 0 100 100"> + <rect x="0" y="35" width="100" height="30" /> + <circle cx="50" cy="50" r="25" /> +</svg> \ No newline at end of file diff --git a/resources/svg/ContactV.svg b/resources/svg/ContactV.svg new file mode 100644 index 0000000..021ddc9 --- /dev/null +++ b/resources/svg/ContactV.svg @@ -0,0 +1,4 @@ +<svg width="100" height="" viewbox="0 0 100 100"> + <rect x="35" y="0" width="30" height="100" /> + <circle cx="50" cy="50" r="25" /> +</svg> \ No newline at end of file diff --git a/resources/svg/SignalE.svg b/resources/svg/SignalE.svg new file mode 100644 index 0000000..53e18c2 --- /dev/null +++ b/resources/svg/SignalE.svg @@ -0,0 +1,7 @@ +<svg width="%width%" height="100" viewbox="0 0 100 100"> + <rect x="0" y="35" width="100" height="30" /> + <rect class="sig_a" x="5" y="5" height="20" width="20" /> + <rect class="sig_B" x="25" y="5" height="20" width="20" /> + <line x1="45" y1="15" x2="70" y2="15" /> + <line x1="70" y1="10" x2="70" y2="20" /> +</svg> \ No newline at end of file diff --git a/resources/svg/SignalN.svg b/resources/svg/SignalN.svg new file mode 100644 index 0000000..f9796ff --- /dev/null +++ b/resources/svg/SignalN.svg @@ -0,0 +1,7 @@ +<svg width="100" height="" viewbox="0 0 100 100"> + <rect x="35" y="0" width="30" height="100" /> + <rect class="sig_a" x="5" y="75" height="20" width="20" /> + <rect class="sig_B" x="5" y="55" height="20" width="20" /> + <line x1="15" y1="30" x2="15" y2="55" /> + <line x1="10" y1="30" x2="20" y2="30" /> +</svg> \ No newline at end of file diff --git a/resources/svg/SignalS.svg b/resources/svg/SignalS.svg new file mode 100644 index 0000000..dc0c620 --- /dev/null +++ b/resources/svg/SignalS.svg @@ -0,0 +1,7 @@ +<svg width="100" height="" viewbox="0 0 100 100"> + <rect x="35" y="0" width="30" height="100" /> + <rect class="sig_a" x="75" y="5" height="20" width="20" /> + <rect class="sig_B" x="75" y="25" height="20" width="20" /> + <line x1="85" y1="45" x2="85" y2="70" /> + <line x1="80" y1="70" x2="90" y2="70" /> +</svg> \ No newline at end of file diff --git a/resources/svg/SignalW.svg b/resources/svg/SignalW.svg new file mode 100644 index 0000000..490188b --- /dev/null +++ b/resources/svg/SignalW.svg @@ -0,0 +1,7 @@ +<svg width="%width%" height="100" viewbox="0 0 100 100"> + <rect x="0" y="35" width="100" height="30" /> + <rect class="sig_a" x="75" y="75" height="20" width="20" /> + <rect class="sig_B" x="55" y="75" height="20" width="20" /> + <line x1="30" y1="85" x2="55" y2="85" /> + <line x1="30" y1="80" x2="30" y2="90" /> +</svg> \ No newline at end of file diff --git a/resources/svg/StraightV.svg b/resources/svg/StraightV.svg index 05c35b8..6f7be89 100644 --- a/resources/svg/StraightV.svg +++ b/resources/svg/StraightV.svg @@ -1,3 +1,3 @@ -<svg width="100" height="" viewbox="0 0 100 100"> +<svg width="100" height="" viewbox="0 0 100 %height%"> <rect x="35" y="0" width="30" height="%height%" /> </svg> \ No newline at end of file diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java index ba686db..2cce1af 100644 --- a/src/main/java/de/srsoftware/web4rail/Plan.java +++ b/src/main/java/de/srsoftware/web4rail/Plan.java @@ -23,6 +23,8 @@ import de.srsoftware.tools.Tag; import de.srsoftware.web4rail.tiles.Block; import de.srsoftware.web4rail.tiles.BlockH; import de.srsoftware.web4rail.tiles.BlockV; +import de.srsoftware.web4rail.tiles.ContactH; +import de.srsoftware.web4rail.tiles.ContactV; import de.srsoftware.web4rail.tiles.CrossH; import de.srsoftware.web4rail.tiles.CrossV; import de.srsoftware.web4rail.tiles.DiagES; @@ -35,6 +37,10 @@ import de.srsoftware.web4rail.tiles.EndS; import de.srsoftware.web4rail.tiles.EndW; import de.srsoftware.web4rail.tiles.Eraser; import de.srsoftware.web4rail.tiles.Shadow; +import de.srsoftware.web4rail.tiles.SignalE; +import de.srsoftware.web4rail.tiles.SignalN; +import de.srsoftware.web4rail.tiles.SignalS; +import de.srsoftware.web4rail.tiles.SignalW; import de.srsoftware.web4rail.tiles.StraightH; import de.srsoftware.web4rail.tiles.StraightV; import de.srsoftware.web4rail.tiles.Tile; @@ -311,6 +317,12 @@ public class Plan { StringBuffer tiles = new StringBuffer(); tiles.append(new StraightH().tag(null)); tiles.append(new StraightV().tag(null)); + tiles.append(new ContactH().tag(null)); + tiles.append(new ContactV().tag(null)); + tiles.append(new SignalW().tag(null)); + tiles.append(new SignalE().tag(null)); + tiles.append(new SignalS().tag(null)); + tiles.append(new SignalN().tag(null)); tiles.append(new BlockH().tag(null)); tiles.append(new BlockV().tag(null)); tiles.append(new DiagES().tag(null)); diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Contact.java b/src/main/java/de/srsoftware/web4rail/tiles/Contact.java index 2130f8d..1a51197 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Contact.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Contact.java @@ -1,5 +1,5 @@ package de.srsoftware.web4rail.tiles; -public class Contact { +public abstract class Contact extends Tile{ } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/ContactH.java b/src/main/java/de/srsoftware/web4rail/tiles/ContactH.java new file mode 100644 index 0000000..e133d73 --- /dev/null +++ b/src/main/java/de/srsoftware/web4rail/tiles/ContactH.java @@ -0,0 +1,20 @@ +package de.srsoftware.web4rail.tiles; + +import java.util.List; +import java.util.Vector; + +import de.srsoftware.web4rail.Connector; +import de.srsoftware.web4rail.Plan; + +public class ContactH extends Contact { + @Override + public List<Connector> connections(String from) { + switch (from) { + case Plan.WEST: + return List.of(new Connector(x+1,y,from)); + case Plan.EAST: + return List.of(new Connector(x-1,y,from)); + } + return new Vector<>(); + } +} diff --git a/src/main/java/de/srsoftware/web4rail/tiles/ContactV.java b/src/main/java/de/srsoftware/web4rail/tiles/ContactV.java new file mode 100644 index 0000000..8126b5d --- /dev/null +++ b/src/main/java/de/srsoftware/web4rail/tiles/ContactV.java @@ -0,0 +1,21 @@ +package de.srsoftware.web4rail.tiles; + +import java.util.List; +import java.util.Vector; + +import de.srsoftware.web4rail.Connector; +import de.srsoftware.web4rail.Plan; + +public class ContactV extends Contact { + + @Override + public List<Connector> connections(String from) { + switch (from) { + case Plan.NORTH: + return List.of(new Connector(x,y+1,from)); + case Plan.SOUTH: + return List.of(new Connector(x,y-1,from)); + } + return new Vector<>(); + } +} diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java b/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java index 4f32cca..b186e73 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java @@ -15,8 +15,9 @@ public class Shadow extends Tile{ return super.connections(from); } - public Shadow(Tile overlay) { + public Shadow(Tile overlay) { this.overlay = overlay; + overlay.addShadow(this); } public Tile overlay() { diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Signal.java b/src/main/java/de/srsoftware/web4rail/tiles/Signal.java new file mode 100644 index 0000000..13f5c0d --- /dev/null +++ b/src/main/java/de/srsoftware/web4rail/tiles/Signal.java @@ -0,0 +1,9 @@ +package de.srsoftware.web4rail.tiles; + +public abstract class Signal extends Tile{ + + public Signal() { + super(); + classes.add("signal"); + } +} diff --git a/src/main/java/de/srsoftware/web4rail/tiles/SignalE.java b/src/main/java/de/srsoftware/web4rail/tiles/SignalE.java new file mode 100644 index 0000000..c7a1eca --- /dev/null +++ b/src/main/java/de/srsoftware/web4rail/tiles/SignalE.java @@ -0,0 +1,20 @@ +package de.srsoftware.web4rail.tiles; + +import java.util.List; +import java.util.Vector; + +import de.srsoftware.web4rail.Connector; +import de.srsoftware.web4rail.Plan; + +public class SignalE extends Signal{ + @Override + public List<Connector> connections(String from) { + switch (from) { + case Plan.WEST: + return List.of(new Connector(x+1,y,from)); + case Plan.EAST: + return List.of(new Connector(x-1,y,from)); + } + return new Vector<>(); + } +} diff --git a/src/main/java/de/srsoftware/web4rail/tiles/SignalN.java b/src/main/java/de/srsoftware/web4rail/tiles/SignalN.java new file mode 100644 index 0000000..527a8d9 --- /dev/null +++ b/src/main/java/de/srsoftware/web4rail/tiles/SignalN.java @@ -0,0 +1,21 @@ +package de.srsoftware.web4rail.tiles; + +import java.util.List; +import java.util.Vector; + +import de.srsoftware.web4rail.Connector; +import de.srsoftware.web4rail.Plan; + +public class SignalN extends Signal { + + @Override + public List<Connector> connections(String from) { + switch (from) { + case Plan.NORTH: + return List.of(new Connector(x,y+1,from)); + case Plan.SOUTH: + return List.of(new Connector(x,y-1,from)); + } + return new Vector<>(); + } +} diff --git a/src/main/java/de/srsoftware/web4rail/tiles/SignalS.java b/src/main/java/de/srsoftware/web4rail/tiles/SignalS.java new file mode 100644 index 0000000..b094be2 --- /dev/null +++ b/src/main/java/de/srsoftware/web4rail/tiles/SignalS.java @@ -0,0 +1,21 @@ +package de.srsoftware.web4rail.tiles; + +import java.util.List; +import java.util.Vector; + +import de.srsoftware.web4rail.Connector; +import de.srsoftware.web4rail.Plan; + +public class SignalS extends Signal{ + + @Override + public List<Connector> connections(String from) { + switch (from) { + case Plan.NORTH: + return List.of(new Connector(x,y+1,from)); + case Plan.SOUTH: + return List.of(new Connector(x,y-1,from)); + } + return new Vector<>(); + } +} diff --git a/src/main/java/de/srsoftware/web4rail/tiles/SignalV.java b/src/main/java/de/srsoftware/web4rail/tiles/SignalV.java new file mode 100644 index 0000000..798fa99 --- /dev/null +++ b/src/main/java/de/srsoftware/web4rail/tiles/SignalV.java @@ -0,0 +1,21 @@ +package de.srsoftware.web4rail.tiles; + +import java.util.List; +import java.util.Vector; + +import de.srsoftware.web4rail.Connector; +import de.srsoftware.web4rail.Plan; + +public class SignalV extends Signal { + + @Override + public List<Connector> connections(String from) { + switch (from) { + case Plan.NORTH: + return List.of(new Connector(x,y+1,from)); + case Plan.SOUTH: + return List.of(new Connector(x,y-1,from)); + } + return new Vector<>(); + } +} diff --git a/src/main/java/de/srsoftware/web4rail/tiles/SignalW.java b/src/main/java/de/srsoftware/web4rail/tiles/SignalW.java new file mode 100644 index 0000000..1c60396 --- /dev/null +++ b/src/main/java/de/srsoftware/web4rail/tiles/SignalW.java @@ -0,0 +1,20 @@ +package de.srsoftware.web4rail.tiles; + +import java.util.List; +import java.util.Vector; + +import de.srsoftware.web4rail.Connector; +import de.srsoftware.web4rail.Plan; + +public class SignalW extends Signal{ + @Override + public List<Connector> connections(String from) { + switch (from) { + case Plan.WEST: + return List.of(new Connector(x+1,y,from)); + case Plan.EAST: + return List.of(new Connector(x-1,y,from)); + } + return new Vector<>(); + } +} diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java index 99095ad..1dddf67 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java @@ -25,6 +25,7 @@ public abstract class Tile { protected int x = -1,y = -1; protected HashSet<String> classes = new HashSet<String>(); + protected HashSet<Shadow> shadows = new HashSet<Shadow>(); protected static Logger LOG = LoggerFactory.getLogger(Tile.class); public Tile() { @@ -148,4 +149,8 @@ public abstract class Tile { LOG.debug("{}.update({})",getClass().getSimpleName(),params); return this; } + + public void addShadow(Shadow shadow) { + shadows.add(shadow); + } }