This Phaser plugin generates Navigation Meshes from supplied Phaser.TilemapLayer
data and collison indices thereof. Contains configuration options
0.2.2
import it as you would any other project:
import NavMeshPlugin from 'phaser-navmesh-generation';
If you're doing it the old fashioned way, simply add <script>
tag after your main Phaser tag:
<script src="https://github.com/amaccann/phaser-navmesh-generation/raw/master/my/path/to/phaser.js"></script>
<script src="https://github.com/amaccann/phaser-navmesh-generation/raw/master/my/path/to/navmesh-plugin.js"></script>
Then in your game's JS code:
preload() {
var plugin = this.game.plugins.add(NavMeshPlugin);
}
var navMesh = plugin.buildFromTileLayer(tileMap, tileLayer, {
collisionIndices: [1, 2, 3],
midPointThreshold: 0,
useMidPoint: false,
debug: {
hulls: false,
navMesh: false,
navMeshNodes: false,
polygonBounds: false,
aStarPath: false
}
});
Params:
collisionIndices
: an Array
of collision indices that your tilemap uses for collisions (required)midPointThreshold
: a Number
value telling how narrow a navmesh triangle needs to be before it's ignored during pathing (optional; default 0
)timingInfo
: Show in the console how long it took to build the NavMesh - and search for paths (optional; default false
)useMidPoint
: a Boolean
value on whether to include all triangle edge mid-points in calculating triangulation (optional; default: true
)offsetHullsBy
: a Number
value to offset (expand) each hull cluster by. Useful to use a small value to prevent excessively parallel edges (optional; default: 0.1
)debug
: various optional debug options to Render the stages of NavMesh calculation:
hulls
: Every (recursive) 'chunk' of impassable tiles found on the tilemapnavMesh
: Draw all the actual triangles generated for this navmeshnavMeshNodes
: Draw all connections found between neighbouring trianglespolygonBounds
: Draw the bonding radius between each navmesh triangleaStarPath
: Draw the aStar path found between points (WIP debug, will remove later) Phaser.Point
instances, call:
navMesh.getPath(position, destination, offset);
Params:
position
is a Phaser.Point
of your starting world position (required)destination
is a Phaser.Point
of the destination / end world position (required)offset
is an offset value to keep a distance (optional, default 0
) This method returns two useful pieces of data:
path
an Array
of Points that is the shortest path to your destination
offsetPath
an Array
containing the offset path, relative to the offset
value given in getPath
const sprite = plugin.addSprite(x, y, width, height, refresh);
Your map may have Sprites that act as impassable areas (houses, trees etc), and you can mark this area of the map using the above method
Params:
x
the Tile X location of the sprite (required)y
the Tile Y location of the sprite (required)width
the Width of the sprite, expressed as tile units (required)height
the Height of the sprite, expressed as tile units (required)refresh
: If you wish the navMesh to be re-calculated after removing the sprite (optional, default true
)Returns:
uuid
that can be used for later removalplugin.removeSprite(uuid, refresh);
Params:
uuid
: the String UUID of the sprite you wish to remove (required)refresh
: If you wish the navMesh to be re-calculated after removing the sprite (optional, default true
)