BehaviorLoader

Struct BehaviorLoader 

Source
pub struct BehaviorLoader { /* private fields */ }
Expand description

Loader for creating behavior trees from JSON configuration.

The BehaviorLoader takes a BehaviorConfig (which can be loaded from JSON) and uses a NodeRegistry to instantiate the complete behavior tree.

§Features

  • Recursive composition parsing (sequence/selector/parallel nodes)
  • Config reference resolution from the config map
  • Inline config support
  • Clear error messages for missing node types

§Example

use mecha10_behavior_runtime::prelude::*;
use mecha10_behavior_runtime::{NodeRegistry, BehaviorLoader};
use serde_json::json;


// Create and populate registry
let mut registry = NodeRegistry::new();
registry.register("my_behavior", |_| Ok(Box::new(MyBehavior)));

// Load behavior tree from JSON
let json = r#"{
    "name": "test_behavior",
    "root": {
        "type": "sequence",
        "children": [
            {
                "type": "node",
                "node": "my_behavior"
            }
        ]
    }
}"#;

let config = BehaviorConfig::from_json(json).unwrap();
let loader = BehaviorLoader::new(registry);
let behavior = loader.load(&config).unwrap();

Implementations§

Source§

impl BehaviorLoader

Source

pub fn new(registry: NodeRegistry) -> BehaviorLoader

Create a new behavior loader with the given node registry.

§Arguments
  • registry - The node registry containing registered node types
§Example
use mecha10_behavior_runtime::{NodeRegistry, BehaviorLoader};

let registry = NodeRegistry::new();
let loader = BehaviorLoader::new(registry);
Source

pub fn load( &self, config: &BehaviorConfig, ) -> Result<Box<dyn BehaviorNode>, Error>

Load a behavior tree from a configuration.

This is the main entry point for loading behavior trees. It takes a BehaviorConfig (typically loaded from JSON) and recursively instantiates all nodes in the tree.

§Arguments
  • config - The behavior configuration to load
§Returns

A boxed behavior node representing the root of the tree, or an error if:

  • A referenced node type is not registered
  • A config reference is invalid
  • A factory function fails
§Example
use mecha10_behavior_runtime::{BehaviorConfig, NodeRegistry, BehaviorLoader};

let loader = BehaviorLoader::new(registry);

let json = r#"{
    "name": "test",
    "root": {
        "type": "node",
        "node": "test"
    }
}"#;

let config = BehaviorConfig::from_json(json).unwrap();
let behavior = loader.load(&config).unwrap();
Source

pub fn load_from_json(&self, json: &str) -> Result<Box<dyn BehaviorNode>, Error>

Load a behavior tree from a JSON string.

This is a convenience method that combines parsing and loading.

§Arguments
  • json - JSON string containing a BehaviorConfig
§Example
use mecha10_behavior_runtime::{NodeRegistry, BehaviorLoader};

let loader = BehaviorLoader::new(registry);

let json = r#"{
    "name": "test",
    "root": {
        "type": "node",
        "node": "test"
    }
}"#;

let behavior = loader.load_from_json(json).unwrap();
Source

pub fn load_from_file( &self, path: impl AsRef<Path>, ) -> Result<Box<dyn BehaviorNode>, Error>

Load a behavior tree from a JSON file.

This is a convenience method that reads a file and loads the behavior tree.

§Arguments
  • path - Path to the JSON file
§Example
use mecha10_behavior_runtime::{NodeRegistry, BehaviorLoader};

let loader = BehaviorLoader::new(registry);
let behavior = loader.load_from_file("behaviors/patrol.json").unwrap();
Source

pub fn registry(&self) -> &NodeRegistry

Get a reference to the underlying node registry.

This can be useful for inspecting registered types or adding new types after the loader has been created.

Trait Implementations§

Source§

impl Clone for BehaviorLoader

Source§

fn clone(&self) -> BehaviorLoader

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for BehaviorLoader

Source§

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

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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