Skip to content

Commit 9bef373

Browse files
authored
Fix before run behavior (#424)
* only call before_run once per run, closes #421 * only call before_run once on cooldowns
1 parent 9471f75 commit 9bef373

File tree

6 files changed

+3038
-21
lines changed

6 files changed

+3038
-21
lines changed

addons/beehave/nodes/decorators/cooldown.gd

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,36 +15,37 @@ class_name CooldownDecorator
1515

1616
func tick(actor: Node, blackboard: Blackboard) -> int:
1717
var c: BeehaveNode = get_child(0)
18-
var end_time: float = blackboard.get_value(cache_key, 0.0, str(actor.get_instance_id()))
18+
var actor_id := str(actor.get_instance_id())
19+
var end_time: float = blackboard.get_value(cache_key, 0.0, actor_id)
1920
var current_time = Time.get_ticks_msec()
2021
var response: int
2122

22-
if c != running_child:
23-
c.before_run(actor, blackboard)
24-
2523
if current_time < end_time:
2624
response = FAILURE
2725

2826
if can_send_message(blackboard):
2927
BeehaveDebuggerMessages.process_tick(self.get_instance_id(), response, blackboard.get_debug_data())
3028
else:
29+
if c != running_child:
30+
c.before_run(actor, blackboard)
31+
3132
response = c._safe_tick(actor, blackboard)
3233

3334
if can_send_message(blackboard):
3435
BeehaveDebuggerMessages.process_tick(c.get_instance_id(), response, blackboard.get_debug_data())
3536

3637
if c is ConditionLeaf:
37-
blackboard.set_value("last_condition", c, str(actor.get_instance_id()))
38-
blackboard.set_value("last_condition_status", response, str(actor.get_instance_id()))
38+
blackboard.set_value("last_condition", c, actor_id)
39+
blackboard.set_value("last_condition_status", response, actor_id)
3940

4041
if response == RUNNING:
4142
running_child = c
4243
if c is ActionLeaf:
43-
blackboard.set_value("running_action", c, str(actor.get_instance_id()))
44+
blackboard.set_value("running_action", c, actor_id)
4445
else:
4546
end_time = Time.get_ticks_msec() + wait_time * 1000
4647
c.after_run(actor, blackboard)
47-
blackboard.set_value(cache_key, end_time, str(actor.get_instance_id()))
48+
blackboard.set_value(cache_key, end_time, actor_id)
4849

4950
return response
5051

addons/beehave/nodes/decorators/delayer.gd

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,37 +15,38 @@ class_name DelayDecorator
1515

1616
func tick(actor: Node, blackboard: Blackboard) -> int:
1717
var c: BeehaveNode = get_child(0)
18-
var total_time: float = blackboard.get_value(cache_key, 0.0, str(actor.get_instance_id()))
18+
var actor_id := str(actor.get_instance_id())
19+
var total_time: float = blackboard.get_value(cache_key, 0.0, actor_id)
1920
var response: int
2021

21-
if c != running_child:
22-
c.before_run(actor, blackboard)
23-
2422
if total_time < wait_time:
2523
response = RUNNING
2624

2725
total_time += get_physics_process_delta_time()
28-
blackboard.set_value(cache_key, total_time, str(actor.get_instance_id()))
26+
blackboard.set_value(cache_key, total_time, actor_id)
2927

3028
if can_send_message(blackboard):
3129
BeehaveDebuggerMessages.process_tick(self.get_instance_id(), response, blackboard.get_debug_data())
3230
else:
31+
if c != running_child:
32+
c.before_run(actor, blackboard)
33+
3334
response = c._safe_tick(actor, blackboard)
3435

3536
if can_send_message(blackboard):
3637
BeehaveDebuggerMessages.process_tick(c.get_instance_id(), response, blackboard.get_debug_data())
3738

3839
if c is ConditionLeaf:
39-
blackboard.set_value("last_condition", c, str(actor.get_instance_id()))
40-
blackboard.set_value("last_condition_status", response, str(actor.get_instance_id()))
40+
blackboard.set_value("last_condition", c, actor_id)
41+
blackboard.set_value("last_condition_status", response, actor_id)
4142

4243
if response == RUNNING:
4344
running_child = c
4445
if c is ActionLeaf:
45-
blackboard.set_value("running_action", c, str(actor.get_instance_id()))
46+
blackboard.set_value("running_action", c, actor_id)
4647
else:
4748
c.after_run(actor, blackboard)
48-
blackboard.set_value(cache_key, 0.0, str(actor.get_instance_id()))
49+
blackboard.set_value(cache_key, 0.0, actor_id)
4950

5051
return response
5152

0 commit comments

Comments
 (0)