using System; using UnityEngine; using UnityEngine.UIElements; namespace Goap.Goap.Editor { public class DragDrawer : PointerManipulator { private readonly Action callback; private bool enabled; private Vector2 offset = Vector2.zero; private Vector2 delta = Vector2.zero; public DragDrawer(VisualElement target, Action callback) { this.callback = callback; this.target = target; } protected override void RegisterCallbacksOnTarget() { this.target.RegisterCallback(this.PointerDownHandler); this.target.RegisterCallback(this.PointerMoveHandler); this.target.RegisterCallback(this.PointerUpHandler); this.target.RegisterCallback(this.PointerCaptureOutHandler); this.target.RegisterCallback(this.PointerLeveHandler); } protected override void UnregisterCallbacksFromTarget() { this.target.UnregisterCallback(this.PointerDownHandler); this.target.UnregisterCallback(this.PointerMoveHandler); this.target.UnregisterCallback(this.PointerUpHandler); this.target.UnregisterCallback(this.PointerCaptureOutHandler); } private void PointerDownHandler(PointerDownEvent evt) { this.enabled = true; } private void PointerMoveHandler(PointerMoveEvent evt) { if (!this.enabled) return; this.delta += (Vector2) evt.deltaPosition; this.callback(this.offset + this.delta); } private void PointerUpHandler(PointerUpEvent evt) { if (!this.enabled) return; this.enabled = false; this.offset += this.delta; this.delta = Vector2.zero; } private void PointerLeveHandler(PointerLeaveEvent evt) { if (!this.enabled) return; this.enabled = false; this.offset += this.delta; this.delta = Vector2.zero; } private void PointerCaptureOutHandler(PointerCaptureOutEvent evt) { if (!this.enabled) return; this.enabled = false; this.offset += this.delta; this.delta = Vector2.zero; } public void Reset() { this.enabled = false; this.offset = Vector2.zero; this.delta = Vector2.zero; this.callback(Vector2.zero); } } }