107 lines
2.7 KiB
C#
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();
|
|
}
|
|
}
|
|
|