public void StartRotate(CubeFaceDirection direction, int index) { switch (direction) { case CubeFaceDirection.Forward: RotateAxis = Vector3.forward; break; case CubeFaceDirection.Back: RotateAxis = Vector3.forward; Clockwise *= -1.0f; break; case CubeFaceDirection.Right: RotateAxis = Vector3.left; Clockwise *= 1.0f; break; case CubeFaceDirection.Left: RotateAxis = Vector3.left; Clockwise *= -1.0f; break; case CubeFaceDirection.Up: RotateAxis = Vector3.up; break; case CubeFaceDirection.Down: RotateAxis = Vector3.up; Clockwise *= -1.0f; break; } Combine(direction, index); Rotating = true; }
protected void Combine(CubeFaceDirection direction, int index) { RotateComponents.Clear(); foreach (var cube in Cubes) { float i = 0; switch (direction) { case CubeFaceDirection.Up: case CubeFaceDirection.Down: i = cube.transform.position.y; break; case CubeFaceDirection.Left: case CubeFaceDirection.Right: i = cube.transform.position.x; break; case CubeFaceDirection.Forward: case CubeFaceDirection.Back: i = cube.transform.position.z; break; } if (i < index + 0.01f && i > index - 0.01f) { RotateComponents.Add(cube); } } foreach (var cube in RotateComponents) { cube.GetComponent <Transform>().SetParent(transform, true); } }
public void SetArrow(Face face, Vector3 target, CubeFaceDirection direction) { Transform t = face.transform; Vector3 up = new Vector3(); Vector3 down = new Vector3(); Vector3 left = new Vector3(); Vector3 right = new Vector3(); switch (direction) { case CubeFaceDirection.Forward: up = t.up; down = -up; left = t.right; right = -left; break; case CubeFaceDirection.Back: up = t.up; down = -up; right = t.right; left = -right; break; case CubeFaceDirection.Right: up = t.up; down = -up; left = t.forward; right = -left; break; case CubeFaceDirection.Left: up = t.up; down = -up; left = -t.forward; right = -left; break; case CubeFaceDirection.Up: up = -t.forward; down = -up; left = t.right; right = -left; break; case CubeFaceDirection.Down: up = -t.forward; down = -up; left = -t.right; right = -left; break; } if (Approximate(up, target)) { face.GetComponent <MeshRenderer>().sharedMaterial = M00_Up; } else if (Approximate(down, target)) { face.GetComponent <MeshRenderer>().sharedMaterial = M01_Down; } else if (Approximate(left, target)) { face.GetComponent <MeshRenderer>().sharedMaterial = M10_Left; } else if (Approximate(right, target)) { face.GetComponent <MeshRenderer>().sharedMaterial = M11_Right; } else { face.GetComponent <MeshRenderer>().sharedMaterial = Face_White; } face.Direction = target; }