| 351 | } |
| 352 | |
| 353 | NodeStatus BehaviorState::runDynamic(DynamicNode const& node, NodeState& state) { |
| 354 | if (state.isNothing()) |
| 355 | state.set(CompositeState(node.children.size())); |
| 356 | |
| 357 | CompositeState& composite = state->get<CompositeState>(); |
| 358 | for (size_t i = 0; i <= composite.index; i++) { |
| 359 | auto child = node.children.get(i); |
| 360 | auto status = runNode(*child, *composite.children.get(i)); |
| 361 | if (status == NodeStatus::Failure && i == composite.index) |
| 362 | composite.index++; |
| 363 | |
| 364 | if (i < composite.index && (status == NodeStatus::Success || status == NodeStatus::Running)) { |
| 365 | composite.children[composite.index]->reset(); |
| 366 | composite.index = i; |
| 367 | } |
| 368 | |
| 369 | if (status == NodeStatus::Success || composite.index >= node.children.size()) { |
| 370 | return status; |
| 371 | } |
| 372 | } |
| 373 | |
| 374 | return NodeStatus::Running; |
| 375 | } |
| 376 | |
| 377 | NodeStatus BehaviorState::runRandomize(RandomizeNode const& node, NodeState& state) { |
| 378 | if (state.isNothing()) |