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);
}
}