Example #1
0
    private void UpdateAxis()
    {
        _data.hasOrigin = Time.time < _data.clearOriginTime;

        if (Input.touchCount == 0)
        {
            _active.anchoredPosition = _origin.anchoredPosition;

            TouchInputNode.SetAxisState(_type, Vector2.zero);
            return;
        }
        else if (!_data.hasOrigin)
        {
            Touch touch = GetFirstTouch();
            _data.originPositon = touch.position;
            _data.hasOrigin     = _data.originPositon != Vector2.zero;
            if (!_data.hasOrigin)
            {
                TouchInputNode.SetAxisState(_type, Vector2.zero);
                return;
            }
        }


        Touch   closestTouchToOrigin = GetClosesTouchToOrigin();
        Vector2 activePosition       = closestTouchToOrigin.position;

        bool denyInput = IgnoreRectsContain(activePosition);

        if (denyInput)
        {
            TouchInputNode.SetAxisState(_type, Vector2.zero);
            return;
        }

        if (activePosition == Vector2.zero)
        {
            _active.anchoredPosition = _origin.anchoredPosition;
            TouchInputNode.SetAxisState(_type, Vector2.zero);
            return;
        }

        Vector2 output = _data.originPositon - activePosition;

        output = output.normalized;


        float scale = GetScale();
        float minDistanceFromOrigin = _data.minDistanceOfOrigin * scale;
        float originActiveDistance  = Vector2.Distance(_data.originPositon, activePosition);

        if (originActiveDistance > minDistanceFromOrigin)
        {
            Vector2 targetOriginPosition = activePosition + (output * minDistanceFromOrigin);
            _data.originPositon = Vector2.MoveTowards(_data.originPositon, targetOriginPosition, Time.time * _data.originRepositionScale);
        }


        float distanceX = _data.originPositon.x - activePosition.x;

        distanceX = Mathf.Abs(distanceX);
        bool right = _data.originPositon.x < activePosition.x;

        output.x = _data.scaleOverInputExpanse.Evaluate(distanceX / minDistanceFromOrigin) * (right ? -1 : 1);

        float distanceY = _data.originPositon.y - activePosition.y;

        distanceY = Mathf.Abs(distanceY);
        bool up = _data.originPositon.y < activePosition.y;

        output.y = _data.scaleOverInputExpanse.Evaluate(distanceY / minDistanceFromOrigin) * (up ? -1 : 1);


        TouchInputNode.SetAxisState(_type, -output);

        DisplayInput(_data.originPositon, activePosition);

        _data.clearOriginTime = Time.time + _data.clearOriginOnUpWait;
    }
Example #2
0
 private void UpdateHold()
 {
     TouchInputNode.SetButtonState(_type, _down);
 }