using UnityEngine; namespace AibisDream { /// /// 网格单元格状态 /// public enum GridCellState { Empty = 0, // 空 Occupied = 1 // 已占用 } /// /// 游戏网格系统接口(整个网格) /// 负责管理整个游戏网格的状态和操作,包括: /// - 网格的整体尺寸和配置 /// - 所有单元格的状态管理 /// - 坐标转换(世界坐标 ↔ 网格坐标) /// - 网格级别的操作(清空、统计等) /// /// 注意:单个单元格(Cell)通过坐标访问,没有独立接口 /// public interface IBlockPuzzleGrid { /// /// 网格宽度 /// int Width { get; } /// /// 网格高度 /// int Height { get; } /// /// 网格单元格大小(世界单位) /// float CellSize { get; } /// /// 网格原点位置(世界坐标) /// Vector3 Origin { get; } /// /// 初始化网格 /// /// 宽度 /// 高度 /// 单元格大小 /// 原点位置 void Initialize(int width, int height, float cellSize, Vector3 origin); /// /// 获取指定位置的单元格状态 /// /// 网格X坐标 /// 网格Y坐标 /// 单元格状态 GridCellState GetCellState(int x, int y); /// /// 设置指定位置的单元格状态 /// /// 网格X坐标 /// 网格Y坐标 /// 单元格状态 void SetCellState(int x, int y, GridCellState state); /// /// 检查指定位置是否在网格范围内 /// /// 网格X坐标 /// 网格Y坐标 /// 是否在范围内 bool IsValidPosition(int x, int y); /// /// 检查指定位置是否为空 /// /// 网格X坐标 /// 网格Y坐标 /// 是否为空 bool IsCellEmpty(int x, int y); /// /// 世界坐标转换为网格坐标 /// /// 世界坐标 /// 输出的网格X坐标 /// 输出的网格Y坐标 /// 是否转换成功 bool WorldToGrid(Vector3 worldPos, out int gridX, out int gridY); /// /// 网格坐标转换为世界坐标 /// /// 网格X坐标 /// 网格Y坐标 /// 世界坐标 Vector3 GridToWorld(int gridX, int gridY); /// /// 清空整个网格 /// void Clear(); /// /// 获取已占用的单元格数量 /// /// 已占用的单元格数量 int GetOccupiedCount(); /// /// 获取总单元格数量 /// /// 总单元格数量 int GetTotalCellCount(); /// /// 获取网格顶点信息 /// /// 网格四个顶点位置 Vector3[] GridVerticesToWorld(int x, int y); } }