From 6fd53d6e957925730d7858bdc03850018858c000 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Fri, 8 Jan 2021 19:50:36 -0500 Subject: [PATCH] Planned Piece with rotation --- .../iris/scaffold/jigsaw/PlannedPiece.java | 94 ++++++++++++++++++- 1 file changed, 93 insertions(+), 1 deletion(-) 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 f67b74a27..58723bff8 100644 --- a/src/main/java/com/volmit/iris/scaffold/jigsaw/PlannedPiece.java +++ b/src/main/java/com/volmit/iris/scaffold/jigsaw/PlannedPiece.java @@ -1,2 +1,94 @@ -package com.volmit.iris.scaffold.jigsaw;public class PlannedPiece { +package com.volmit.iris.scaffold.jigsaw; + +import com.volmit.iris.manager.IrisDataManager; +import com.volmit.iris.object.*; +import com.volmit.iris.util.AxisAlignedBB; +import com.volmit.iris.util.KList; +import lombok.Data; + +@Data +public class PlannedPiece { + private IrisPosition position; + private IrisObject object; + private IrisJigsawPiece piece; + private IrisObjectRotation rotation; + private IrisDataManager data; + private AxisAlignedBB box; + private KList connected; + + public PlannedPiece(IrisPosition position, IrisJigsawPiece piece) + { + this(position, piece, 0,0,0); + } + + public PlannedPiece(IrisPosition position, IrisJigsawPiece piece, int rx, int ry, int rz) + { + this.position = position; + this.data = piece.getLoader(); + this.rotation = IrisObjectRotation.of(rx*90, ry*90, rz*90); + this.object = rotation.rotateCopy(data.getObjectLoader().load(piece.getObject())); + this.piece = rotation.rotateCopy(piece); + this.box = object.getAABB(); + this.connected = new KList<>(); + } + + public boolean contains(IrisPosition p) + { + return getBox().contains(p); + } + + public boolean collidesWith(PlannedPiece p) + { + return getBox().intersects(p.getBox()); + } + + public KList getAvailableConnectors() + { + if(connected.isEmpty()) + { + return piece.getConnectors().copy(); + } + + if(connected.size() == piece.getConnectors().size()) + { + return new KList<>(); + } + + KList c = new KList<>(); + + for(IrisJigsawPieceConnector i : piece.getConnectors()) + { + if(!connected.contains(i.getPosition())) + { + c.add(i); + } + } + + return c; + } + + public boolean connect(IrisJigsawPieceConnector c) + { + if(piece.getConnectors().contains(c)) + { + return connect(c.getPosition()); + } + + return false; + } + + private boolean connect(IrisPosition p) + { + return connected.addIfMissing(p); + } + + public IrisPosition getWorldPosition(IrisJigsawPieceConnector c) + { + return getWorldPosition(c.getPosition()); + } + + public IrisPosition getWorldPosition(IrisPosition position) + { + return this.position.add(position); + } }