33 breaking releases
0.33.0 | Nov 3, 2021 |
---|---|
0.32.0 | Jul 18, 2020 |
0.31.0 | Jun 10, 2019 |
0.27.0 | Feb 6, 2019 |
0.0.1 | Dec 13, 2014 |
#1948 in Game dev
396 downloads per month
Used in 7 crates
(3 directly)
26KB
389 lines
ai_behavior
AI behavior tree
You can serialize the behavior tree using Serde and e.g. Ron.
What is an AI behavior tree?
An AI behavior tree is a kind of state machine logic for processes.
Many things that a game logic does, e.g. controlling AI characters, fits the pattern of AI behavior trees.
An AI behavior tree is a very generic way of organizing interactive logic.
It has built-in semantics for processes that signals Running
, Success
or
Failure
.
For example, if you have a state A
and a state B
:
- Move from state
A
to stateB
ifA
succeeds:Sequence([A, B])
- Try
A
first and then tryB
ifA
fails:Select([A, B])
- Do
B
repeatedly whileA
runs:While(A, [B])
- Do
A
,B
forever:While(WaitForever, [A, B])
- Wait for both
A
andB
to complete:WhenAll([A, B])
- Wait for either
A
orB
to complete:WhenAny([A, B])
See the Behavior
enum for more information.
Parallel semantics
This library has parallel semantics for AI behavior trees. It means that multiple processes can happen at the same time and the logic can be constructed around how these processes runs or terminate.
For example, While(A, [B])
runs both A
and B
at the same time.
If either A
or B
fails, then the whole while-behavior fails.
A property of AI behavior trees with parallel semantics is that you can control termination conditions externally, as opposed to most programming languages where termination condition is controlled internally:
while A() {
// This inner loop will never terminate unless `B` fails.
while true {
B(); // Runs `B` forever.
}
}
// This will terminate if `A` stops running, which also stops `B`.
WhenAny([A,
While(WaitForever, [
B
])
])
Dependencies
~0.5–1.2MB
~27K SLoC