feat: 完成寻路系统接口设计

This commit is contained in:
unanmed 2026-09-09 16:40:56 +08:00
parent 67c0806f7f
commit 7a011b29c2
3 changed files with 157 additions and 12 deletions

View File

@ -13,6 +13,7 @@ import {
IObjectMover,
ISaveableContent
} from '@user/data-common';
import { IPassPredicate } from '../map';
//#region 勇士属性
@ -300,6 +301,11 @@ export interface IHeroMoveTopHandler extends IDataCommonExtended {
}
export interface IHeroMoveTopImpl {
/**
*
*/
predicate(): IPassPredicate;
/**
*
* @param x
@ -308,18 +314,6 @@ export interface IHeroMoveTopImpl {
*/
inBound(x: number, y: number, floorId: string | undefined): boolean;
/**
*
* @param handler
*/
canPass(handler: IHeroMoveTopHandler): boolean;
/**
*
* @param handler
*/
shouldHit(handler: IHeroMoveTopHandler): boolean;
/**
*
* @param handler

View File

@ -889,3 +889,32 @@ export interface IMapState
}
//#endregion
//#region 通行检测
export interface IPassCheckHandler extends IDataCommonExtended {
/** 当前位置 */
readonly currLoc: ITileLocator;
/** 要移动至的位置 */
readonly nextLoc: ITileLocator;
/** 移动方向 */
readonly direction: FaceDirection;
/** 当前楼层 id */
readonly floorId: string | undefined;
}
export interface IPassPredicate {
/**
*
* @param handler
*/
canPass(handler: IPassCheckHandler): boolean;
/**
*
* @param handler
*/
shouldHit(handler: IPassCheckHandler): boolean;
}
//#endregion

View File

@ -0,0 +1,122 @@
import { ITileLocator } from '@motajs/common';
import {
IDataBaseExtended,
ILayerLocation,
IMapLayer,
IMapState,
IPassPredicate
} from '@user/data-base';
import {
FaceDirection,
IMoverController,
IObjectMovable
} from '@user/data-common';
export interface IPathfindingStep {
/** 移动方向 */
readonly dir: FaceDirection;
/** 这一步的出发位置 */
readonly from: Readonly<ITileLocator>;
/** 这一步移动到的位置 */
readonly to: Readonly<ITileLocator>;
}
export interface IPathfindingController {
/** 移动控制器对象 */
readonly controller: Readonly<IMoverController>;
/** 寻路路径 */
readonly path: readonly IPathfindingStep[];
}
/**
*
* @param block
*/
export type PathCostFunction = (block: ILayerLocation) => number;
/**
* 退 `true`
* @param path
*/
export type PathFallbackPolicy = (path: readonly IPathfindingStep[]) => boolean;
export interface IPathfinder extends IDataBaseExtended {
/**
*
* @param maps
*/
useMapState(maps: IMapState | null): void;
/**
*
* @param layer
*/
useMapLayer(layer: IMapLayer | null): void;
/**
* 1
* @param cost
*/
useCostFunction(cost: PathCostFunction | null): void;
/**
*
* @param predicate
*/
usePassPredicate(predicate: IPassPredicate | null): void;
/**
* 使
* @param group
*/
useDirGroup(group: number): void;
/**
*
* @param start
* @param target
*/
find(start: ITileLocator, target: ITileLocator): IPathfindingStep[];
}
export interface IPathfindingSystem extends IDataBaseExtended {
/** 寻路求解器 */
readonly finder: IPathfinder;
/**
* `IObjectMovable`
* @param movable
*/
useMovable(movable: IObjectMovable | null): void;
/**
* 退退
* @param policy 退
*/
useFallbackPolicy(policy: PathFallbackPolicy | null): void;
/**
*
* @param target
*/
getPath(target: ITileLocator): IPathfindingStep[];
/**
*
* @param target
* @returns `null`
*/
moveTo(target: ITileLocator): IPathfindingController;
/**
* 退退退
* @param target
* @returns `null`
*/
teleportTo(target: ITileLocator): IPathfindingController;
/**
*
*/
interrupt(): Promise<void>;
}