package net.kennux.cubicworld.voxel; import com.badlogic.gdx.math.Vector3; /** * <pre> * Gets returned by the voxel world's collisionCheck() function. * </pre> * * @author kennux * */ public class VoxelCollision { public Vector3 originCenterPosition; public Vector3 colliderPosition; /** * Is true if there was a collision on x-axis. */ public boolean collisionX; /** * Is true if there was a collision on y-axis. */ public boolean collisionY; /** * Is true if there was a collision on z-axis. */ public boolean collisionZ; /** * <pre> * Initializes a voxel collision object. * It calculates collisionX, collisionY, collisionZ by itself. * </pre> * * @param origin * @param collider */ public VoxelCollision(Vector3 originCenter, Vector3 collider) { Vector3 dir = new Vector3(originCenter).sub(collider).nor(); float xDot = Vector3.dot(dir.x, dir.y, dir.z, 1, 0, 0); float yDot = Vector3.dot(dir.x, dir.y, dir.z, 0, 1, 0); float zDot = Vector3.dot(dir.x, dir.y, dir.z, 0, 0, 1); this.originCenterPosition = originCenter; this.colliderPosition = collider; // collision on x? if (xDot > yDot && xDot > zDot) { this.collisionX = true; } // collision on y? else if (yDot > xDot && yDot > zDot) { this.collisionY = true; } // collision on z? else if (zDot > yDot && zDot > xDot) { this.collisionZ = true; } } /** * Manual setting of collision axis constructor. * * @param originCenter * @param collider * @param collisionX * @param collisionY * @param collisionZ */ public VoxelCollision(Vector3 originCenter, Vector3 collider, boolean collisionX, boolean collisionY, boolean collisionZ) { this.originCenterPosition = originCenter; this.colliderPosition = collider; this.collisionX = collisionX; this.collisionY = collisionY; this.collisionZ = collisionZ; } }