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; }
private void UpdateHold() { TouchInputNode.SetButtonState(_type, _down); }