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