using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UIElements; using UnityEngine.Events; namespace BITKit.UX { public class UXScreenJoyStick : UXDrag { [Header(Constant.Header.Settings)] [SerializeField] private float range; [SerializeField] private bool resetOnUp; [SerializeField] private bool updateDelta; [SerializeField] private bool raw; [Header(Constant.Header.Events)] [SerializeField] private UnityEvent onDelta; [Header(Constant.Header.InternalVariables)] [SerializeField,ReadOnly] private Vector2 delta; public override void OnStart() { base.OnStart(); visualElement.RegisterCallback(OnPointerMove); } private void OnPointerMove(PointerMoveEvent evt) { if (raw&& isDraging) { onDelta.Invoke(evt.deltaPosition); } } protected override Vector2 GetProcessDelta(Vector2 delta) { delta = Vector2.ClampMagnitude(delta, range); return delta; } protected override void PointerUpEventHandler(PointerUpEvent evt) { base.PointerUpEventHandler(evt); if (resetOnUp) { visualElement.transform.position = default; onDelta.Invoke(this.delta = default); } } protected override void OnDelta(Vector2 delta) { delta.y = -delta.y; if (updateDelta is false) onDelta.Invoke(delta); this.delta = delta; } void Update() { if (updateDelta && delta.sqrMagnitude is not 0) { onDelta.Invoke(delta); } } } }