MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / InvokeUpdate

Method InvokeUpdate

Source/Engine/AI/BehaviorTreeNodes.cpp:51–102  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

49}
50
51BehaviorUpdateResult BehaviorTreeNode::InvokeUpdate(const BehaviorUpdateContext& context)
52{
53 ASSERT_LOW_LAYER(_executionIndex != -1);
54 const BitArray<>& relevantNodes = *(const BitArray<>*)context.RelevantNodes;
55
56 // If node is not yet relevant
57 if (relevantNodes.Get(_executionIndex) == false)
58 {
59 // Check decorators if node can be executed
60 for (BehaviorTreeDecorator* decorator : _decorators)
61 {
62 ASSERT_LOW_LAYER(decorator->_executionIndex != -1);
63 if (relevantNodes.Get(decorator->_executionIndex) == false)
64 decorator->BecomeRelevant(context);
65 if (!decorator->CanUpdate(context))
66 {
67 return BehaviorUpdateResult::Failed;
68 }
69 }
70
71 // Make node relevant
72 BecomeRelevant(context);
73 }
74
75 // Update decorators
76 bool decoratorFailed = false;
77 for (BehaviorTreeDecorator* decorator : _decorators)
78 {
79 decoratorFailed |= decorator->Update(context) == BehaviorUpdateResult::Failed;
80 }
81
82 // Node-specific update
83 BehaviorUpdateResult result;
84 if (decoratorFailed)
85 result = BehaviorUpdateResult::Failed;
86 else
87 result = Update(context);
88 if ((int32)result < 0 || (int32)result > (int32)BehaviorUpdateResult::Failed)
89 result = BehaviorUpdateResult::Failed; // Invalid value is a failure
90
91 // Post-process result from decorators
92 for (BehaviorTreeDecorator* decorator : _decorators)
93 {
94 decorator->PostUpdate(context, result);
95 }
96
97 // Check if node is not relevant anymore
98 if (result != BehaviorUpdateResult::Running)
99 BecomeIrrelevant(context);
100
101 return result;
102}
103
104void BehaviorTreeNode::BecomeRelevant(const BehaviorUpdateContext& context)
105{

Callers 2

UpdateAsyncMethod · 0.80
UpdateMethod · 0.80

Calls 6

BecomeRelevantMethod · 0.80
CanUpdateMethod · 0.80
PostUpdateMethod · 0.80
UpdateFunction · 0.70
GetMethod · 0.45
UpdateMethod · 0.45

Tested by

no test coverage detected