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