Files
aibis-dream/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs
T
2026-01-22 18:16:11 +08:00

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