51 lines
2.1 KiB
C#
51 lines
2.1 KiB
C#
namespace AibisDream
|
||
{
|
||
/// <summary>
|
||
/// 放置验证结果
|
||
/// </summary>
|
||
public enum PlacementResult
|
||
{
|
||
Success, // 可以放置
|
||
OutOfBounds, // 超出边界
|
||
Overlap, // 与已有块重叠
|
||
InvalidPosition // 无效位置
|
||
}
|
||
|
||
/// <summary>
|
||
/// 放置检测接口
|
||
/// 负责验证形状是否可以放置在指定位置
|
||
/// </summary>
|
||
public interface IPlacementValidator
|
||
{
|
||
/// <summary>
|
||
/// 检查形状是否可以放置在指定位置
|
||
/// </summary>
|
||
/// <param name="grid">网格系统</param>
|
||
/// <param name="shape">要放置的形状</param>
|
||
/// <param name="gridX">网格X坐标(形状左下角位置)</param>
|
||
/// <param name="gridY">网格Y坐标(形状左下角位置)</param>
|
||
/// <returns>放置验证结果</returns>
|
||
PlacementResult CanPlace(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY);
|
||
|
||
/// <summary>
|
||
/// 检查形状是否可以放置在指定位置(详细版本)
|
||
/// </summary>
|
||
/// <param name="grid">网格系统</param>
|
||
/// <param name="shape">要放置的形状</param>
|
||
/// <param name="gridX">网格X坐标(形状左下角位置)</param>
|
||
/// <param name="gridY">网格Y坐标(形状左下角位置)</param>
|
||
/// <param name="failureReason">失败原因(如果返回false)</param>
|
||
/// <returns>是否可以放置</returns>
|
||
bool CanPlaceDetailed(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY, out PlacementResult failureReason);
|
||
|
||
/// <summary>
|
||
/// 获取形状在指定位置的所有占用格子坐标
|
||
/// </summary>
|
||
/// <param name="shape">形状</param>
|
||
/// <param name="gridX">网格X坐标(形状左下角位置)</param>
|
||
/// <param name="gridY">网格Y坐标(形状左下角位置)</param>
|
||
/// <returns>占用格子的网格坐标数组</returns>
|
||
(int x, int y)[] GetOccupiedCells(IBlockShape shape, int gridX, int gridY);
|
||
}
|
||
}
|