Warning: this plugin is still heavy Work in Progress (WIP). It's possibly not stable enough for use in a production product - use at your own risk (for now!)
This Phaser plugin generates Navigation Meshes from supplied Phaser.TilemapLayer
data and collison indices thereof. Contains configuration options
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="my/path/to/phaser.js"></script>
<script src="my/path/to/navmesh-plugin.js"></script>
Then in your game's JS code:
preload() {
var plugin = this.game.plugins.add(NavMeshPlugin);
}
- First, we need to generate a new navigation mesh using the following method (options are below)
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
: anArray
of collision indices that your tilemap uses for collisions (required)midPointThreshold
: aNumber
value telling how narrow a navmesh triangle needs to be before it's ignored during pathing (optional; default0
)timingInfo
: Show in the console how long it took to build the NavMesh - and search for paths (optional; defaultfalse
)useMidPoint
: aBoolean
value on whether to include all triangle edge mid-points in calculating triangulation (optional; default:true
)offsetHullsBy
: aNumber
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)
- Then, to find a path between two
Phaser.Point
instances, call:
navMesh.getPath(position, destination, offset);
Params:
position
is aPhaser.Point
of your starting world position (required)destination
is aPhaser.Point
of the destination / end world position (required)offset
is an offset value to keep a distance (optional, default0
)
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, defaulttrue
)
Returns:
- The internal instance of the sprite; includes a
uuid
that can be used for later removal
plugin.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, defaulttrue
)