Skip to content

Commit bc49935

Browse files
committed
feat(action): new wait time node
New wait time node returns continue until the passed duration has expired
1 parent c0eb5c7 commit bc49935

File tree

11 files changed

+146
-0
lines changed

11 files changed

+146
-0
lines changed

Assets/FluidBehaviorTree/Runtime/BehaviorTree/Builder/BehaviorTreeBuilder.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,28 @@ public BehaviorTreeBuilder Do (string name, Func<TaskStatus> action) {
9393
public BehaviorTreeBuilder Do (Func<TaskStatus> action) {
9494
return Do("action", action);
9595
}
96+
97+
/// <summary>
98+
/// Return continue until time has passed
99+
/// </summary>
100+
/// <param name="name"></param>
101+
/// <param name="time"></param>
102+
/// <returns></returns>
103+
public BehaviorTreeBuilder WaitTime (string name, float time = 1f) {
104+
return AddNode(new WaitTime(new TimeMonitor()) {
105+
Name = name,
106+
time = time
107+
});
108+
}
109+
110+
/// <summary>
111+
/// Return continue until time has passed
112+
/// </summary>
113+
/// <param name="time"></param>
114+
/// <returns></returns>
115+
public BehaviorTreeBuilder WaitTime (float time = 1f) {
116+
return WaitTime("Wait Time", time);
117+
}
96118

97119
public BehaviorTreeBuilder Condition (string name, Func<bool> action) {
98120
return AddNode(new ConditionGeneric {

Assets/FluidBehaviorTree/Runtime/Tasks/Actions/WaitTime.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
namespace CleverCrow.Fluid.BTs.Tasks.Actions {
2+
public interface ITimeMonitor {
3+
float DeltaTime { get; }
4+
}
5+
}

Assets/FluidBehaviorTree/Runtime/Tasks/Actions/WaitTime/ITimeMonitor.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
using UnityEngine;
2+
3+
namespace CleverCrow.Fluid.BTs.Tasks.Actions {
4+
public class TimeMonitor : ITimeMonitor {
5+
public float DeltaTime => Time.deltaTime;
6+
}
7+
}

Assets/FluidBehaviorTree/Runtime/Tasks/Actions/WaitTime/TimeMonitor.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
namespace CleverCrow.Fluid.BTs.Tasks.Actions {
2+
/// <summary>
3+
/// Return continue until the time has passed
4+
/// </summary>
5+
public class WaitTime : ActionBase {
6+
private ITimeMonitor _timeMonitor;
7+
private float _timePassed;
8+
9+
public float time = 1;
10+
11+
12+
public WaitTime (ITimeMonitor timeMonitor) {
13+
_timeMonitor = timeMonitor;
14+
}
15+
16+
protected override void OnStart () {
17+
_timePassed = 0;
18+
}
19+
20+
protected override TaskStatus OnUpdate () {
21+
_timePassed += _timeMonitor.DeltaTime;
22+
23+
if (_timePassed < time) {
24+
return TaskStatus.Continue;
25+
}
26+
27+
return TaskStatus.Success;
28+
}
29+
}
30+
}

Assets/FluidBehaviorTree/Runtime/Tasks/Actions/WaitTime/WaitTime.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/FluidBehaviorTree/Tests/Editor/BehaviorTrees/Builders/BehaviorTreeBuilderTest.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public void BeforeEach () {
1616
}
1717

1818
public class SelectorRandomMethod : BehaviorTreeBuilderTest {
19+
[Test]
1920
public void It_should_add_a_random_selector () {
2021
var tree = _builder
2122
.SelectorRandom("random selector")
@@ -427,5 +428,29 @@ public void It_should_add_a_wait_node () {
427428
Assert.AreEqual(1, _invokeCount);
428429
}
429430
}
431+
432+
public class WaitTimeMethod : BehaviorTreeBuilderTest {
433+
[Test]
434+
public void It_should_add_a_WaitTime_action () {
435+
var tree = _builder
436+
.WaitTime("Custom")
437+
.Build();
438+
439+
var waitTime = tree.Root.Children[0] as WaitTime;
440+
441+
Assert.IsNotNull(waitTime);
442+
}
443+
444+
[Test]
445+
public void It_should_set_WaitTime_duration () {
446+
var tree = _builder
447+
.WaitTime(2f)
448+
.Build();
449+
450+
var waitTime = tree.Root.Children[0] as WaitTime;
451+
452+
Assert.AreEqual(2f, waitTime.time);
453+
}
454+
}
430455
}
431456
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using NSubstitute;
2+
using NUnit.Framework;
3+
4+
namespace CleverCrow.Fluid.BTs.Tasks.Actions.Editors.Tests {
5+
public class WaitTimeTest {
6+
public class UpdateMethod {
7+
[Test]
8+
public void It_should_return_continue_if_time_has_not_passed () {
9+
var timeMonitor = Substitute.For<ITimeMonitor>();
10+
timeMonitor.DeltaTime.Returns(0);
11+
var waitTime = new WaitTime(timeMonitor) {time = 1};
12+
13+
Assert.AreEqual(TaskStatus.Continue, waitTime.Update());
14+
}
15+
16+
[Test]
17+
public void It_should_return_success_if_time_has_passed () {
18+
var timeMonitor = Substitute.For<ITimeMonitor>();
19+
timeMonitor.DeltaTime.Returns(2);
20+
var waitTime = new WaitTime(timeMonitor) {time = 1};
21+
22+
Assert.AreEqual(TaskStatus.Success, waitTime.Update());
23+
}
24+
}
25+
26+
public class ResetMethod {
27+
[Test]
28+
public void It_should_reset_time () {
29+
var timeMonitor = Substitute.For<ITimeMonitor>();
30+
var waitTime = new WaitTime(timeMonitor) {time = 1};
31+
32+
timeMonitor.DeltaTime.Returns(2);
33+
waitTime.Update();
34+
waitTime.Reset();
35+
timeMonitor.DeltaTime.Returns(0);
36+
37+
Assert.AreEqual(TaskStatus.Continue, waitTime.Update());
38+
39+
}
40+
}
41+
}
42+
}

Assets/FluidBehaviorTree/Tests/Editor/Tasks/Actions/WaitTimeTest.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)