From 8be01226288512b2a5f74f7545fe73d0b0f3dd84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B8=E9=A9=AC=E5=A5=94=E8=85=BE?= Date: Thu, 23 Dec 2021 22:31:55 +0800 Subject: [PATCH] Add close function into BehaviorTree class. --- src/core/BehaviorTree.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/core/BehaviorTree.js b/src/core/BehaviorTree.js index e6438d7..12e75cf 100644 --- a/src/core/BehaviorTree.js +++ b/src/core/BehaviorTree.js @@ -332,4 +332,35 @@ export default class BehaviorTree { return state; } + + /** + * Close all open nodes to ensure close function in nodes be called. + * If stop running tree tick via external, call this function. + * @param target + * @param blackboard + * @returns {*} + */ + close(target, blackboard) { + if (!blackboard) { + throw 'The blackboard parameter is obligatory and must be an ' + + 'instance of b3.Blackboard'; + } + + /* CREATE A TICK OBJECT */ + var tick = new Tick(); + tick.debug = this.debug; + tick.target = target; + tick.blackboard = blackboard; + tick.tree = this; + + /* CLOSE ALL OPEN NODES */ + var lastOpenNodes = blackboard.get('openNodes', this.id); + for (var i = 0; i < lastOpenNodes.length; i++) { + lastOpenNodes[i]._close(tick); + } + + /* POPULATE BLACKBOARD */ + blackboard.set('openNodes', tick._openNodes.slice(0), this.id); + blackboard.set('nodeCount', tick._nodeCount, this.id); + } };