improved tile move, added more tiles
@@ -7,6 +7,7 @@ html{
|
|||||||
}
|
}
|
||||||
body{
|
body{
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
|
background: #c6dbd2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tile{
|
.tile{
|
||||||
@@ -14,11 +15,19 @@ body{
|
|||||||
width: 30px;
|
width: 30px;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
background: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.crossH{
|
||||||
|
width: 60px;
|
||||||
|
}
|
||||||
|
.crossV{
|
||||||
|
height: 60px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
svg polygon,
|
svg polygon,
|
||||||
svg rect{
|
svg rect{
|
||||||
fill:rgb(0,255,255);
|
fill:#617de4;
|
||||||
stroke-width:5;
|
stroke-width:5;
|
||||||
stroke:rgb(0,0,0);
|
stroke:rgb(0,0,0);
|
||||||
}
|
}
|
||||||
@@ -45,6 +54,7 @@ svg text{
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.Shadow,
|
||||||
.menu .list{
|
.menu .list{
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
@@ -67,6 +77,7 @@ svg text{
|
|||||||
min-width: 30px;
|
min-width: 30px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
float: left;
|
float: left;
|
||||||
|
background: #ecffa2;
|
||||||
}
|
}
|
||||||
|
|
||||||
#messages{
|
#messages{
|
||||||
|
|||||||
@@ -110,13 +110,17 @@ function moveTile(x,y){
|
|||||||
method: POST,
|
method: POST,
|
||||||
data : {action:mode,direction:selected.id,x:x,y:y},
|
data : {action:mode,direction:selected.id,x:x,y:y},
|
||||||
success: function(resp){
|
success: function(resp){
|
||||||
$(resp).each(function(){
|
if (resp.startsWith('<')){
|
||||||
if (this.id != undefined){
|
$(resp).each(function(){
|
||||||
$('#'+this.id).remove();
|
if (this.id != undefined){
|
||||||
$(BODY).append($(this));
|
$('#'+this.id).remove();
|
||||||
}
|
$(BODY).append($(this));
|
||||||
});
|
}
|
||||||
$('#tile-'+x+'-'+y).remove();
|
});
|
||||||
|
$('#tile-'+x+'-'+y).remove();
|
||||||
|
} else {
|
||||||
|
addMessage(resp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
4
resources/svg/CrossH.svg
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="200" height="100" viewbox="0 0 200 100">
|
||||||
|
<polygon points="35,0 135,100 165,100 65,0" />
|
||||||
|
<polygon points="35,100 135,00 165,00 65,100" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 157 B |
4
resources/svg/CrossV.svg
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="100" height="200" viewbox="0 0 100 200">
|
||||||
|
<polygon points="0,35 100,135 100,165 0,65" />
|
||||||
|
<polygon points="100,35 0,135 0,165 100,65" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 155 B |
3
resources/svg/EndN.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="100" height="100" viewbox="0 0 100 100">
|
||||||
|
<rect x="35" y="40" width="30" height="60" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 107 B |
3
resources/svg/EndS.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="100" height="100" viewbox="0 0 100 100">
|
||||||
|
<rect x="35" y="0" width="30" height="60" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 106 B |
@@ -1,3 +1,3 @@
|
|||||||
<svg width="100" height="100" viewbox="0 0 100 100">
|
<svg width="100" height="100" viewbox="0 0 100 100">
|
||||||
<rect x="35" y="0" width="35" height="100" />
|
<rect x="35" y="0" width="30" height="100" />
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 107 B After Width: | Height: | Size: 107 B |
4
resources/svg/TurnoutNE.svg
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="100" height="100" viewbox="0 0 100 100">
|
||||||
|
<rect x="35" y="0" width="30" height="100" />
|
||||||
|
<polygon points="65,0 100,35 100,65 35,0" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 152 B |
4
resources/svg/TurnoutNW.svg
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="100" height="100" viewbox="0 0 100 100">
|
||||||
|
<rect x="35" y="0" width="30" height="100" />
|
||||||
|
<polygon points="65,0 0,65 0,35 35,0" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 148 B |
@@ -16,18 +16,25 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
import de.keawe.tools.translations.Translation;
|
import de.keawe.tools.translations.Translation;
|
||||||
import de.srsoftware.tools.Tag;
|
import de.srsoftware.tools.Tag;
|
||||||
|
import de.srsoftware.web4rail.tiles.CrossH;
|
||||||
|
import de.srsoftware.web4rail.tiles.CrossV;
|
||||||
import de.srsoftware.web4rail.tiles.DiagES;
|
import de.srsoftware.web4rail.tiles.DiagES;
|
||||||
import de.srsoftware.web4rail.tiles.DiagNE;
|
import de.srsoftware.web4rail.tiles.DiagNE;
|
||||||
import de.srsoftware.web4rail.tiles.DiagSW;
|
import de.srsoftware.web4rail.tiles.DiagSW;
|
||||||
import de.srsoftware.web4rail.tiles.DiagWN;
|
import de.srsoftware.web4rail.tiles.DiagWN;
|
||||||
import de.srsoftware.web4rail.tiles.EndE;
|
import de.srsoftware.web4rail.tiles.EndE;
|
||||||
|
import de.srsoftware.web4rail.tiles.EndN;
|
||||||
|
import de.srsoftware.web4rail.tiles.EndS;
|
||||||
import de.srsoftware.web4rail.tiles.EndW;
|
import de.srsoftware.web4rail.tiles.EndW;
|
||||||
import de.srsoftware.web4rail.tiles.Eraser;
|
import de.srsoftware.web4rail.tiles.Eraser;
|
||||||
|
import de.srsoftware.web4rail.tiles.Shadow;
|
||||||
import de.srsoftware.web4rail.tiles.StraightH;
|
import de.srsoftware.web4rail.tiles.StraightH;
|
||||||
import de.srsoftware.web4rail.tiles.StraightV;
|
import de.srsoftware.web4rail.tiles.StraightV;
|
||||||
import de.srsoftware.web4rail.tiles.Tile;
|
import de.srsoftware.web4rail.tiles.Tile;
|
||||||
import de.srsoftware.web4rail.tiles.TurnoutEN;
|
import de.srsoftware.web4rail.tiles.TurnoutEN;
|
||||||
import de.srsoftware.web4rail.tiles.TurnoutES;
|
import de.srsoftware.web4rail.tiles.TurnoutES;
|
||||||
|
import de.srsoftware.web4rail.tiles.TurnoutNE;
|
||||||
|
import de.srsoftware.web4rail.tiles.TurnoutNW;
|
||||||
import de.srsoftware.web4rail.tiles.TurnoutSE;
|
import de.srsoftware.web4rail.tiles.TurnoutSE;
|
||||||
import de.srsoftware.web4rail.tiles.TurnoutSW;
|
import de.srsoftware.web4rail.tiles.TurnoutSW;
|
||||||
import de.srsoftware.web4rail.tiles.TurnoutWN;
|
import de.srsoftware.web4rail.tiles.TurnoutWN;
|
||||||
@@ -67,6 +74,9 @@ public class Plan {
|
|||||||
clazz = tc.getName().replace(".Tile", "."+clazz);
|
clazz = tc.getName().replace(".Tile", "."+clazz);
|
||||||
Tile tile = (Tile) tc.getClassLoader().loadClass(clazz).getDeclaredConstructor().newInstance();
|
Tile tile = (Tile) tc.getClassLoader().loadClass(clazz).getDeclaredConstructor().newInstance();
|
||||||
set(x, y, tile);
|
set(x, y, tile);
|
||||||
|
for (int i=1; i<tile.len(); i++) set(x+i,y,new Shadow());
|
||||||
|
for (int i=1; i<tile.height(); i++) set(x,y+1,new Shadow());
|
||||||
|
|
||||||
return tile;
|
return tile;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,7 +92,7 @@ public class Plan {
|
|||||||
for (Entry<Integer, Tile> row : column.getValue().entrySet()) {
|
for (Entry<Integer, Tile> row : column.getValue().entrySet()) {
|
||||||
int y = row.getKey();
|
int y = row.getKey();
|
||||||
Tile tile = row.getValue().position(x, y);
|
Tile tile = row.getValue().position(x, y);
|
||||||
if (tile != null) page.append("\t\t"+tile.html()+"\n");
|
if (tile != null) page.append("\t\t"+tile.tag()+"\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return page.append(menu()).append(messages());
|
return page.append(menu()).append(messages());
|
||||||
@@ -147,18 +157,21 @@ public class Plan {
|
|||||||
if (!moved.isEmpty()) {
|
if (!moved.isEmpty()) {
|
||||||
set(x,y,null);
|
set(x,y,null);
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
for (Tile tile : moved) sb.append(tile.html()+"\n");
|
for (Tile tile : moved) sb.append(tile.tag()+"\n");
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Vector<Tile> moveTile(int x, int y,int xstep,int ystep) {
|
private Vector<Tile> moveTile(int x, int y,int xstep,int ystep) {
|
||||||
LOG.debug("moveEast({},{})",x,y);
|
LOG.debug("moveTile({}+{},{}+{})",x,xstep,y,ystep);
|
||||||
|
if (x+xstep < -1 || y+ystep < -1) {
|
||||||
|
throw new IndexOutOfBoundsException("Can not move tile out of screen!");
|
||||||
|
}
|
||||||
Tile tile = this.get(x, y);
|
Tile tile = this.get(x, y);
|
||||||
if (tile == null) return new Vector<Tile>();
|
if (tile == null) return new Vector<Tile>();
|
||||||
Vector<Tile> result = moveTile(x+xstep,y+ystep,xstep,ystep);
|
Vector<Tile> result = moveTile(x+xstep,y+ystep,xstep,ystep);
|
||||||
set(x+xstep, y+ystep, tile);
|
set(x+xstep,y+ystep, tile);
|
||||||
result.add(tile);
|
result.add(tile);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -223,21 +236,27 @@ public class Plan {
|
|||||||
Tag tileMenu = new Tag("div").clazz("addtile").title(t("Add tile")).content("◫");
|
Tag tileMenu = new Tag("div").clazz("addtile").title(t("Add tile")).content("◫");
|
||||||
|
|
||||||
StringBuffer tiles = new StringBuffer();
|
StringBuffer tiles = new StringBuffer();
|
||||||
tiles.append(new StraightH().html());
|
tiles.append(new StraightH().tag());
|
||||||
tiles.append(new StraightV().html());
|
tiles.append(new StraightV().tag());
|
||||||
tiles.append(new DiagES().html());
|
tiles.append(new DiagES().tag());
|
||||||
tiles.append(new DiagSW().html());
|
tiles.append(new DiagSW().tag());
|
||||||
tiles.append(new DiagNE().html());
|
tiles.append(new DiagNE().tag());
|
||||||
tiles.append(new DiagWN().html());
|
tiles.append(new DiagWN().tag());
|
||||||
tiles.append(new EndE().html());
|
tiles.append(new EndE().tag());
|
||||||
tiles.append(new EndW().html());
|
tiles.append(new EndW().tag());
|
||||||
tiles.append(new TurnoutSE().html());
|
tiles.append(new EndN().tag());
|
||||||
tiles.append(new TurnoutEN().html());
|
tiles.append(new EndS().tag());
|
||||||
tiles.append(new TurnoutES().html());
|
tiles.append(new TurnoutSW().tag());
|
||||||
tiles.append(new TurnoutWS().html());
|
tiles.append(new TurnoutSE().tag());
|
||||||
tiles.append(new TurnoutWN().html());
|
tiles.append(new TurnoutNW().tag());
|
||||||
tiles.append(new TurnoutSW().html());
|
tiles.append(new TurnoutNE().tag());
|
||||||
tiles.append(new Eraser().html());
|
tiles.append(new TurnoutES().tag());
|
||||||
|
tiles.append(new TurnoutEN().tag());
|
||||||
|
tiles.append(new TurnoutWS().tag());
|
||||||
|
tiles.append(new TurnoutWN().tag());
|
||||||
|
tiles.append(new CrossH().tag());
|
||||||
|
tiles.append(new CrossV().tag());
|
||||||
|
tiles.append(new Eraser().tag());
|
||||||
return new Tag("div").clazz("list").content(tiles.toString()).addTo(tileMenu);
|
return new Tag("div").clazz("list").content(tiles.toString()).addTo(tileMenu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
18
src/main/java/de/srsoftware/web4rail/tiles/CrossH.java
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
package de.srsoftware.web4rail.tiles;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import de.srsoftware.tools.Tag;
|
||||||
|
|
||||||
|
public class CrossH extends Tile{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int len() {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Tag tag() throws IOException {
|
||||||
|
return super.tag().size(200,100).attr("viewbox", "0 0 200 100");
|
||||||
|
}
|
||||||
|
}
|
||||||
18
src/main/java/de/srsoftware/web4rail/tiles/CrossV.java
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
package de.srsoftware.web4rail.tiles;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import de.srsoftware.tools.Tag;
|
||||||
|
|
||||||
|
public class CrossV extends Tile{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int height() {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Tag tag() throws IOException {
|
||||||
|
return super.tag().size(100,200).attr("viewbox", "0 0 100 200");
|
||||||
|
}
|
||||||
|
}
|
||||||
4
src/main/java/de/srsoftware/web4rail/tiles/EndN.java
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
package de.srsoftware.web4rail.tiles;
|
||||||
|
|
||||||
|
public class EndN extends Tile{
|
||||||
|
}
|
||||||
4
src/main/java/de/srsoftware/web4rail/tiles/EndS.java
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
package de.srsoftware.web4rail.tiles;
|
||||||
|
|
||||||
|
public class EndS extends Tile{
|
||||||
|
}
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
package de.srsoftware.web4rail.tiles;
|
package de.srsoftware.web4rail.tiles;
|
||||||
|
|
||||||
import de.srsoftware.tools.Tag;
|
|
||||||
|
|
||||||
public class EndW extends Tile{}
|
public class EndW extends Tile{}
|
||||||
|
|||||||
5
src/main/java/de/srsoftware/web4rail/tiles/Shadow.java
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package de.srsoftware.web4rail.tiles;
|
||||||
|
|
||||||
|
public class Shadow extends Tile{
|
||||||
|
|
||||||
|
}
|
||||||
@@ -18,6 +18,15 @@ public abstract class Tile {
|
|||||||
|
|
||||||
public Tile() {
|
public Tile() {
|
||||||
classes.add("tile");
|
classes.add("tile");
|
||||||
|
classes.add(getClass().getSimpleName());
|
||||||
|
}
|
||||||
|
|
||||||
|
public int height() {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int len() {
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Tile position(int x, int y) {
|
public Tile position(int x, int y) {
|
||||||
@@ -25,8 +34,12 @@ public abstract class Tile {
|
|||||||
this.y = y;
|
this.y = y;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Tag propMenu() {
|
||||||
|
return new Window("tile-properties",t("Properties")).content(t("This tile has no properties"));
|
||||||
|
}
|
||||||
|
|
||||||
public String html() throws IOException {
|
public Tag tag() throws IOException {
|
||||||
|
|
||||||
Tag svg = new Tag("svg")
|
Tag svg = new Tag("svg")
|
||||||
.id((x!=-1 && y!=-1)?("tile-"+x+"-"+y):(getClass().getSimpleName()))
|
.id((x!=-1 && y!=-1)?("tile-"+x+"-"+y):(getClass().getSimpleName()))
|
||||||
@@ -55,15 +68,15 @@ public abstract class Tile {
|
|||||||
.addTo(svg);
|
.addTo(svg);
|
||||||
}
|
}
|
||||||
|
|
||||||
return svg.toString();
|
return svg;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String t(String txt, Object...fills) {
|
private static String t(String txt, Object...fills) {
|
||||||
return Translation.get(Application.class, txt, fills);
|
return Translation.get(Application.class, txt, fills);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Tag propMenu() {
|
|
||||||
return new Window("tile-properties",t("Properties")).content(t("This tile has no properties"));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return t("{}({},{})",getClass().getSimpleName(),x,y) ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||