public void OnDrag(PointerEventData eventData) { if (pointerId != eventData.pointerId) { return; } Vector2 position = RectTransformUtility.WorldToScreenPoint(internalSettings.camera, Visual.Background.position); var input = (eventData.position - position) / (internalSettings.radius * internalSettings.canvas.scaleFactor); var meta = new InputMeta(input); for (int i = 0; i < HandleInput.Length; i++) { HandleInput[i].Handle(Visual, internalSettings, ref meta); } var output = meta.vector; Visual.Handle.anchoredPosition = output * internalSettings.radius;// * internalSettings.handleRange; for (int i = 0; i < HandleOutput.Length; i++) { HandleOutput[i].Handle(ref output); } SetData(output); }
public void Handle(Visual visual, InternalSettings internalSettings, ref InputMeta meta) { if (meta.magnitude > internalSettings.handleRange) { meta.vector = meta.normalized * internalSettings.handleRange; } }
public void Handle(Visual visual, InternalSettings internalSettings, ref InputMeta meta) { if (meta.magnitude > internalSettings.handleRange) { Vector2 difference = meta.normalized * (meta.magnitude - internalSettings.handleRange) * internalSettings.radius; visual.Background.anchoredPosition += difference; } }