bhive
Version:
Behavior Tree for Javascript
156 lines (113 loc) • 23.5 kB
HTML
<html lang="en">
<head>
<meta charset="utf-8">
<title>decorators/UntilFailure.js - Documentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
<script src="scripts/nav.js" defer></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav >
<input type="text" id="nav-search" placeholder="Search" />
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="AsyncTask.html">AsyncTask</a><ul class='methods'><li data-type='method' style='display: none;'><a href="AsyncTask.html#_close">_close</a></li><li data-type='method' style='display: none;'><a href="AsyncTask.html#_enter">_enter</a></li><li data-type='method' style='display: none;'><a href="AsyncTask.html#_exit">_exit</a></li><li data-type='method' style='display: none;'><a href="AsyncTask.html#_open">_open</a></li><li data-type='method' style='display: none;'><a href="AsyncTask.html#_run">_run</a></li><li data-type='method' style='display: none;'><a href="AsyncTask.html#_tick">_tick</a></li><li data-type='method' style='display: none;'><a href="AsyncTask.html#close">close</a></li><li data-type='method' style='display: none;'><a href="AsyncTask.html#enter">enter</a></li><li data-type='method' style='display: none;'><a href="AsyncTask.html#exit">exit</a></li><li data-type='method' style='display: none;'><a href="AsyncTask.html#open">open</a></li><li data-type='method' style='display: none;'><a href="AsyncTask.html#tick">tick</a></li></ul></li><li><a href="BaseComposite.html">BaseComposite</a><ul class='methods'><li data-type='method' style='display: none;'><a href="BaseComposite.html#_close">_close</a></li><li data-type='method' style='display: none;'><a href="BaseComposite.html#_enter">_enter</a></li><li data-type='method' style='display: none;'><a href="BaseComposite.html#_exit">_exit</a></li><li data-type='method' style='display: none;'><a href="BaseComposite.html#_open">_open</a></li><li data-type='method' style='display: none;'><a href="BaseComposite.html#_run">_run</a></li><li data-type='method' style='display: none;'><a href="BaseComposite.html#_tick">_tick</a></li><li data-type='method' style='display: none;'><a href="BaseComposite.html#close">close</a></li><li data-type='method' style='display: none;'><a href="BaseComposite.html#enter">enter</a></li><li data-type='method' style='display: none;'><a href="BaseComposite.html#exit">exit</a></li><li data-type='method' style='display: none;'><a href="BaseComposite.html#open">open</a></li><li data-type='method' style='display: none;'><a href="BaseComposite.html#run">run</a></li><li data-type='method' style='display: none;'><a href="BaseComposite.html#tick">tick</a></li></ul></li><li><a href="BaseDecorator.html">BaseDecorator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="BaseDecorator.html#_close">_close</a></li><li data-type='method' style='display: none;'><a href="BaseDecorator.html#_enter">_enter</a></li><li data-type='method' style='display: none;'><a href="BaseDecorator.html#_exit">_exit</a></li><li data-type='method' style='display: none;'><a href="BaseDecorator.html#_open">_open</a></li><li data-type='method' style='display: none;'><a href="BaseDecorator.html#_run">_run</a></li><li data-type='method' style='display: none;'><a href="BaseDecorator.html#_tick">_tick</a></li><li data-type='method' style='display: none;'><a href="BaseDecorator.html#close">close</a></li><li data-type='method' style='display: none;'><a href="BaseDecorator.html#enter">enter</a></li><li data-type='method' style='display: none;'><a href="BaseDecorator.html#exit">exit</a></li><li data-type='method' style='display: none;'><a href="BaseDecorator.html#open">open</a></li><li data-type='method' style='display: none;'><a href="BaseDecorator.html#run">run</a></li><li data-type='method' style='display: none;'><a href="BaseDecorator.html#tick">tick</a></li></ul></li><li><a href="BaseNode.html">BaseNode</a><ul class='methods'><li data-type='method' style='display: none;'><a href="BaseNode.html#_close">_close</a></li><li data-type='method' style='display: none;'><a href="BaseNode.html#_enter">_enter</a></li><li data-type='method' style='display: none;'><a href="BaseNode.html#_exit">_exit</a></li><li data-type='method' style='display: none;'><a href="BaseNode.html#_open">_open</a></li><li data-type='method' style='display: none;'><a href="BaseNode.html#_run">_run</a></li><li data-type='method' style='display: none;'><a href="BaseNode.html#_tick">_tick</a></li><li data-type='method' style='display: none;'><a href="BaseNode.html#close">close</a></li><li data-type='method' style='display: none;'><a href="BaseNode.html#enter">enter</a></li><li data-type='method' style='display: none;'><a href="BaseNode.html#exit">exit</a></li><li data-type='method' style='display: none;'><a href="BaseNode.html#open">open</a></li><li data-type='method' style='display: none;'><a href="BaseNode.html#run">run</a></li><li data-type='method' style='display: none;'><a href="BaseNode.html#tick">tick</a></li></ul></li><li><a href="BehaviorTree.html">BehaviorTree</a><ul class='methods'><li data-type='method' style='display: none;'><a href="BehaviorTree.html#tick">tick</a></li></ul></li><li><a href="Board.html">Board</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Board.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Board.html#get">get</a></li><li data-type='method' style='display: none;'><a href="Board.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Board.html#set">set</a></li><li data-type='method' style='display: none;'><a href="Board.html#toJSON">toJSON</a></li><li data-type='method' style='display: none;'><a href="Board.html#unset">unset</a></li></ul></li><li><a href="Inverter.html">Inverter</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Inverter.html#_close">_close</a></li><li data-type='method' style='display: none;'><a href="Inverter.html#_enter">_enter</a></li><li data-type='method' style='display: none;'><a href="Inverter.html#_exit">_exit</a></li><li data-type='method' style='display: none;'><a href="Inverter.html#_open">_open</a></li><li data-type='method' style='display: none;'><a href="Inverter.html#_run">_run</a></li><li data-type='method' style='display: none;'><a href="Inverter.html#_tick">_tick</a></li><li data-type='method' style='display: none;'><a href="Inverter.html#close">close</a></li><li data-type='method' style='display: none;'><a href="Inverter.html#enter">enter</a></li><li data-type='method' style='display: none;'><a href="Inverter.html#exit">exit</a></li><li data-type='method' style='display: none;'><a href="Inverter.html#open">open</a></li><li data-type='method' style='display: none;'><a href="Inverter.html#run">run</a></li><li data-type='method' style='display: none;'><a href="Inverter.html#tick">tick</a></li></ul></li><li><a href="Logger.html">Logger</a></li><li></li><li><a href="module-BlackBoard-Blackboard.html">Blackboard</a><ul class='methods'><li data-type='method' style='display: none;'><a href="module-BlackBoard-Blackboard.html#createTree">createTree</a></li><li data-type='method' style='display: none;'><a href="module-BlackBoard-Blackboard.html#get">get</a></li><li data-type='method' style='display: none;'><a href="module-BlackBoard-Blackboard.html#listTree">listTree</a></li><li data-type='method' style='display: none;'><a href="module-BlackBoard-Blackboard.html#removeTree">removeTree</a></li><li data-type='method' style='display: none;'><a href="module-BlackBoard-Blackboard.html#set">set</a></li><li data-type='method' style='display: none;'><a href="module-BlackBoard-Blackboard.html#toJSON">toJSON</a></li><li data-type='method' style='display: none;'><a href="module-BlackBoard-Blackboard.html#tree">tree</a></li></ul></li><li></li><li><a href="module-Context-Context.html">Context</a><ul class='methods'><li data-type='method' style='display: none;'><a href="module-Context-Context.html#closeNode">closeNode</a></li><li data-type='method' style='display: none;'><a href="module-Context-Context.html#enterNode">enterNode</a></li><li data-type='method' style='display: none;'><a href="module-Context-Context.html#exitNode">exitNode</a></li><li data-type='method' style='display: none;'><a href="module-Context-Context.html#openNode">openNode</a></li><li data-type='method' style='display: none;'><a href="module-Context-Context.html#runNode">runNode</a></li></ul></li><li><a href="NodeBoard.html">NodeBoard</a></li><li><a href="Priority.html">Priority</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Priority.html#_close">_close</a></li><li data-type='method' style='display: none;'><a href="Priority.html#_enter">_enter</a></li><li data-type='method' style='display: none;'><a href="Priority.html#_exit">_exit</a></li><li data-type='method' style='display: none;'><a href="Priority.html#_open">_open</a></li><li data-type='method' style='display: none;'><a href="Priority.html#_run">_run</a></li><li data-type='method' style='display: none;'><a href="Priority.html#_tick">_tick</a></li><li data-type='method' style='display: none;'><a href="Priority.html#close">close</a></li><li data-type='method' style='display: none;'><a href="Priority.html#enter">enter</a></li><li data-type='method' style='display: none;'><a href="Priority.html#exit">exit</a></li><li data-type='method' style='display: none;'><a href="Priority.html#open">open</a></li><li data-type='method' style='display: none;'><a href="Priority.html#run">run</a></li><li data-type='method' style='display: none;'><a href="Priority.html#tick">tick</a></li></ul></li><li></li><li><a href="Registry.html">Registry</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Registry.html#getNode">getNode</a></li><li data-type='method' style='display: none;'><a href="Registry.html#getNodeTypes">getNodeTypes</a></li><li data-type='method' style='display: none;'><a href="Registry.html#merge">merge</a></li><li data-type='method' style='display: none;'><a href="Registry.html#register">register</a></li></ul></li><li></li><li><a href="Repeater.html">Repeater</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Repeater.html#open">open</a></li><li data-type='method' style='display: none;'><a href="Repeater.html#run">run</a></li></ul></li><li><a href="RewindWhenFailure.html">RewindWhenFailure</a><ul class='methods'><li data-type='method' style='display: none;'><a href="RewindWhenFailure.html#_close">_close</a></li><li data-type='method' style='display: none;'><a href="RewindWhenFailure.html#_enter">_enter</a></li><li data-type='method' style='display: none;'><a href="RewindWhenFailure.html#_exit">_exit</a></li><li data-type='method' style='display: none;'><a href="RewindWhenFailure.html#_open">_open</a></li><li data-type='method' style='display: none;'><a href="RewindWhenFailure.html#_run">_run</a></li><li data-type='method' style='display: none;'><a href="RewindWhenFailure.html#_tick">_tick</a></li><li data-type='method' style='display: none;'><a href="RewindWhenFailure.html#close">close</a></li><li data-type='method' style='display: none;'><a href="RewindWhenFailure.html#enter">enter</a></li><li data-type='method' style='display: none;'><a href="RewindWhenFailure.html#exit">exit</a></li><li data-type='method' style='display: none;'><a href="RewindWhenFailure.html#open">open</a></li><li data-type='method' style='display: none;'><a href="RewindWhenFailure.html#run">run</a></li><li data-type='method' style='display: none;'><a href="RewindWhenFailure.html#tick">tick</a></li></ul></li><li><a href="RewindWhenRunning.html">RewindWhenRunning</a><ul class='methods'><li data-type='method' style='display: none;'><a href="RewindWhenRunning.html#_close">_close</a></li><li data-type='method' style='display: none;'><a href="RewindWhenRunning.html#_enter">_enter</a></li><li data-type='method' style='display: none;'><a href="RewindWhenRunning.html#_exit">_exit</a></li><li data-type='method' style='display: none;'><a href="RewindWhenRunning.html#_open">_open</a></li><li data-type='method' style='display: none;'><a href="RewindWhenRunning.html#_run">_run</a></li><li data-type='method' style='display: none;'><a href="RewindWhenRunning.html#_tick">_tick</a></li><li data-type='method' style='display: none;'><a href="RewindWhenRunning.html#close">close</a></li><li data-type='method' style='display: none;'><a href="RewindWhenRunning.html#enter">enter</a></li><li data-type='method' style='display: none;'><a href="RewindWhenRunning.html#exit">exit</a></li><li data-type='method' style='display: none;'><a href="RewindWhenRunning.html#open">open</a></li><li data-type='method' style='display: none;'><a href="RewindWhenRunning.html#run">run</a></li><li data-type='method' style='display: none;'><a href="RewindWhenRunning.html#tick">tick</a></li></ul></li><li><a href="Sequence.html">Sequence</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Sequence.html#_close">_close</a></li><li data-type='method' style='display: none;'><a href="Sequence.html#_enter">_enter</a></li><li data-type='method' style='display: none;'><a href="Sequence.html#_exit">_exit</a></li><li data-type='method' style='display: none;'><a href="Sequence.html#_open">_open</a></li><li data-type='method' style='display: none;'><a href="Sequence.html#_run">_run</a></li><li data-type='method' style='display: none;'><a href="Sequence.html#_tick">_tick</a></li><li data-type='method' style='display: none;'><a href="Sequence.html#close">close</a></li><li data-type='method' style='display: none;'><a href="Sequence.html#enter">enter</a></li><li data-type='method' style='display: none;'><a href="Sequence.html#exit">exit</a></li><li data-type='method' style='display: none;'><a href="Sequence.html#open">open</a></li><li data-type='method' style='display: none;'><a href="Sequence.html#run">run</a></li><li data-type='method' style='display: none;'><a href="Sequence.html#tick">tick</a></li></ul></li><li><a href="Task.html">Task</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Task.html#_close">_close</a></li><li data-type='method' style='display: none;'><a href="Task.html#_enter">_enter</a></li><li data-type='method' style='display: none;'><a href="Task.html#_exit">_exit</a></li><li data-type='method' style='display: none;'><a href="Task.html#_open">_open</a></li><li data-type='method' style='display: none;'><a href="Task.html#_run">_run</a></li><li data-type='method' style='display: none;'><a href="Task.html#_tick">_tick</a></li><li data-type='method' style='display: none;'><a href="Task.html#close">close</a></li><li data-type='method' style='display: none;'><a href="Task.html#enter">enter</a></li><li data-type='method' style='display: none;'><a href="Task.html#exit">exit</a></li><li data-type='method' style='display: none;'><a href="Task.html#open">open</a></li><li data-type='method' style='display: none;'><a href="Task.html#tick">tick</a></li></ul></li><li></li><li><a href="TreeBoard.html">TreeBoard</a><ul class='methods'><li data-type='method' style='display: none;'><a href="TreeBoard.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="TreeBoard.html#createNode">createNode</a></li><li data-type='method' style='display: none;'><a href="TreeBoard.html#gc">gc</a></li><li data-type='method' style='display: none;'><a href="TreeBoard.html#get">get</a></li><li data-type='method' style='display: none;'><a href="TreeBoard.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="TreeBoard.html#listNode">listNode</a></li><li data-type='method' style='display: none;'><a href="TreeBoard.html#node">node</a></li><li data-type='method' style='display: none;'><a href="TreeBoard.html#removeNode">removeNode</a></li><li data-type='method' style='display: none;'><a href="TreeBoard.html#set">set</a></li><li data-type='method' style='display: none;'><a href="TreeBoard.html#toJSON">toJSON</a></li><li data-type='method' style='display: none;'><a href="TreeBoard.html#unset">unset</a></li></ul></li><li><a href="TreeBuilder.html">TreeBuilder</a></li><li></li><li><a href="UntilFailure.html">UntilFailure</a><ul class='methods'><li data-type='method' style='display: none;'><a href="UntilFailure.html#_close">_close</a></li><li data-type='method' style='display: none;'><a href="UntilFailure.html#_enter">_enter</a></li><li data-type='method' style='display: none;'><a href="UntilFailure.html#_exit">_exit</a></li><li data-type='method' style='display: none;'><a href="UntilFailure.html#_open">_open</a></li><li data-type='method' style='display: none;'><a href="UntilFailure.html#_run">_run</a></li><li data-type='method' style='display: none;'><a href="UntilFailure.html#_tick">_tick</a></li><li data-type='method' style='display: none;'><a href="UntilFailure.html#close">close</a></li><li data-type='method' style='display: none;'><a href="UntilFailure.html#enter">enter</a></li><li data-type='method' style='display: none;'><a href="UntilFailure.html#exit">exit</a></li><li data-type='method' style='display: none;'><a href="UntilFailure.html#open">open</a></li><li data-type='method' style='display: none;'><a href="UntilFailure.html#run">run</a></li><li data-type='method' style='display: none;'><a href="UntilFailure.html#tick">tick</a></li></ul></li><li><a href="UntilSuccess.html">UntilSuccess</a><ul class='methods'><li data-type='method' style='display: none;'><a href="UntilSuccess.html#_close">_close</a></li><li data-type='method' style='display: none;'><a href="UntilSuccess.html#_enter">_enter</a></li><li data-type='method' style='display: none;'><a href="UntilSuccess.html#_exit">_exit</a></li><li data-type='method' style='display: none;'><a href="UntilSuccess.html#_open">_open</a></li><li data-type='method' style='display: none;'><a href="UntilSuccess.html#_run">_run</a></li><li data-type='method' style='display: none;'><a href="UntilSuccess.html#_tick">_tick</a></li><li data-type='method' style='display: none;'><a href="UntilSuccess.html#close">close</a></li><li data-type='method' style='display: none;'><a href="UntilSuccess.html#enter">enter</a></li><li data-type='method' style='display: none;'><a href="UntilSuccess.html#exit">exit</a></li><li data-type='method' style='display: none;'><a href="UntilSuccess.html#open">open</a></li><li data-type='method' style='display: none;'><a href="UntilSuccess.html#run">run</a></li><li data-type='method' style='display: none;'><a href="UntilSuccess.html#tick">tick</a></li></ul></li></ul><h3>Modules</h3><ul><li><a href="module-BlackBoard.html">BlackBoard</a></li><li><a href="module-Context.html">Context</a></li></ul><h3>Tutorials</h3><ul><li><a href="tutorial-blackboard.html">Blackboard</a></li></ul><h3>Global</h3><ul><li><a href="global.html#BehaviorTreeOptions">BehaviorTreeOptions</a></li><li><a href="global.html#Constant">Constant</a></li><li><a href="global.html#defaultBehaviorTreeOptions">defaultBehaviorTreeOptions</a></li><li><a href="global.html#LogFunction">LogFunction</a></li><li><a href="global.html#NodeCategory">NodeCategory</a></li><li><a href="global.html#NodeData">NodeData</a></li><li><a href="global.html#NodeDefinition">NodeDefinition</a></li><li><a href="global.html#NodeId">NodeId</a></li><li><a href="global.html#NodeStatus">NodeStatus</a></li><li><a href="global.html#NodeType">NodeType</a></li><li><a href="global.html#Registers">Registers</a></li><li><a href="global.html#severities">severities</a></li><li><a href="global.html#SYSLOG_LEVEL">SYSLOG_LEVEL</a></li><li><a href="global.html#TreeDefinition">TreeDefinition</a></li><li><a href="global.html#workerConfig">workerConfig</a></li></ul>
</nav>
<div id="main">
<h1 class="page-title">decorators/UntilFailure.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>const BaseDecorator = require('../core/BaseDecorator');
const {SUCCESS, FAILURE, ERROR, RUNNING} = require('../constants');
/**
* Class UntilFailure
* UntilFailure is a decorator that repeats the run signal until the
* node child returns `FAILURE`, `RUNNING` or `ERROR`. Optionally, a maximum
* number of repetitions can be defined.
*
* @extends BaseDecorator
* @category Decorators
**/
class UntilFailure extends BaseDecorator {
/**
* Creates an instance of UntilFailure.
* - **maxLoop** (*Integer*) Maximum number of repetitions. Default to -1 (infinite).
* - **child** (*BaseNode*) The child node.
* @constructor
* @param {object} params - Object with parameters.
* @param {BaseNode} params.child - The child node.
* @param {number} [params.maxLoop=-1] - Maximum number of repetitions.
* Default to -1 (infinite).
**/
constructor({maxLoop = -1, child = null} = {}) {
super({
child,
type: 'UntilFailure',
name: 'Until Failure',
properties: {maxLoop: -1},
});
this.maxLoop = maxLoop;
}
/**
* Open method.
* @param {Context} context A run instance.
**/
open(context) {
context.treeBoard.node(this.id).set('i', 0);
}
/**
* Context method.
* @param {Context} context A run instance.
* @return {Constant} A state constant.
**/
run(context) {
if (!this.child) {
return ERROR;
}
let i = context.treeBoard.node(this.id).get('i');
let childStatus = RUNNING;
if (this.maxLoop < 0 || i < this.maxLoop) {
childStatus = this.child.tick(context);
if (childStatus === SUCCESS) {
i++;
} else if (childStatus === RUNNING) {
return RUNNING;
} else if (childStatus === FAILURE) {
// end condition
return SUCCESS;
} else {
return ERROR;
}
} else if (i >= this.maxLoop) {
return SUCCESS;
}
context.treeBoard.node(this.id).set('i', i);
return childStatus;
}
}
module.exports = UntilFailure;
</code></pre>
</article>
</section>
</div>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.6.3</a> on Mon Nov 04 2019 17:31:31 GMT+0900 (Korean Standard Time) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
</footer>
<script>prettyPrint();</script>
<script src="scripts/polyfill.js"></script>
<script src="scripts/linenumber.js"></script>
<script src="scripts/search.js" defer></script>
<script src="scripts/collapse.js" defer></script>
</body>
</html>