import { Vector2 } from "three/src/Three"; import type { IEventContainer } from "../../collection/EventContainer"; import type { ReadonlyVector2 } from "../../math/ReadonlyVector2"; import type { IGridCollidable } from "../grid_physics2d/IGridCollidable"; import { Directable } from "../helper/Directable"; import type { IGridPositionable } from "../helper/IGridPositionable"; import type { GridPointer } from "../input/GridPointer"; /** * make gameobject moves on grid coordinates * * supports keyboard wasd and arrow keys input * * supports pathfinding as optional feature * * disallow multiple component */ export declare class PlayerGridMovementController extends Directable implements IGridPositionable { readonly disallowMultipleComponent: boolean; private _speed; private _gridCellHeight; private _gridCellWidth; private readonly _collideMaps; private readonly _collideSize; private readonly _gridCenter; private readonly _currentPosition; private readonly _targetPosition; private readonly _initPosition; private readonly _onMoveToTargetEvent; private readonly _onMovedToTargetEvent; private _gridPointer; private _pathfinder; private _movingByPathfinder; private _foundedPath; private _currentPathIndex; private _pathfindStartFunction; private readonly _cachedParentWorldPosition; private _receiveKeyboardInput; private readonly _tempVector2; private readonly _temp2Vector2; start(): void; update(): void; private processInput; private noncheckProcessInput; private invokeOnMoveToTarget; private invokeOnMovedToTarget; private tryCancelPathfinder; private processPathfinderInput; private processMovement; /** * * @param x local position x * @param y local position y * @returns */ private checkCollision; private _lastPointerDownTime; private readonly _lastPointerDownPosition; private readonly _doubleClickTime; private readonly onPointerDown; private onDoubleClick; /** * try to move to target grid position * @param targetGridPosition * @returns if object already moving by pathfinder return false, * * if object can't move to target grid position return false, * * if object can move to target grid position return true */ tryStartPathfind(targetGridPosition: ReadonlyVector2): boolean; /** * cancel moving by pathfinder */ cancelPathfind(): void; /** * on move to target event position is grid position (integer) */ get onMoveToTarget(): IEventContainer<(x: number, y: number) => void>; /** * on moved to target event position is grid position (integer) */ get onMovedToTarget(): IEventContainer<(x: number, y: number) => void>; /** * teleport to target grid position * @param positionInGrid position in grid coordinates */ teleport(positionInGrid: ReadonlyVector2): void; /** * move speed (default: 8) */ get speed(): number; /** * move speed (default: 8) */ set speed(value: number); /** * grid center position (default: (0, 0)) */ get gridCenter(): ReadonlyVector2; /** * grid center position (default: (0, 0)) */ set gridCenter(value: ReadonlyVector2); /** * grid cell height (default: 1) */ get gridCellHeight(): number; /** * grid cell height (default: 1) */ set gridCellHeight(value: number); /** * grid cell width (default: 1) */ get gridCellWidth(): number; /** * grid cell width (default: 1) */ set gridCellWidth(value: number); /** * initial grid position (default: (0, 0)) * * this option is valid only when evaluated before PlayerGridMovementController.start() */ set initPosition(value: ReadonlyVector2); /** * grid pointer for pathfinding (default: null) */ set gridPointer(value: GridPointer | null); /** * grid pointer for pathfinding (default: null) */ get gridPointer(): GridPointer | null; /** * add collide map for collision detection * @param collideMap */ addCollideMap(collideMap: IGridCollidable): void; /** * remove collide map for collision detection */ removeCollideMap(collideMap: IGridCollidable): void; /** * remove all collide maps for collision detection */ removeAllCollideMaps(): void; /** * set grid cell size and grid center position from grid collide map * @param collideMap */ setGridInfoFromCollideMap(collideMap: IGridCollidable): void; /** * position in grid coordinate(integer value) */ get positionInGrid(): Vector2; /** * receive keyboard input (default: true) * * if set true, this object will receive keyboard w, a, s, d, arrow up, arrow down, arrow left, arrow right input */ get receiveKeyboardInput(): boolean; /** * receive keyboard input (default: true) * * if set true, this object will receive keyboard w, a, s, d, arrow up, arrow down, arrow left, arrow right input */ set receiveKeyboardInput(value: boolean); }