babylon-steering
Version:
Steering behaviours library for Babylon.js
105 lines (71 loc) • 2.99 kB
Markdown
# BABYLON-STEERING



## What is
A steering behaviors library for [Babylon.js](https://www.babylonjs.com/) for moving entities in the x/z plane. The library was born thanks to these [tutorials](https://gamedevelopment.tutsplus.com/series/understanding-steering-behaviors--gamedev-12732) and the library [three-steer](https://github.com/erosmarcon/three-steer).
The following behavious are supported:
* Seek, Seek with Arrive and Attract (Seek with intensity)
* Flee
* Arrive
* Pursue
* Evade
* Interpose
* Wander
* Collision Avoidance
* Follow Path
* Follow Leader
* Queue
* Cohesion, separation and alignment (Flocking)
* Hide
* Apply general force
Steering Entities can:
* look at a specific target with the .lookAt() method
* look where they are going with the .lookWhereGoing() method
## How to setup
Include `babylon-steering` library:
```javascript
import babylon-steering from 'babylon-steering';
```
Create a basic Babylon.js 3D scene with a mesh and simply instantiate a Steering Entity:
```javascript
const redSphere = new SteeringVehicle(my_mesh, engine, option);
```
Add the behavior/s to the steering entity and the update method inside main render/animation loop:
```javascript
scene.executeWhenReady(function () {
engine.runRenderLoop(function () {
my_mesh
.seekWithArrive(greenTarget, 50)
.hasInConeOfView(arrayOfEnemies)
.avoid(obstacleIstances)
.applyForce(new BABYLON.Vector3(1, 0, 0.75)) // For istance can be WIND...
.lookWhereGoing(true);
my_mesh.animate(); // Update the Steering Vehicle
scene.render();
});
});
```
# Combine behaviours
It is possible to combine many simultaneous steering forces by passing the following parameters to the `.animate()` function according to the four methods described in this [bog post](https://alastaira.wordpress.com/2013/03/13/methods-for-combining-autonomous-steering-behaviours/):
* `priority` for Priority Arbitration
* `weighted` for Weighted Blending,
* `probability` for 'Prioritised Dithering'
* `truncated` for 'Weighted Prioritised Truncated Sum'
```javascript
blueSphere.animate('blend'); // 'blend' 'priority' 'probability' 'truncated'
```
## Examples
To test some examples just:
```bash
# 1)istall dependencies
npm install
# 2)run development server serving static demo pages at localhost:4000
npm start
```
## Bugs
- Uhm...let me know!
## Built With
ES6 Javascript, [microbundle](https://github.com/developit/microbundle),
## License
This project is licensed under the ISC License.