public void CorrectPosition() { Vector3 cubeSideOrigin = cube.GetCubeSideOrigin(cubeSide, cubeDistance); Vector3 up = cube.GetCubeSideGravity(cubeSide); Vector3 pos = transform.position; float scaleLimit = (cube.scale * 0.5f) + cubeDistance; if (cubeSide == Cube.CubeSide.RIGHT || cubeSide == Cube.CubeSide.LEFT) { float diffZ = pos.z - cubeSideOrigin.z; transform.position = new Vector3(cubeSideOrigin.x, pos.y, diffZ); if (diffZ * -up.x > scaleLimit) { cubeSide = cube.GetNextCubeSide(cubeSide, true); } else if (diffZ * -up.x < -scaleLimit) { cubeSide = cube.GetNextCubeSide(cubeSide, false); } } else if (cubeSide == Cube.CubeSide.FRONT || cubeSide == Cube.CubeSide.BACK) { float diffX = pos.x - cubeSideOrigin.x; transform.position = new Vector3(diffX, pos.y, cubeSideOrigin.z); if (diffX * -up.z > scaleLimit) { cubeSide = cube.GetNextCubeSide(cubeSide, false); } else if (diffX * -up.z < -scaleLimit) { cubeSide = cube.GetNextCubeSide(cubeSide, true); } } }
public Cube.CubeSide GetNextCubeSide(Cube.CubeSide cubeSize, bool right = true) { if (right) { switch (cubeSize) { case Cube.CubeSide.RIGHT: return(Cube.CubeSide.FRONT); case Cube.CubeSide.FRONT: return(Cube.CubeSide.LEFT); case Cube.CubeSide.LEFT: return(Cube.CubeSide.BACK); case Cube.CubeSide.BACK: return(Cube.CubeSide.RIGHT); } } else { switch (cubeSize) { case Cube.CubeSide.RIGHT: return(Cube.CubeSide.BACK); case Cube.CubeSide.BACK: return(Cube.CubeSide.LEFT); case Cube.CubeSide.LEFT: return(Cube.CubeSide.FRONT); case Cube.CubeSide.FRONT: return(Cube.CubeSide.RIGHT); } } return(Cube.CubeSide.NONE); }
public Vector3 GetCubeSideOrigin(Cube.CubeSide cubeSide, float addDistance = 0) { Vector3 cubePosition = transform.position; float distance = (scale * 0.5f) + addDistance; switch (cubeSide) { case Cube.CubeSide.RIGHT: return(cubePosition + (transform.right * distance)); case Cube.CubeSide.LEFT: return(cubePosition + (-transform.right * distance)); case Cube.CubeSide.FRONT: return(cubePosition + (transform.forward * distance)); case Cube.CubeSide.BACK: return(cubePosition + (-transform.forward * distance)); default: return(transform.position); } }
public Vector3 GetCubeSideGravity(Cube.CubeSide cubeSide) { switch (cubeSide) { case Cube.CubeSide.FRONT: return(-transform.forward); case Cube.CubeSide.BACK: return(transform.forward); case Cube.CubeSide.RIGHT: return(-transform.right); case Cube.CubeSide.LEFT: return(transform.right); /*case Cube.CubeSide.TOP: * return -transform.up; * case Cube.CubeSide.BOTTOM: * return transform.up;*/ default: return(new Vector3(0, 0, 0)); } }
public void CorrectCubeSide() { cubeSide = cube.GetCubeSide(transform.position); }