behavior_tree 0.1.9 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -0
- data/Gemfile.lock +2 -2
- data/README.md +809 -23
- data/Rakefile +77 -0
- data/behavior_tree.gemspec +4 -4
- data/lib/behavior_tree.rb +2 -0
- data/lib/behavior_tree/builder.rb +15 -45
- data/lib/behavior_tree/concerns/dsl/randomizer.rb +78 -0
- data/lib/behavior_tree/concerns/dsl/registration.rb +35 -0
- data/lib/behavior_tree/concerns/dsl/spell_checker.rb +2 -0
- data/lib/behavior_tree/concerns/dsl/utils.rb +22 -0
- data/lib/behavior_tree/concerns/tree_structure/printer.rb +31 -8
- data/lib/behavior_tree/decorator_nodes/repeat_times_base.rb +0 -4
- data/lib/behavior_tree/errors.rb +8 -0
- data/lib/behavior_tree/node_base.rb +22 -8
- data/lib/behavior_tree/node_status.rb +1 -1
- data/lib/behavior_tree/version.rb +1 -1
- metadata +11 -8
data/lib/behavior_tree/errors.rb
CHANGED
@@ -62,4 +62,12 @@ module BehaviorTree
|
|
62
62
|
super "Cannot register node '#{node_type}', it already exists."
|
63
63
|
end
|
64
64
|
end
|
65
|
+
|
66
|
+
# Exception for when the returned value in should_tick? is not a boolean.
|
67
|
+
class ShouldTickNotBooleanError < StandardError
|
68
|
+
def initialize(returned_value)
|
69
|
+
err = "Return of 'should_tick?' must be a boolean value. It returned #{returned_value} (#{returned_value.class})."
|
70
|
+
super err
|
71
|
+
end
|
72
|
+
end
|
65
73
|
end
|
@@ -4,15 +4,17 @@ module BehaviorTree
|
|
4
4
|
# A node (abstract class).
|
5
5
|
class NodeBase
|
6
6
|
include TreeStructure::Algorithms
|
7
|
-
attr_reader :status, :tick_count, :ticks_running, :arbitrary_storage
|
7
|
+
attr_reader :status, :prev_status, :tick_count, :ticks_running, :arbitrary_storage
|
8
8
|
|
9
9
|
def initialize
|
10
10
|
@status = NodeStatus.new NodeStatus::SUCCESS
|
11
|
+
@prev_status = NodeStatus.new NodeStatus::SUCCESS
|
12
|
+
|
11
13
|
@tick_count = 0
|
12
14
|
@ticks_running = 0
|
13
15
|
@context = nil
|
14
16
|
|
15
|
-
@status.subscribe { |prev
|
17
|
+
@status.subscribe { |prev| __on_status_change__(prev) }
|
16
18
|
|
17
19
|
@arbitrary_storage = {}
|
18
20
|
end
|
@@ -32,9 +34,10 @@ module BehaviorTree
|
|
32
34
|
|
33
35
|
def tick!
|
34
36
|
@tick_count += 1
|
35
|
-
|
37
|
+
should_tick = should_tick?
|
38
|
+
raise ShouldTickNotBooleanError, should_tick unless [true, false].include? should_tick
|
36
39
|
|
37
|
-
unless @tick_prevented
|
40
|
+
unless (@tick_prevented = !should_tick)
|
38
41
|
status.running!
|
39
42
|
on_tick
|
40
43
|
@ticks_running += 1
|
@@ -47,6 +50,9 @@ module BehaviorTree
|
|
47
50
|
#
|
48
51
|
# This error can be replicated by pasting a valid status object in IRB, such as by doing:
|
49
52
|
# BehaviorTree.const_get(:NodeStatus).new(:__running__) # Valid, but IRB crashes.
|
53
|
+
#
|
54
|
+
# Ruby 3.0.0 -> Crash
|
55
|
+
# Ruby 2.7.0 -> OK
|
50
56
|
nil
|
51
57
|
end
|
52
58
|
|
@@ -98,18 +104,26 @@ module BehaviorTree
|
|
98
104
|
|
99
105
|
def on_finished_running; end
|
100
106
|
|
107
|
+
def on_status_change; end
|
108
|
+
|
101
109
|
private
|
102
110
|
|
103
|
-
# Always prev !=
|
111
|
+
# Always prev != current (states that are set to the same aren't notified).
|
104
112
|
# The fact that it's set to 0 means that setting to running must be done before
|
105
113
|
# increasing the counts (so that @ticks_running becomes 1 after the whole tick lifecycle).
|
106
|
-
|
107
|
-
|
114
|
+
# This is the non custom on_status_change. Users are expected to override the one without
|
115
|
+
# double underscore if they want to execute custom logic.
|
116
|
+
def __on_status_change__(prev)
|
117
|
+
prev_status.set(prev)
|
118
|
+
|
119
|
+
if prev_status.running?
|
108
120
|
on_finished_running
|
109
|
-
elsif
|
121
|
+
elsif status.running?
|
110
122
|
@ticks_running = 0
|
111
123
|
on_started_running
|
112
124
|
end
|
125
|
+
|
126
|
+
on_status_change
|
113
127
|
end
|
114
128
|
end
|
115
129
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: behavior_tree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felo Vilches
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07-
|
11
|
+
date: 2021-07-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -24,7 +24,7 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.8.1
|
27
|
-
description:
|
27
|
+
description:
|
28
28
|
email:
|
29
29
|
- felovilches@gmail.com
|
30
30
|
executables: []
|
@@ -48,7 +48,10 @@ files:
|
|
48
48
|
- lib/behavior_tree/builder.rb
|
49
49
|
- lib/behavior_tree/concerns/dsl/dsl.yml
|
50
50
|
- lib/behavior_tree/concerns/dsl/initial_config.rb
|
51
|
+
- lib/behavior_tree/concerns/dsl/randomizer.rb
|
52
|
+
- lib/behavior_tree/concerns/dsl/registration.rb
|
51
53
|
- lib/behavior_tree/concerns/dsl/spell_checker.rb
|
54
|
+
- lib/behavior_tree/concerns/dsl/utils.rb
|
52
55
|
- lib/behavior_tree/concerns/node_iterators/all_nodes.rb
|
53
56
|
- lib/behavior_tree/concerns/node_iterators/prioritize_running.rb
|
54
57
|
- lib/behavior_tree/concerns/tree_structure/algorithms.rb
|
@@ -79,7 +82,7 @@ homepage: https://github.com/FeloVilches/Ruby-Behavior-Tree
|
|
79
82
|
licenses:
|
80
83
|
- MIT
|
81
84
|
metadata: {}
|
82
|
-
post_install_message:
|
85
|
+
post_install_message:
|
83
86
|
rdoc_options: []
|
84
87
|
require_paths:
|
85
88
|
- lib
|
@@ -94,8 +97,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
94
97
|
- !ruby/object:Gem::Version
|
95
98
|
version: '0'
|
96
99
|
requirements: []
|
97
|
-
rubygems_version: 3.
|
98
|
-
signing_key:
|
100
|
+
rubygems_version: 3.2.3
|
101
|
+
signing_key:
|
99
102
|
specification_version: 4
|
100
|
-
summary:
|
103
|
+
summary: A robust and customizable Ruby gem for creating Behavior Trees.
|
101
104
|
test_files: []
|