improved tile move, added more tiles
@@ -7,6 +7,7 @@ html{
|
||||
}
|
||||
body{
|
||||
min-height: 100%;
|
||||
background: #c6dbd2;
|
||||
}
|
||||
|
||||
.tile{
|
||||
@@ -14,11 +15,19 @@ body{
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
position: absolute;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.crossH{
|
||||
width: 60px;
|
||||
}
|
||||
.crossV{
|
||||
height: 60px !important;
|
||||
}
|
||||
|
||||
svg polygon,
|
||||
svg rect{
|
||||
fill:rgb(0,255,255);
|
||||
fill:#617de4;
|
||||
stroke-width:5;
|
||||
stroke:rgb(0,0,0);
|
||||
}
|
||||
@@ -45,6 +54,7 @@ svg text{
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.Shadow,
|
||||
.menu .list{
|
||||
display: none;
|
||||
}
|
||||
@@ -67,6 +77,7 @@ svg text{
|
||||
min-width: 30px;
|
||||
text-align: center;
|
||||
float: left;
|
||||
background: #ecffa2;
|
||||
}
|
||||
|
||||
#messages{
|
||||
|
||||
@@ -110,13 +110,17 @@ function moveTile(x,y){
|
||||
method: POST,
|
||||
data : {action:mode,direction:selected.id,x:x,y:y},
|
||||
success: function(resp){
|
||||
$(resp).each(function(){
|
||||
if (this.id != undefined){
|
||||
$('#'+this.id).remove();
|
||||
$(BODY).append($(this));
|
||||
}
|
||||
});
|
||||
$('#tile-'+x+'-'+y).remove();
|
||||
if (resp.startsWith('<')){
|
||||
$(resp).each(function(){
|
||||
if (this.id != undefined){
|
||||
$('#'+this.id).remove();
|
||||
$(BODY).append($(this));
|
||||
}
|
||||
});
|
||||
$('#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">
|
||||
<rect x="35" y="0" width="35" height="100" />
|
||||
<rect x="35" y="0" width="30" height="100" />
|
||||
</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.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.DiagNE;
|
||||
import de.srsoftware.web4rail.tiles.DiagSW;
|
||||
import de.srsoftware.web4rail.tiles.DiagWN;
|
||||
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.Eraser;
|
||||
import de.srsoftware.web4rail.tiles.Shadow;
|
||||
import de.srsoftware.web4rail.tiles.StraightH;
|
||||
import de.srsoftware.web4rail.tiles.StraightV;
|
||||
import de.srsoftware.web4rail.tiles.Tile;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutEN;
|
||||
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.TurnoutSW;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutWN;
|
||||
@@ -67,6 +74,9 @@ public class Plan {
|
||||
clazz = tc.getName().replace(".Tile", "."+clazz);
|
||||
Tile tile = (Tile) tc.getClassLoader().loadClass(clazz).getDeclaredConstructor().newInstance();
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -82,7 +92,7 @@ public class Plan {
|
||||
for (Entry<Integer, Tile> row : column.getValue().entrySet()) {
|
||||
int y = row.getKey();
|
||||
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());
|
||||
@@ -147,18 +157,21 @@ public class Plan {
|
||||
if (!moved.isEmpty()) {
|
||||
set(x,y,null);
|
||||
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 null;
|
||||
}
|
||||
|
||||
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);
|
||||
if (tile == null) return new Vector<Tile>();
|
||||
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);
|
||||
return result;
|
||||
}
|
||||
@@ -223,21 +236,27 @@ public class Plan {
|
||||
Tag tileMenu = new Tag("div").clazz("addtile").title(t("Add tile")).content("◫");
|
||||
|
||||
StringBuffer tiles = new StringBuffer();
|
||||
tiles.append(new StraightH().html());
|
||||
tiles.append(new StraightV().html());
|
||||
tiles.append(new DiagES().html());
|
||||
tiles.append(new DiagSW().html());
|
||||
tiles.append(new DiagNE().html());
|
||||
tiles.append(new DiagWN().html());
|
||||
tiles.append(new EndE().html());
|
||||
tiles.append(new EndW().html());
|
||||
tiles.append(new TurnoutSE().html());
|
||||
tiles.append(new TurnoutEN().html());
|
||||
tiles.append(new TurnoutES().html());
|
||||
tiles.append(new TurnoutWS().html());
|
||||
tiles.append(new TurnoutWN().html());
|
||||
tiles.append(new TurnoutSW().html());
|
||||
tiles.append(new Eraser().html());
|
||||
tiles.append(new StraightH().tag());
|
||||
tiles.append(new StraightV().tag());
|
||||
tiles.append(new DiagES().tag());
|
||||
tiles.append(new DiagSW().tag());
|
||||
tiles.append(new DiagNE().tag());
|
||||
tiles.append(new DiagWN().tag());
|
||||
tiles.append(new EndE().tag());
|
||||
tiles.append(new EndW().tag());
|
||||
tiles.append(new EndN().tag());
|
||||
tiles.append(new EndS().tag());
|
||||
tiles.append(new TurnoutSW().tag());
|
||||
tiles.append(new TurnoutSE().tag());
|
||||
tiles.append(new TurnoutNW().tag());
|
||||
tiles.append(new TurnoutNE().tag());
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
import de.srsoftware.tools.Tag;
|
||||
|
||||
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() {
|
||||
classes.add("tile");
|
||||
classes.add(getClass().getSimpleName());
|
||||
}
|
||||
|
||||
public int height() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
public int len() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
public Tile position(int x, int y) {
|
||||
@@ -25,8 +34,12 @@ public abstract class Tile {
|
||||
this.y = y;
|
||||
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")
|
||||
.id((x!=-1 && y!=-1)?("tile-"+x+"-"+y):(getClass().getSimpleName()))
|
||||
@@ -55,15 +68,15 @@ public abstract class Tile {
|
||||
.addTo(svg);
|
||||
}
|
||||
|
||||
return svg.toString();
|
||||
return svg;
|
||||
}
|
||||
|
||||
private static String t(String txt, Object...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) ;
|
||||
}
|
||||
}
|
||||
|
||||