/// <summary> /// Rotates the side defined by axis and positionValue around axis with rotationValue ammount. /// </summary> /// <param name="axis">Rotating around this</param> /// <param name="positionValue">Axis way coordinate of the side we want to rotate</param> /// <param name="rotationValue">Ammount of rotation</param> public void RotateSide(Axis axis, float positionValue, float rotationValue) { // Hiding the hint before starting rotation hintManager.HideHint(); // Only start a new rotation if there is no rotation now if (currentlyRotating == 0) { Vector3 rotationVector = axis.ToVector3(transform); foreach (var cube in cubes) { var cubePosition = cube.gameObject.transform.localPosition; // using local position if (AxisExtensions.VectorEqualsValueAtAxis(axis, cubePosition, positionValue)) { StartCoroutine(ContinousRotation(cube.gameObject, axis, rotationValue)); } } } else { Debug.Log("Rotation in progress I won't start new rotation"); } }
public void OnEndDrag(PointerEventData eventData) { var startWorldPosition = eventData.pointerPressRaycast.worldPosition; var endScreenPosition3D = new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance); Vector3 endWorldPosition = Camera.main.ScreenToWorldPoint(endScreenPosition3D); Debug.DrawLine(startWorldPosition, endWorldPosition, Color.red, 50000); //Debug.Log($"Start OnEndDrag {startWorldPosition} , {endWorldPosition}"); var resultVector = endWorldPosition - startWorldPosition; var crossVector = Vector3.Cross(eventData.pointerPressRaycast.worldNormal, resultVector); // We want to turn the cube around the axis that is nearest to this var axisTurningWayPair = AxisExtensions.Vector3ToAxis(crossVector, transform); Axis axis = axisTurningWayPair.Key; float turningWay = Mathf.Sign(axisTurningWayPair.Value); //Debug.Log($"Chosen Axis: {axis}"); float positionValue = AxisExtensions.GetValueAtAxis(axis, eventData.pointerPressRaycast.gameObject.transform.localPosition); cubeScript.RotateSide(axis, positionValue, turningWay * 90); }
public StickerData(Axis axis, Vector3 position, StickerColor color) { this.color = color; cubeSide = GetCubeSide(axis, AxisExtensions.GetValueAtAxis(axis, position)); Vector2 vector2 = AxisExtensions.GetValuesExceptAxis(axis, position); this.x = vector2.x; this.y = vector2.y; }
public Vector3 GetPosition() { AxisSignPair axisSignPair = GetAxisSignPair(cubeSide); return(AxisExtensions.Get3DPosition(axisSignPair.axis, axisSignPair.sign, new Vector2(x, y))); }
public Axis GetNormalAxis() { return(AxisExtensions.Vector3ToAxis(GetNormalVector(), transform.parent.parent.transform).Key); }