From 2f8292faab9ff3803161bd9be8a3792f6adaef79 Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Wed, 1 Jan 2014 01:39:22 -0400 Subject: [PATCH] More Progress on Mazes More progress on mazes. Started implementing the placement of dimensional doors in mazes. --- .../experimental/BoundingBox.java | 69 +++++++++++++++++++ .../experimental/MazeBuilder.java | 2 + .../experimental/MazeDesign.java | 6 ++ .../experimental/PartitionNode.java | 42 +---------- 4 files changed, 80 insertions(+), 39 deletions(-) create mode 100644 src/main/java/StevenDimDoors/experimental/BoundingBox.java diff --git a/src/main/java/StevenDimDoors/experimental/BoundingBox.java b/src/main/java/StevenDimDoors/experimental/BoundingBox.java new file mode 100644 index 0000000..7c99646 --- /dev/null +++ b/src/main/java/StevenDimDoors/experimental/BoundingBox.java @@ -0,0 +1,69 @@ +package StevenDimDoors.experimental; + +import StevenDimDoors.mod_pocketDim.Point3D; + +public class BoundingBox +{ + protected Point3D minCorner; + protected Point3D maxCorner; + + public BoundingBox(int x, int y, int z, int width, int height, int length) + { + this.minCorner = new Point3D(x, y, z); + this.maxCorner = new Point3D(x + width - 1, y + height - 1, z + length - 1); + } + + public BoundingBox(Point3D minCorner, Point3D maxCorner) + { + this.minCorner = minCorner; + this.maxCorner = maxCorner; + } + + public int width() + { + return (maxCorner.getX() - minCorner.getX() + 1); + } + + public int height() + { + return (maxCorner.getY() - minCorner.getY() + 1); + } + + public int length() + { + return (maxCorner.getZ() - minCorner.getZ() + 1); + } + + public Point3D minCorner() + { + return minCorner; + } + + public Point3D maxCorner() + { + return maxCorner; + } + + public boolean contains(int x, int y, int z) + { + return ((minCorner.getX() <= x && x <= maxCorner.getX()) && + (minCorner.getY() <= y && y <= maxCorner.getY()) && + (minCorner.getZ() <= z && z <= maxCorner.getZ())); + } + + public boolean intersects(BoundingBox other) + { + // To be clear, having one box inside another counts as intersecting + + boolean xi = (this.minCorner.getX() <= other.minCorner.getX() && other.minCorner.getX() <= this.maxCorner.getX()) || + (other.minCorner.getX() <= this.minCorner.getX() && this.minCorner.getX() <= other.maxCorner.getX()); + + boolean yi = (this.minCorner.getY() <= other.minCorner.getY() && other.minCorner.getY() <= this.maxCorner.getY()) || + (other.minCorner.getY() <= this.minCorner.getY() && this.minCorner.getY() <= other.maxCorner.getY()); + + boolean zi = (this.minCorner.getZ() <= other.minCorner.getZ() && other.minCorner.getZ() <= this.maxCorner.getZ()) || + (other.minCorner.getZ() <= this.minCorner.getZ() && this.minCorner.getZ() <= other.maxCorner.getZ()); + + return xi && yi && zi; + } +} diff --git a/src/main/java/StevenDimDoors/experimental/MazeBuilder.java b/src/main/java/StevenDimDoors/experimental/MazeBuilder.java index aa469a4..37935c8 100644 --- a/src/main/java/StevenDimDoors/experimental/MazeBuilder.java +++ b/src/main/java/StevenDimDoors/experimental/MazeBuilder.java @@ -21,6 +21,8 @@ public class MazeBuilder buildRooms(design.getRoomGraph(), world, offset); carveDoorways(design.getRoomGraph(), world, offset, decay, random); + //placeDoors(design, world, offset); + applyRandomDestruction(design, world, offset, decay, random); } diff --git a/src/main/java/StevenDimDoors/experimental/MazeDesign.java b/src/main/java/StevenDimDoors/experimental/MazeDesign.java index d71b956..e7d4b4c 100644 --- a/src/main/java/StevenDimDoors/experimental/MazeDesign.java +++ b/src/main/java/StevenDimDoors/experimental/MazeDesign.java @@ -7,6 +7,7 @@ public class MazeDesign private PartitionNode root; private DirectedGraph rooms; private ArrayList> cores; + private ArrayList protectedAreas; public MazeDesign(PartitionNode root, DirectedGraph rooms, ArrayList> cores) @@ -31,6 +32,11 @@ public class MazeDesign return cores; } + public ArrayList getProtectedAreas() + { + return protectedAreas; + } + public int width() { return root.width(); diff --git a/src/main/java/StevenDimDoors/experimental/PartitionNode.java b/src/main/java/StevenDimDoors/experimental/PartitionNode.java index 25d8d6d..df53854 100644 --- a/src/main/java/StevenDimDoors/experimental/PartitionNode.java +++ b/src/main/java/StevenDimDoors/experimental/PartitionNode.java @@ -2,41 +2,22 @@ package StevenDimDoors.experimental; import StevenDimDoors.mod_pocketDim.Point3D; -public class PartitionNode +public class PartitionNode extends BoundingBox { - private Point3D minCorner; - private Point3D maxCorner; private PartitionNode parent; private PartitionNode leftChild = null; private PartitionNode rightChild = null; public PartitionNode(int width, int height, int length) { + super(new Point3D(0, 0, 0), new Point3D(width - 1, height - 1, length - 1)); parent = null; - minCorner = new Point3D(0, 0, 0); - maxCorner = new Point3D(width - 1, height - 1, length - 1); } private PartitionNode(PartitionNode parent, Point3D minCorner, Point3D maxCorner) { + super(minCorner, maxCorner); this.parent = parent; - this.minCorner = minCorner; - this.maxCorner = maxCorner; - } - - public int width() - { - return (maxCorner.getX() - minCorner.getX() + 1); - } - - public int height() - { - return (maxCorner.getY() - minCorner.getY() + 1); - } - - public int length() - { - return (maxCorner.getZ() - minCorner.getZ() + 1); } public boolean isLeaf() @@ -54,16 +35,6 @@ public class PartitionNode return rightChild; } - public Point3D minCorner() - { - return minCorner; - } - - public Point3D maxCorner() - { - return maxCorner; - } - public PartitionNode parent() { return parent; @@ -122,13 +93,6 @@ public class PartitionNode parent = null; } } - - public boolean contains(int x, int y, int z) - { - return ((minCorner.getX() <= x && x <= maxCorner.getX()) && - (minCorner.getY() <= y && y <= maxCorner.getY()) && - (minCorner.getZ() <= z && z <= maxCorner.getZ())); - } public PartitionNode findPoint(int x, int y, int z) {