using UnityEngine; using System; namespace AibisDream { /// /// 拖拽状态 /// public enum DragState { Idle, // 空闲 Dragging, // 拖拽中 Snapping, // 吸附中 Placed // 已放置 } /// /// 形状拖拽接口 /// 负责处理形状的拖拽、吸附和放置逻辑 /// public interface IBlockShapeDragger { /// /// 当前拖拽状态 /// DragState CurrentState { get; } /// /// 是否可拖拽 /// bool IsDraggable { get; set; } /// /// 目标网格 /// IBlockPuzzleGrid TargetGrid { get; set; } /// /// 吸附距离阈值 /// float SnapDistance { get; set; } /// /// 拖拽开始事件 /// event Action OnDragStart; /// /// 拖拽更新事件 /// event Action OnDragUpdate; /// /// 拖拽结束事件 /// event Action OnDragEnd; // bool表示是否成功放置 /// /// 吸附事件 /// event Action OnSnap; // 形状, 位置, 网格X, 网格Y /// /// 取消吸附事件 /// event Action OnUnsnap; /// /// 开始拖拽 /// void StartDrag(); /// /// 更新拖拽位置 /// void UpdateDrag(); /// /// 结束拖拽 /// void EndDrag(); /// /// 取消拖拽(返回原位置) /// void CancelDrag(); /// /// 检查是否可以放置到指定位置 /// /// 网格X坐标 /// 网格Y坐标 /// 是否可以放置 bool CanPlaceAt(int gridX, int gridY); /// /// 获取当前吸附的网格坐标 /// /// 输出的网格X坐标 /// 输出的网格Y坐标 /// 是否正在吸附 bool GetSnapGridPosition(out int gridX, out int gridY); } }