public FaceState GetFaceState(CubeState.Faces face) { return(m_faceStates[(int)face]); }
public FaceStates GetFaceStates() { Vector3 forward = transform.forward; Vector3 up = transform.up; // negate the front vector since I consider it coming towards the camera. Vector3 alignedForward = -NearestWorldAxis(transform.forward); Vector3 alignedUp = NearestWorldAxis(transform.up); CubeState.Faces forwardFace = CubeState.FaceFromVector(alignedForward); CubeState.Faces upFace = CubeState.FaceFromVector(alignedUp); switch (forwardFace) { case CubeState.Faces.FRONT: switch (upFace) { case CubeState.Faces.FRONT: Debug.LogError("IMPOSSIBLE ORIENTATION"); break; case CubeState.Faces.BACK: Debug.LogError("IMPOSSIBLE ORIENTATION"); break; case CubeState.Faces.TOP: return(new FaceStates( new FaceState(0, FaceState.Orientations.UP), new FaceState(1, FaceState.Orientations.UP), new FaceState(2, FaceState.Orientations.UP), new FaceState(3, FaceState.Orientations.UP), new FaceState(4, FaceState.Orientations.UP), new FaceState(5, FaceState.Orientations.UP) )); break; case CubeState.Faces.BOTTOM: return(new FaceStates( new FaceState(0, FaceState.Orientations.DOWN), new FaceState(3, FaceState.Orientations.DOWN), new FaceState(4, FaceState.Orientations.DOWN), new FaceState(1, FaceState.Orientations.DOWN), new FaceState(2, FaceState.Orientations.DOWN), new FaceState(5, FaceState.Orientations.DOWN) )); break; case CubeState.Faces.LEFT: return(new FaceStates( new FaceState(0, FaceState.Orientations.LEFT), new FaceState(2, FaceState.Orientations.LEFT), new FaceState(3, FaceState.Orientations.LEFT), new FaceState(4, FaceState.Orientations.LEFT), new FaceState(1, FaceState.Orientations.LEFT), new FaceState(5, FaceState.Orientations.RIGHT) )); break; case CubeState.Faces.RIGHT: return(new FaceStates( new FaceState(0, FaceState.Orientations.RIGHT), new FaceState(4, FaceState.Orientations.RIGHT), new FaceState(1, FaceState.Orientations.RIGHT), new FaceState(2, FaceState.Orientations.RIGHT), new FaceState(3, FaceState.Orientations.RIGHT), new FaceState(5, FaceState.Orientations.LEFT) )); break; } break; case CubeState.Faces.BACK: switch (upFace) { case CubeState.Faces.FRONT: Debug.LogError("IMPOSSIBLE ORIENTATION"); break; case CubeState.Faces.BACK: Debug.LogError("IMPOSSIBLE ORIENTATION"); break; case CubeState.Faces.TOP: return(new FaceStates( new FaceState(5, FaceState.Orientations.DOWN), new FaceState(1, FaceState.Orientations.DOWN), new FaceState(4, FaceState.Orientations.UP), new FaceState(3, FaceState.Orientations.DOWN), new FaceState(2, FaceState.Orientations.UP), new FaceState(0, FaceState.Orientations.DOWN) )); break; case CubeState.Faces.BOTTOM: return(new FaceStates( new FaceState(5, FaceState.Orientations.UP), new FaceState(3, FaceState.Orientations.UP), new FaceState(2, FaceState.Orientations.DOWN), new FaceState(1, FaceState.Orientations.UP), new FaceState(4, FaceState.Orientations.DOWN), new FaceState(0, FaceState.Orientations.UP) )); break; case CubeState.Faces.LEFT: return(new FaceStates( new FaceState(5, FaceState.Orientations.RIGHT), new FaceState(4, FaceState.Orientations.LEFT), new FaceState(3, FaceState.Orientations.RIGHT), new FaceState(2, FaceState.Orientations.LEFT), new FaceState(1, FaceState.Orientations.RIGHT), new FaceState(0, FaceState.Orientations.LEFT) )); break; case CubeState.Faces.RIGHT: return(new FaceStates( new FaceState(5, FaceState.Orientations.LEFT), new FaceState(2, FaceState.Orientations.RIGHT), new FaceState(1, FaceState.Orientations.LEFT), new FaceState(4, FaceState.Orientations.RIGHT), new FaceState(3, FaceState.Orientations.LEFT), new FaceState(0, FaceState.Orientations.RIGHT) )); break; } break; case CubeState.Faces.TOP: switch (upFace) { case CubeState.Faces.FRONT: return(new FaceStates( new FaceState(1, FaceState.Orientations.DOWN), new FaceState(0, FaceState.Orientations.DOWN), new FaceState(4, FaceState.Orientations.LEFT), new FaceState(5, FaceState.Orientations.DOWN), new FaceState(2, FaceState.Orientations.RIGHT), new FaceState(3, FaceState.Orientations.DOWN) )); break; case CubeState.Faces.BACK: return(new FaceStates( new FaceState(3, FaceState.Orientations.UP), new FaceState(0, FaceState.Orientations.UP), new FaceState(2, FaceState.Orientations.RIGHT), new FaceState(5, FaceState.Orientations.UP), new FaceState(4, FaceState.Orientations.LEFT), new FaceState(1, FaceState.Orientations.UP) )); break; case CubeState.Faces.TOP: Debug.LogError("IMPOSSIBLE ORIENTATION"); break; case CubeState.Faces.BOTTOM: Debug.LogError("IMPOSSIBLE ORIENTATION"); break; case CubeState.Faces.LEFT: return(new FaceStates( new FaceState(4, FaceState.Orientations.LEFT), new FaceState(0, FaceState.Orientations.LEFT), new FaceState(3, FaceState.Orientations.UP), new FaceState(5, FaceState.Orientations.RIGHT), new FaceState(1, FaceState.Orientations.DOWN), new FaceState(2, FaceState.Orientations.LEFT) )); break; case CubeState.Faces.RIGHT: return(new FaceStates( new FaceState(2, FaceState.Orientations.RIGHT), new FaceState(0, FaceState.Orientations.RIGHT), new FaceState(1, FaceState.Orientations.DOWN), new FaceState(5, FaceState.Orientations.LEFT), new FaceState(3, FaceState.Orientations.UP), new FaceState(4, FaceState.Orientations.RIGHT) )); break; } break; case CubeState.Faces.BOTTOM: switch (upFace) { case CubeState.Faces.FRONT: return(new FaceStates( new FaceState(1, FaceState.Orientations.UP), new FaceState(5, FaceState.Orientations.UP), new FaceState(2, FaceState.Orientations.LEFT), new FaceState(0, FaceState.Orientations.UP), new FaceState(4, FaceState.Orientations.RIGHT), new FaceState(3, FaceState.Orientations.UP) )); break; case CubeState.Faces.BACK: return(new FaceStates( new FaceState(3, FaceState.Orientations.DOWN), new FaceState(5, FaceState.Orientations.DOWN), new FaceState(4, FaceState.Orientations.RIGHT), new FaceState(0, FaceState.Orientations.DOWN), new FaceState(2, FaceState.Orientations.LEFT), new FaceState(1, FaceState.Orientations.DOWN) )); break; case CubeState.Faces.TOP: Debug.LogError("IMPOSSIBLE ORIENTATION"); break; case CubeState.Faces.BOTTOM: Debug.LogError("IMPOSSIBLE ORIENTATION"); break; case CubeState.Faces.LEFT: return(new FaceStates( new FaceState(2, FaceState.Orientations.LEFT), new FaceState(5, FaceState.Orientations.RIGHT), new FaceState(3, FaceState.Orientations.DOWN), new FaceState(0, FaceState.Orientations.LEFT), new FaceState(1, FaceState.Orientations.UP), new FaceState(4, FaceState.Orientations.LEFT) )); break; case CubeState.Faces.RIGHT: return(new FaceStates( new FaceState(4, FaceState.Orientations.RIGHT), new FaceState(5, FaceState.Orientations.LEFT), new FaceState(1, FaceState.Orientations.UP), new FaceState(0, FaceState.Orientations.RIGHT), new FaceState(3, FaceState.Orientations.DOWN), new FaceState(2, FaceState.Orientations.RIGHT) )); break; } break; case CubeState.Faces.LEFT: switch (upFace) { case CubeState.Faces.FRONT: return(new FaceStates( new FaceState(1, FaceState.Orientations.RIGHT), new FaceState(4, FaceState.Orientations.DOWN), new FaceState(5, FaceState.Orientations.RIGHT), new FaceState(2, FaceState.Orientations.UP), new FaceState(0, FaceState.Orientations.RIGHT), new FaceState(3, FaceState.Orientations.LEFT) )); break; case CubeState.Faces.BACK: return(new FaceStates( new FaceState(3, FaceState.Orientations.LEFT), new FaceState(2, FaceState.Orientations.UP), new FaceState(5, FaceState.Orientations.LEFT), new FaceState(4, FaceState.Orientations.DOWN), new FaceState(0, FaceState.Orientations.LEFT), new FaceState(1, FaceState.Orientations.RIGHT) )); break; case CubeState.Faces.TOP: return(new FaceStates( new FaceState(2, FaceState.Orientations.UP), new FaceState(1, FaceState.Orientations.RIGHT), new FaceState(5, FaceState.Orientations.DOWN), new FaceState(3, FaceState.Orientations.LEFT), new FaceState(0, FaceState.Orientations.UP), new FaceState(4, FaceState.Orientations.DOWN) )); break; case CubeState.Faces.BOTTOM: return(new FaceStates( new FaceState(4, FaceState.Orientations.DOWN), new FaceState(3, FaceState.Orientations.LEFT), new FaceState(5, FaceState.Orientations.UP), new FaceState(1, FaceState.Orientations.RIGHT), new FaceState(0, FaceState.Orientations.DOWN), new FaceState(2, FaceState.Orientations.UP) )); break; case CubeState.Faces.LEFT: Debug.LogError("IMPOSSIBLE ORIENTATION"); break; case CubeState.Faces.RIGHT: Debug.LogError("IMPOSSIBLE ORIENTATION"); break; } break; case CubeState.Faces.RIGHT: switch (upFace) { case CubeState.Faces.FRONT: return(new FaceStates( new FaceState(1, FaceState.Orientations.LEFT), new FaceState(2, FaceState.Orientations.DOWN), new FaceState(0, FaceState.Orientations.LEFT), new FaceState(4, FaceState.Orientations.UP), new FaceState(5, FaceState.Orientations.LEFT), new FaceState(3, FaceState.Orientations.RIGHT) )); break; case CubeState.Faces.BACK: return(new FaceStates( new FaceState(3, FaceState.Orientations.RIGHT), new FaceState(4, FaceState.Orientations.UP), new FaceState(0, FaceState.Orientations.RIGHT), new FaceState(2, FaceState.Orientations.DOWN), new FaceState(5, FaceState.Orientations.RIGHT), new FaceState(1, FaceState.Orientations.LEFT) )); break; case CubeState.Faces.TOP: return(new FaceStates( new FaceState(4, FaceState.Orientations.UP), new FaceState(1, FaceState.Orientations.LEFT), new FaceState(0, FaceState.Orientations.UP), new FaceState(3, FaceState.Orientations.RIGHT), new FaceState(5, FaceState.Orientations.DOWN), new FaceState(2, FaceState.Orientations.DOWN) )); break; case CubeState.Faces.BOTTOM: return(new FaceStates( new FaceState(2, FaceState.Orientations.DOWN), new FaceState(3, FaceState.Orientations.RIGHT), new FaceState(0, FaceState.Orientations.DOWN), new FaceState(1, FaceState.Orientations.LEFT), new FaceState(5, FaceState.Orientations.UP), new FaceState(4, FaceState.Orientations.UP) )); break; case CubeState.Faces.LEFT: Debug.LogError("IMPOSSIBLE ORIENTATION"); break; case CubeState.Faces.RIGHT: Debug.LogError("IMPOSSIBLE ORIENTATION"); break; } break; } // couldn't find a valid orientation return(null); }