API Documentation for:
Show:

File:Decorator.js

import BaseNode from './BaseNode';
import {DECORATOR} from '../constants';

/**
 * Decorator is the base class for all decorator nodes. Thus, if you want to
 * create new custom decorator nodes, you need to inherit from this class.
 *
 * When creating decorator nodes, you will need to propagate the tick signal
 * to the child node manually, just like the composite nodes. To do that,
 * override the `tick` method and call the `_execute` method on the child
 * node. For instance, take a look at how the Inverter node inherit this
 * class and how it call its children:
 *
 *     // Inherit from Decorator, using the util function Class.
 *     class Inverter extends b3.Decorator {
 *       
 *       constructor(){
 *         super({name: 'Invereter'});
 *       }
 *
 *       tick: function(tick) {
 *         if (!this.child) {
 *           return b3.ERROR;
 *         }
 *
 *         // Propagate the tick
 *         var status = this.child._execute(tick);
 *
 *         if (status === b3.SUCCESS) {
 *           status = b3.FAILURE;
 *         } else if (status === b3.FAILURE) {
 *           status = b3.SUCCESS;
 *         }
 *
 *         return status;
 *       }
 *     });
 *
 * @module b3
 * @class Decorator
 * @extends BaseNode
 **/

export default class Decorator extends BaseNode {

  /**
   * Creates an instance of Decorator.
   * @param {Object} options 
   * @param {String} options.name Node name. Default to `Decorator`.
   * @param {String} options.title 
   * @param {Object} options.properties 
   * @memberof Decorator
   */
  constructor({child = null, name = 'Decorator', title, properties} = {}) {
    super({
      category: DECORATOR,
      name,
      title,
      properties,
    });
    this.child = child;
  }

};