mirror of
https://github.com/motajs/template.git
synced 2026-09-13 18:38:50 +08:00
refactor(02-02): declare graph builder and test mover interfaces per updated class rule
This commit is contained in:
parent
ffedb80057
commit
e199d99d19
@ -73,12 +73,48 @@ function directionOf(x: number, y: number): FaceDirection {
|
||||
|
||||
//#region 有向图构建
|
||||
|
||||
/**
|
||||
* 寻路有向图构建器接口,声明图构建的绑定槽位与构建入口
|
||||
*/
|
||||
export interface IPathfindingGraphBuilder {
|
||||
/**
|
||||
* 绑定地图状态对象,用于解析图层所属楼层 id
|
||||
* @param maps 地图状态对象,传入 `null` 解绑
|
||||
*/
|
||||
useMapState(maps: IMapState | null): void;
|
||||
|
||||
/**
|
||||
* 绑定构建有向图所用的地图图层
|
||||
* @param layer 地图图层对象,传入 `null` 解绑
|
||||
*/
|
||||
useMapLayer(layer: IMapLayer | null): void;
|
||||
|
||||
/**
|
||||
* 注入判定边可行性的通行性谓词
|
||||
* @param predicate 通行性谓词,传入 `null` 解绑
|
||||
*/
|
||||
usePassPredicate(predicate: IPassPredicate | null): void;
|
||||
|
||||
/**
|
||||
* 设置邻域使用的方向组
|
||||
* @param group 朝向组
|
||||
*/
|
||||
useDirGroup(group: number): void;
|
||||
|
||||
/**
|
||||
* 构建有向图。图层未绑定时告警并返回空图,
|
||||
* 不包含任何节点与边
|
||||
* @returns 构建的有向图
|
||||
*/
|
||||
build(): IPathGraph;
|
||||
}
|
||||
|
||||
/**
|
||||
* 寻路有向图构建器,将地图图层转换为以通行性谓词判定边的有向图。
|
||||
* 邻域方向由注入的方向组决定,默认仅包含四正交方向;
|
||||
* 谓词未注入时所有边均不可通行
|
||||
*/
|
||||
export class PathfindingGraphBuilder {
|
||||
export class PathfindingGraphBuilder implements IPathfindingGraphBuilder {
|
||||
/** 绑定的地图状态对象,用于解析图层所属楼层 id */
|
||||
private maps: IMapState | null = null;
|
||||
/** 绑定的地图图层,图节点来源 */
|
||||
@ -91,43 +127,22 @@ export class PathfindingGraphBuilder {
|
||||
/** 方向组解析对象 */
|
||||
private readonly mapper: IDirectionMapper = new DirectionMapper();
|
||||
|
||||
/**
|
||||
* 绑定地图状态对象,用于解析楼层 id
|
||||
* @param maps 地图状态对象,传入 `null` 解绑
|
||||
*/
|
||||
useMapState(maps: IMapState | null): void {
|
||||
this.maps = maps;
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定构建有向图所用的地图图层
|
||||
* @param layer 地图图层对象,传入 `null` 解绑
|
||||
*/
|
||||
useMapLayer(layer: IMapLayer | null): void {
|
||||
this.layer = layer;
|
||||
}
|
||||
|
||||
/**
|
||||
* 注入判定边可行性的通行性谓词
|
||||
* @param predicate 通行性谓词,传入 `null` 解绑
|
||||
*/
|
||||
usePassPredicate(predicate: IPassPredicate | null): void {
|
||||
this.predicate = predicate;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置邻域使用的方向组
|
||||
* @param group 朝向组
|
||||
*/
|
||||
useDirGroup(group: number): void {
|
||||
this.group = group;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建有向图。图层未绑定时告警并返回空图,
|
||||
* 不包含任何节点与边
|
||||
* @returns 构建的有向图
|
||||
*/
|
||||
build(): IPathGraph {
|
||||
const layer = this.layer;
|
||||
if (isNil(layer)) {
|
||||
|
||||
@ -218,7 +218,10 @@ interface SystemFixture {
|
||||
* 创建测试用移动对象,移动器由工厂注入
|
||||
*/
|
||||
function createTestTile(): TestTile {
|
||||
class TestMover extends modules.ObjectMover<TestTile> {
|
||||
class TestMover
|
||||
extends modules.ObjectMover<TestTile>
|
||||
implements IObjectMover<TestTile>
|
||||
{
|
||||
readonly tile: TestTile;
|
||||
|
||||
constructor(tile: TestTile) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user