Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hackergrrl/behaviortree-sexp
A S-expression parser for behaviour trees.
https://github.com/hackergrrl/behaviortree-sexp
Last synced: 20 days ago
JSON representation
A S-expression parser for behaviour trees.
- Host: GitHub
- URL: https://github.com/hackergrrl/behaviortree-sexp
- Owner: hackergrrl
- License: mit
- Created: 2015-04-26T04:00:29.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2015-04-26T04:36:03.000Z (over 9 years ago)
- Last Synced: 2024-10-28T06:00:21.568Z (23 days ago)
- Language: JavaScript
- Homepage:
- Size: 141 KB
- Stars: 5
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard)
# behaviortree-sexp
Parses S-expressions to create ready-to-go
[`behaviourtree`](https://github.com/Calamari/BehaviorTree.js) behaviour trees.# background
This module's purpose may not be obvious if you aren't already familiar with
both Behaviour Trees and the
[`behaviourtree`](https://github.com/Calamari/BehaviorTree.js) module.Behaviour trees are a flexible tool for, amongst other things, video game AI.
For some reading on the subject, try [Tamas Jano's
introduction](http://obviam.net/index.php/game-ai-an-introduction-to-behavior-trees/).In particular, this module allows you to specify behaviour trees as ubiquitous
[S-expressions](http://en.wikipedia.org/wiki/S-expression), which are then
transformed into `BehaviorTree` objects fully compatible with
[`behaviourtree`](https://github.com/Calamari/BehaviorTree.js).# example
```
var btree = require('behaviortree')
var btree_sexp = require('behaviortree_sexp')var expr = '(sequence (beep) (beep))'
btree.register('beep', new btree.Task({
run: function(obj) {
console.log('beep')
this.success()
}
}))var tree = btsexp(expr)
tree.step()
```outputs
```
beep
beep
```# built-in nodes
## succeed
Always returns success.
```
(succeed)
```## invert
Makes its successful node fail and its failed node succeed.
```
(invert (succeed))
```## sequence
Processes nodes in sequence. Succeeds only if all nodes succeed. Equivalent to
logical AND.```
(sequence (succeed) (invert succeed) (succeed))
```This will only run the first two nodes.
## selector
Processes nodes in sequence. Succeeds and returns immediately as soon as one
node succeeds. Equivalent to logical OR.```
(selector (invert succeed) (succeed) (succeed))
```This will only run the first two nodes.
## random
Chooses a node at random.
```
(random (beep) (boop))
```This will run exactly one of `beep` or `boop`.
## your own!
You can register your own nodes via `btree.register(name, task)` which will then
be available automatically in your S-expressions. See the above example.# contribute
Please do! File an issue or pull request. Stay consistent with the
[`standard`](https://github.com/feross/standard).# license
MIT