import type { MapRegionConfig } from '../config/BattleConfigTypes'; import type { Cell } from './Cell'; /** 地图区域(全图 / 子区域) */ export class MapRegion { /** * @param config 区域矩形配置 */ constructor(public config: MapRegionConfig) {} /** * @param cell 格子坐标 * @returns 是否在区域内 */ contains(cell: Cell): boolean { const { startRow, rowCount, startCol, colCount } = this.config; return ( cell.row >= startRow && cell.row < startRow + rowCount && cell.col >= startCol && cell.col < startCol + colCount ); } /** * @param anchor 锚点格子 * @returns 钳制到区域内的锚点 */ clampAnchor(anchor: Cell): Cell { const { startRow, rowCount, startCol, colCount } = this.config; return { row: Math.min(Math.max(anchor.row, startRow), startRow + rowCount - 1), col: Math.min(Math.max(anchor.col, startCol), startCol + colCount - 1), }; } } /** * @param rows 行数,默认 12 * @param cols 列数,默认 10 * @returns 全图部署区域 */ export function createSoloRegion(rows = 12, cols = 10): MapRegion { return new MapRegion({ startRow: 0, rowCount: rows, startCol: 0, colCount: cols }); }