Skip to main content

BehaviorNode

Enum BehaviorNode 

Source
pub enum BehaviorNode {
    Sequence {
        name: String,
        children: Vec<BehaviorNode>,
        cursor: usize,
    },
    Selector {
        name: String,
        children: Vec<BehaviorNode>,
        cursor: usize,
    },
    Parallel {
        name: String,
        children: Vec<BehaviorNode>,
        policy: ParallelPolicy,
    },
    Decorator {
        name: String,
        kind: DecoratorKind,
        child: Box<BehaviorNode>,
        state: DecoratorState,
    },
    Leaf {
        name: String,
        on_enter: Option<Box<dyn FnMut(&mut Blackboard)>>,
        on_tick: Box<dyn FnMut(&mut Blackboard, f32) -> NodeStatus>,
        on_exit: Option<Box<dyn FnMut(&mut Blackboard, NodeStatus)>>,
        entered: bool,
    },
    SubtreeRef {
        name: String,
    },
}
Expand description

The complete behavior tree node type.

Nodes are stored in a Box<BehaviorNode> tree; the root is owned by a BehaviorTree. Leaf nodes contain a closure (Box<dyn FnMut(…)>) so they carry arbitrary game-logic without external look-up tables.

Variants§

§

Sequence

Run children in order; stop and return Failure on the first child that fails. Return Success only when all children succeed.

Fields

§name: String
§children: Vec<BehaviorNode>
§cursor: usize

Index of the currently-active child (persists across ticks).

§

Selector

Run children in order; stop and return Success on the first child that succeeds. Return Failure only when all children fail.

Fields

§name: String
§children: Vec<BehaviorNode>
§cursor: usize
§

Parallel

Tick all children every frame regardless of their individual statuses.

Fields

§name: String
§children: Vec<BehaviorNode>
§

Decorator

Wraps exactly one child and modifies how its status is interpreted.

Fields

§name: String
§state: DecoratorState

Internal counter used by Repeat / Timeout / Cooldown decorators.

§

Leaf

A leaf with user-supplied tick logic.

Fields

§name: String
§on_enter: Option<Box<dyn FnMut(&mut Blackboard)>>

Called once when the node first becomes active (optional).

§on_tick: Box<dyn FnMut(&mut Blackboard, f32) -> NodeStatus>

Main tick function. Return the node’s status.

§on_exit: Option<Box<dyn FnMut(&mut Blackboard, NodeStatus)>>

Called when the node exits (success, failure, or abort).

§entered: bool

Whether on_enter has been called for the current activation.

§

SubtreeRef

A subtree stored by name in a SubtreeRegistry. Resolved at tick time; if the name is unknown the node returns Failure.

Fields

§name: String

Implementations§

Source§

impl BehaviorNode

Source

pub fn tick( &mut self, dt: f32, bb: &mut Blackboard, registry: &SubtreeRegistry, ) -> NodeStatus

Recursively tick this node and return its status.

dt is the elapsed time in seconds since the last tick. bb is the shared blackboard for this tree. registry is used to resolve SubtreeRef nodes.

Source

pub fn reset(&mut self)

Reset the cursor / state of this node and all its children, so the tree starts fresh on the next tick.

Source

pub fn name(&self) -> &str

Return the name of this node.

Source

pub fn collect_names(&self, out: &mut Vec<String>)

Recursively collect the names of all nodes into out.

Trait Implementations§

Source§

impl Debug for BehaviorNode

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<S> FromSample<S> for S

Source§

fn from_sample_(s: S) -> S

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

Source§

fn to_sample_(self) -> U

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,