| 305 | } |
| 306 | |
| 307 | void BehaviorTreeSubTreeNode::ReleaseState(const BehaviorUpdateContext& context) |
| 308 | { |
| 309 | auto state = GetState<State>(context.Memory); |
| 310 | const BehaviorTree* tree = Tree.Get(); |
| 311 | if (tree && tree->IsLoaded()) |
| 312 | { |
| 313 | // Override memory with custom one for the subtree |
| 314 | BehaviorUpdateContext subContext = context; |
| 315 | subContext.Memory = state->Memory.Get(); |
| 316 | subContext.RelevantNodes = &state->RelevantNodes; |
| 317 | |
| 318 | for (const auto& node : tree->Graph.Nodes) |
| 319 | { |
| 320 | if (node.Instance && node.Instance->_executionIndex != -1 && state->RelevantNodes.HasItems() && state->RelevantNodes[node.Instance->_executionIndex]) |
| 321 | node.Instance->ReleaseState(subContext); |
| 322 | } |
| 323 | } |
| 324 | state->~State(); |
| 325 | } |
| 326 | |
| 327 | BehaviorUpdateResult BehaviorTreeSubTreeNode::Update(const BehaviorUpdateContext& context) |
| 328 | { |