@@ -27,27 +27,6 @@ NodeStatus TreeNode::executeTick()
27
27
{
28
28
auto new_status = status_;
29
29
30
- // injected pre-callback
31
- if (status_ == NodeStatus::IDLE)
32
- {
33
- PreTickCallback callback;
34
- {
35
- std::unique_lock lk (callback_injection_mutex_);
36
- callback = pre_condition_callback_;
37
- }
38
- if (callback)
39
- {
40
- auto override_status = callback (*this );
41
- if (isStatusCompleted (override_status))
42
- {
43
- // return immediately and don't execute the actual tick()
44
- new_status = override_status;
45
- setStatus (new_status);
46
- return new_status;
47
- }
48
- }
49
- }
50
-
51
30
// a pre-condition may return the new status.
52
31
// In this case it override the actual tick()
53
32
if (auto precond = checkPreConditions ())
@@ -56,8 +35,31 @@ NodeStatus TreeNode::executeTick()
56
35
}
57
36
else
58
37
{
59
- // Call the actual tick
60
- new_status = tick ();
38
+ // injected pre-callback
39
+ bool substituted = false ;
40
+ if (status_ == NodeStatus::IDLE)
41
+ {
42
+ PreTickCallback callback;
43
+ {
44
+ std::unique_lock lk (callback_injection_mutex_);
45
+ callback = substitution_callback_;
46
+ }
47
+ if (callback)
48
+ {
49
+ auto override_status = callback (*this );
50
+ if (isStatusCompleted (override_status))
51
+ {
52
+ // don't execute the actual tick()
53
+ substituted = true ;
54
+ new_status = override_status;
55
+ }
56
+ }
57
+ }
58
+
59
+ // Call the ACTUAL tick
60
+ if (!substituted){
61
+ new_status = tick ();
62
+ }
61
63
}
62
64
63
65
checkPostConditions (new_status);
@@ -242,7 +244,7 @@ TreeNode::subscribeToStatusChange(TreeNode::StatusChangeCallback callback)
242
244
void TreeNode::setPreTickFunction (PreTickCallback callback)
243
245
{
244
246
std::unique_lock lk (callback_injection_mutex_);
245
- pre_condition_callback_ = callback;
247
+ substitution_callback_ = callback;
246
248
}
247
249
248
250
void TreeNode::setPostTickFunction (PostTickCallback callback)
0 commit comments