phaser-navmesh
Version:
A plugin for Phaser (v3) for fast pathfinding using navigation meshes
72 lines • 3.2 kB
TypeScript
import NavPoly from "./navpoly";
import Vector2 from "./math/vector-2";
import { Point, PolyPoints } from "./common-types";
/**
* The `NavMesh` class is the workhorse that represents a navigation mesh built from a series of
* polygons. Once built, the mesh can be asked for a path from one point to another point. Some
* internal terminology usage:
* - neighbor: a polygon that shares part of an edge with another polygon
* - portal: when two neighbor's have edges that overlap, the portal is the overlapping line segment
* - channel: the path of polygons from starting point to end point
* - pull the string: run the funnel algorithm on the channel so that the path hugs the edges of the
* channel. Equivalent to having a string snaking through a hallway and then pulling it taut.
*/
export default class NavMesh {
private meshShrinkAmount;
private navPolygons;
private graph;
/**
* @param meshPolygonPoints Array where each element is an array of point-like objects that
* defines a polygon.
* @param meshShrinkAmount The amount (in pixels) that the navmesh has been shrunk around
* obstacles (a.k.a the amount obstacles have been expanded).
*/
constructor(meshPolygonPoints: PolyPoints[], meshShrinkAmount?: number);
/**
* Get the NavPolys that are in this navmesh.
*/
getPolygons(): NavPoly[];
/**
* Cleanup method to remove references.
*/
destroy(): void;
/**
* Find if the given point is within any of the polygons in the mesh.
* @param point
*/
isPointInMesh(point: Point): boolean;
/**
* Find the closest point in the mesh to the given point. If the point is already in the mesh,
* this will give you that point. If the point is outside of the mesh, this will attempt to
* project this point into the mesh (up to the given maxAllowableDist). This returns an object
* with:
* - distance - from the given point to the mesh
* - polygon - the one the point is closest to, or null
* - point - the point inside the mesh, or null
* @param point
* @param maxAllowableDist
*/
findClosestMeshPoint(point: Vector2, maxAllowableDist?: number): {
distance: number;
polygon: NavPoly | null;
point: Point | null;
};
/**
* Find a path from the start point to the end point using this nav mesh.
* @param {object} startPoint A point-like object in the form {x, y}
* @param {object} endPoint A point-like object in the form {x, y}
* @returns {Vector2[]|null} An array of points if a path is found, or null if no path
*/
findPath(startPoint: Point, endPoint: Point): Vector2[] | null;
private calculateNeighbors;
private getSegmentOverlap;
/**
* Project a point onto a polygon in the shortest distance possible.
*
* @param {Phaser.Point} point The point to project
* @param {NavPoly} navPoly The navigation polygon to test against
* @returns {{point: Phaser.Point, distance: number}}
*/
private projectPointToPolygon;
}
//# sourceMappingURL=navmesh.d.ts.map