#![no_std]
#![doc = include_str!("../README.md")]
#[cfg(doctest)]
doc_comment::doctest!("../README.md");
#[doc(hidden)]
extern crate alloc;
#[cfg(feature = "std")]
#[doc(hidden)]
extern crate std;
pub mod behavior_data;
pub mod behavior_description;
pub mod behavior_kind;
pub mod behavior_state;
pub mod behavior_traits;
pub mod behaviors;
pub mod error;
pub mod pre_post_conditions;
pub mod tree;
pub mod xml;
#[doc(hidden)]
pub extern crate portable_atomic_util;
#[doc(hidden)]
pub extern crate spin;
#[allow(unused)]
pub use dataport::{Arc, Mutex, RwLock, RwLockReadGuard, RwLockWriteGuard};
pub use behavior_data::BehaviorData;
pub use behavior_description::BehaviorDescription;
pub use behavior_kind::BehaviorKind;
pub use behavior_state::BehaviorState;
pub use behavior_traits::{Behavior, BehaviorExecution, BehaviorRegistry};
#[cfg(feature = "mock_behavior")]
pub use behaviors::mock_behavior::{MockBehavior, MockBehaviorConfig};
#[cfg(feature = "simple_behavior")]
pub use behaviors::simple_behavior::{ComplexBhvrTickFn, SimpleBehavior, SimpleBhvrTickFn};
pub use error::Error;
pub use pre_post_conditions::{POST_CONDITIONS, PRE_CONDITIONS};
#[cfg(feature = "observer")]
pub use tree::observer::tree_observer::BehaviorTreeObserver;
pub use tree::{BehaviorTree, BehaviorTreeElement, BehaviorTreeElementList, TreeElementKind};
#[cfg(feature = "groot")]
pub use tree::{BehaviorTreeMessage, observer::groot2::connector_data::Groot2ConnectorData};
#[cfg(feature = "groot")]
pub use xml::creator::XmlCreator;
#[cfg(all(feature = "groot", not(feature = "std")))]
pub use tree::observer::groot2::connector_no_std::Groot2Connector;
#[cfg(all(feature = "groot", feature = "std"))]
pub use tree::observer::groot2::connector_std::Groot2Connector;
pub use dataport::create_port_array;
type ConstString = crate::Arc<str>;
pub const EMPTY_STR: &str = "";
pub const ACTION: &str = "Action";
pub const CONDITION: &str = "Condition";
pub const CONTROL: &str = "Control";
pub const DECORATOR: &str = "Decorator";
pub const SUBTREE: &str = "SubTree";
pub const FAILURE: &str = "Failure";
pub const IDLE: &str = "Idle";
pub const RUNNING: &str = "Running";
pub const SKIPPED: &str = "Skipped";
pub const SUCCESS: &str = "Success";
pub const AUTOREMAP: &str = "_autoremap";
pub const FAILURE_IF: &str = "_failureIf";
pub const SUCCESS_IF: &str = "_successIf";
pub const SKIP_IF: &str = "_skipIf";
pub const WHILE: &str = "_while";
pub const ON_HALTED: &str = "_onHalted";
pub const ON_FAILURE: &str = "_onFailure";
pub const ON_SUCCESS: &str = "_onSuccess";
pub const POST: &str = "_post";
pub const NAME: &str = "name";
pub const ID: &str = "ID";
pub const DEFAULT: &str = "default";
pub type BehaviorPtr = alloc::boxed::Box<dyn crate::behavior_traits::BehaviorExecution>;
pub type BehaviorResult<Output = BehaviorState> = Result<Output, Error>;
pub type BehaviorCreationFn = dyn Fn(databoard::Databoard) -> BehaviorPtr + Send + Sync;
pub type BehaviorTickCallback = dyn Fn(&BehaviorData, &mut BehaviorState) + Send + Sync;
#[macro_export]
macro_rules! port_array_init {
($size:literal, $($content:expr),+ $(,)?) => {
#[allow(unused)]
fn port_collection_init(blackboard: &databoard::Databoard) -> Result<dataport::PortArray<$size>, behaviortree_core::error::Error> {
Ok($crate::create_port_array!($($content,)+))
}
};
}
#[macro_export]
macro_rules! register_scripting_enum {
($registry:ident, $tp:ty) => {
for (key, value) in <$tp>::key_value_tuples() {
$registry.register_enum_tuple(key, value)?;
}
};
($registry:ident, $($key:literal, $value:literal),+ $(,)?) => {
$( $registry.register_enum_tuple($key, $value)?; )+;
};
}