Fix wall detection/generation of start- and end-tiles.
This commit is contained in:
parent
6302aaa5e8
commit
31b7fd6b2a
2 changed files with 19 additions and 14 deletions
|
@ -31,21 +31,24 @@ public class Generator {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void preDig() {
|
private void preDig() {
|
||||||
|
final Position end = this.labyrinth.getEnd();
|
||||||
final Tile endTile = this.labyrinth.getEndTile();
|
final Tile endTile = this.labyrinth.getEndTile();
|
||||||
if (endTile.hasWallAt(Direction.BOTTOM)) {
|
|
||||||
endTile.enableDiggingToOrFrom(Direction.BOTTOM);
|
if (end.getY() == 0) {
|
||||||
endTile.digFrom(Direction.BOTTOM);
|
|
||||||
} else if (endTile.hasWallAt(Direction.RIGHT)) {
|
|
||||||
endTile.enableDiggingToOrFrom(Direction.RIGHT);
|
|
||||||
endTile.digFrom(Direction.RIGHT);
|
|
||||||
} else if (endTile.hasWallAt(Direction.TOP)) {
|
|
||||||
endTile.enableDiggingToOrFrom(Direction.TOP);
|
endTile.enableDiggingToOrFrom(Direction.TOP);
|
||||||
endTile.digFrom(Direction.TOP);
|
endTile.digFrom(Direction.TOP);
|
||||||
} else if (endTile.hasWallAt(Direction.LEFT)) {
|
} else if (end.getX() == 0) {
|
||||||
endTile.enableDiggingToOrFrom(Direction.LEFT);
|
endTile.enableDiggingToOrFrom(Direction.LEFT);
|
||||||
endTile.digFrom(Direction.LEFT);
|
endTile.digFrom(Direction.LEFT);
|
||||||
|
} else if (end.getY() == this.labyrinth.getHeight() - 1) {
|
||||||
|
endTile.enableDiggingToOrFrom(Direction.BOTTOM);
|
||||||
|
endTile.digFrom(Direction.BOTTOM);
|
||||||
|
} else if (end.getX() == this.labyrinth.getWidth() - 1) {
|
||||||
|
endTile.enableDiggingToOrFrom(Direction.RIGHT);
|
||||||
|
endTile.digFrom(Direction.RIGHT);
|
||||||
}
|
}
|
||||||
this.positions.push(this.labyrinth.getEnd());
|
|
||||||
|
this.positions.push(end);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void dig() {
|
private void dig() {
|
||||||
|
@ -80,17 +83,19 @@ public class Generator {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void postDig() {
|
private void postDig() {
|
||||||
|
final Position start = this.labyrinth.getStart();
|
||||||
final Tile startTile = this.labyrinth.getStartTile();
|
final Tile startTile = this.labyrinth.getStartTile();
|
||||||
if (startTile.hasWallAt(Direction.TOP)) {
|
|
||||||
|
if (start.getY() == 0) {
|
||||||
startTile.enableDiggingToOrFrom(Direction.TOP);
|
startTile.enableDiggingToOrFrom(Direction.TOP);
|
||||||
startTile.digTo(Direction.TOP);
|
startTile.digTo(Direction.TOP);
|
||||||
} else if (startTile.hasWallAt(Direction.LEFT)) {
|
} else if (start.getX() == 0) {
|
||||||
startTile.enableDiggingToOrFrom(Direction.LEFT);
|
startTile.enableDiggingToOrFrom(Direction.LEFT);
|
||||||
startTile.digTo(Direction.LEFT);
|
startTile.digTo(Direction.LEFT);
|
||||||
} else if (startTile.hasWallAt(Direction.BOTTOM)) {
|
} else if (start.getY() == this.labyrinth.getHeight() - 1) {
|
||||||
startTile.enableDiggingToOrFrom(Direction.BOTTOM);
|
startTile.enableDiggingToOrFrom(Direction.BOTTOM);
|
||||||
startTile.digTo(Direction.BOTTOM);
|
startTile.digTo(Direction.BOTTOM);
|
||||||
} else if (startTile.hasWallAt(Direction.RIGHT)) {
|
} else if (start.getX() == this.labyrinth.getWidth() - 1) {
|
||||||
startTile.enableDiggingToOrFrom(Direction.RIGHT);
|
startTile.enableDiggingToOrFrom(Direction.RIGHT);
|
||||||
startTile.digTo(Direction.RIGHT);
|
startTile.digTo(Direction.RIGHT);
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ public class Labyrinth {
|
||||||
throw new IllegalArgumentException("'start' must be at the edge of the labyrinth");
|
throw new IllegalArgumentException("'start' must be at the edge of the labyrinth");
|
||||||
}
|
}
|
||||||
if (end.getX() != 0 && end.getX() != width - 1 && end.getY() != 0 && end.getY() != height - 1) {
|
if (end.getX() != 0 && end.getX() != width - 1 && end.getY() != 0 && end.getY() != height - 1) {
|
||||||
throw new IllegalArgumentException("'start' must be at the edge of the labyrinth");
|
throw new IllegalArgumentException("'end' must be at the edge of the labyrinth");
|
||||||
}
|
}
|
||||||
this.width = width;
|
this.width = width;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
|
|
Loading…
Reference in a new issue