From d6ddb2b247f79c94db533239067f7860938fd2ad Mon Sep 17 00:00:00 2001 From: StrangeOne101 Date: Tue, 22 Jun 2021 17:34:21 +1200 Subject: [PATCH] Fixes Season 2 - Fixed double sided connectors not working properly - Fixed skulls not being able to be rotated when they are placed on an angle that isn't perfectly straight (north, south, east, west) --- .../iris/object/IrisObjectRotation.java | 47 +++++++++++++++++-- .../iris/scaffold/jigsaw/PlannedPiece.java | 11 ++--- 2 files changed, 45 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/volmit/iris/object/IrisObjectRotation.java b/src/main/java/com/volmit/iris/object/IrisObjectRotation.java index 9c3ca17c9..404ba1051 100644 --- a/src/main/java/com/volmit/iris/object/IrisObjectRotation.java +++ b/src/main/java/com/volmit/iris/object/IrisObjectRotation.java @@ -157,6 +157,42 @@ public class IrisObjectRotation return BlockFace.SOUTH; } + public BlockFace getHexFace(BlockVector v) + { + int x = v.getBlockX(); + int y = v.getBlockY(); + int z = v.getBlockZ(); + + if(x == 0 && z == -1) return BlockFace.NORTH; + if(x == 1 && z == -2) return BlockFace.NORTH_NORTH_EAST; + if(x == 1 && z == -1) return BlockFace.NORTH_EAST; + if(x == 2 && z == -1) return BlockFace.EAST_NORTH_EAST; + if(x == 1 && z == 0) return BlockFace.EAST; + if(x == 2 && z == 1) return BlockFace.EAST_SOUTH_EAST; + if(x == 1 && z == 1) return BlockFace.SOUTH_EAST; + if(x == 1 && z == 2) return BlockFace.SOUTH_SOUTH_EAST; + if(x == 0 && z == 1) return BlockFace.SOUTH; + if(x == -1 && z == 2) return BlockFace.SOUTH_SOUTH_WEST; + if(x == -1 && z == 1) return BlockFace.SOUTH_WEST; + if(x == -2 && z == 1) return BlockFace.WEST_SOUTH_WEST; + if(x == -1 && z == 0) return BlockFace.WEST; + if(x == -2 && z == -1) return BlockFace.WEST_NORTH_WEST; + if(x == -1 && z == -1) return BlockFace.NORTH_WEST; + if(x == -1 && z == -2) return BlockFace.NORTH_NORTH_WEST; + + if(y > 0) + { + return BlockFace.UP; + } + + if(y < 0) + { + return BlockFace.DOWN; + } + + return BlockFace.SOUTH; + } + public BlockFace faceForAxis(Axis axis) { switch(axis) @@ -242,12 +278,13 @@ public class IrisObjectRotation { Rotatable g = ((Rotatable) d); BlockFace f = g.getRotation(); - BlockVector bv = new BlockVector(f.getModX(), f.getModY(), f.getModZ()); + + BlockVector bv = new BlockVector(f.getModX(), 0, f.getModZ()); bv = rotate(bv.clone(), spinx, spiny, spinz); - BlockFace t = getFace(bv); - if (t.getModY() == 0) { - g.setRotation(t); - } + BlockFace face = getHexFace(bv); + + g.setRotation(face); + } else if(d instanceof Orientable) diff --git a/src/main/java/com/volmit/iris/scaffold/jigsaw/PlannedPiece.java b/src/main/java/com/volmit/iris/scaffold/jigsaw/PlannedPiece.java index 0694d7e0a..19420afa0 100644 --- a/src/main/java/com/volmit/iris/scaffold/jigsaw/PlannedPiece.java +++ b/src/main/java/com/volmit/iris/scaffold/jigsaw/PlannedPiece.java @@ -21,7 +21,7 @@ public class PlannedPiece { private IrisJigsawPiece piece; private IrisObjectRotation rotation; private IrisDataManager data; - private KList connected; + private KList connected; private boolean dead = false; private int rotationKey; private AxisAlignedBB box; @@ -95,7 +95,7 @@ public class PlannedPiece { for(IrisJigsawPieceConnector i : piece.getConnectors()) { - if(!connected.contains(i.getPosition())) + if(!connected.contains(i)) { c.add(i); } @@ -108,17 +108,12 @@ public class PlannedPiece { { if(piece.getConnectors().contains(c)) { - return connect(c.getPosition()); + return connected.addIfMissing(c); } return false; } - private boolean connect(IrisPosition p) - { - return connected.addIfMissing(p); - } - public IrisPosition getWorldPosition(IrisJigsawPieceConnector c) { return getWorldPosition(c.getPosition());