Files
aibis-dream/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShape.cs
T
2025-11-27 18:14:24 +08:00

107 lines
2.7 KiB
C#

using UnityEngine;
namespace AibisDream
{
/// <summary>
/// 形状旋转角度
/// </summary>
public enum RotationAngle
{
Rotate0 = 0, // 0度
Rotate90 = 90, // 90度
Rotate180 = 180, // 180度
Rotate270 = 270 // 270度
}
/// <summary>
/// 形状块接口
/// 负责管理形状的数据和操作
/// </summary>
public interface IBlockShape
{
/// <summary>
/// 形状的唯一ID
/// </summary>
int ShapeId { get; }
/// <summary>
/// 形状名称
/// </summary>
string ShapeName { get; }
/// <summary>
/// 当前旋转角度
/// </summary>
RotationAngle CurrentRotation { get; }
/// <summary>
/// 获取当前形状的宽度(考虑旋转)
/// </summary>
int Width { get; }
/// <summary>
/// 获取当前形状的高度(考虑旋转)
/// </summary>
int Height { get; }
/// <summary>
/// 获取形状占用的格子数量
/// </summary>
int BlockCount { get; }
/// <summary>
/// 获取原始形状模式(未旋转)
/// </summary>
/// <returns>二维数组,1表示有格子,0表示空</returns>
int[,] GetOriginalPattern();
/// <summary>
/// 获取当前形状模式(考虑旋转)
/// </summary>
/// <returns>二维数组,1表示有格子,0表示空</returns>
int[,] GetCurrentPattern();
/// <summary>
/// 旋转形状
/// </summary>
/// <param name="angle">旋转角度</param>
void Rotate(RotationAngle angle);
/// <summary>
/// 顺时针旋转90度
/// </summary>
void RotateClockwise();
/// <summary>
/// 逆时针旋转90度
/// </summary>
void RotateCounterClockwise();
/// <summary>
/// 重置旋转角度为0
/// </summary>
void ResetRotation();
/// <summary>
/// 检查指定位置是否有格子
/// </summary>
/// <param name="x">形状内的X坐标(相对坐标)</param>
/// <param name="y">形状内的Y坐标(相对坐标)</param>
/// <returns>是否有格子</returns>
bool HasBlockAt(int x, int y);
/// <summary>
/// 获取形状的所有格子位置(相对坐标)
/// </summary>
/// <returns>格子位置列表</returns>
Vector2Int[] GetBlockPositions();
/// <summary>
/// 创建形状的副本
/// </summary>
/// <returns>形状副本</returns>
// IBlockShape Clone();
}
}