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