Beispiel #1
0
    /// <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);
    }
Beispiel #3
0
    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;
    }
Beispiel #4
0
    public Vector3 GetPosition()
    {
        AxisSignPair axisSignPair = GetAxisSignPair(cubeSide);

        return(AxisExtensions.Get3DPosition(axisSignPair.axis, axisSignPair.sign, new Vector2(x, y)));
    }
Beispiel #5
0
 public Axis GetNormalAxis()
 {
     return(AxisExtensions.Vector3ToAxis(GetNormalVector(), transform.parent.parent.transform).Key);
 }