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