using System; using UnityEngine; using UnityEngine.EventSystems; namespace HotUpdate.Gameplay { /// Input behaviour on authored formation buttons; creates no UI objects. public sealed class FormationDragHandle : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { public Func CanBegin; public Action Begin, Move, End; bool _dragging; public void OnBeginDrag(PointerEventData data) { if (data.button != PointerEventData.InputButton.Left || CanBegin?.Invoke() != true) return; _dragging = true; data.eligibleForClick = false; Begin?.Invoke(data); } public void OnDrag(PointerEventData data) { if (_dragging) Move?.Invoke(data); } public void OnEndDrag(PointerEventData data) { if (!_dragging) return; _dragging = false; End?.Invoke(data); } void OnDisable() { _dragging = false; } } }