mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-19 18:55:18 +00:00
Planned Piece with rotation
This commit is contained in:
parent
7530c586f7
commit
6fd53d6e95
@ -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<IrisPosition> 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<IrisJigsawPieceConnector> getAvailableConnectors()
|
||||||
|
{
|
||||||
|
if(connected.isEmpty())
|
||||||
|
{
|
||||||
|
return piece.getConnectors().copy();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(connected.size() == piece.getConnectors().size())
|
||||||
|
{
|
||||||
|
return new KList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
KList<IrisJigsawPieceConnector> 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user