mod capability_task;
mod capture_target;
mod elapsed_timer;
mod estop;
mod go_to_location;
mod movement;
mod navigation;
mod sensing;
mod set_capability_target;
mod set_go_to_location_target;
mod timing;
pub use capability_task::CapabilityTaskNode;
pub use capture_target::CaptureTargetNode;
pub use estop::EstopActiveNode;
pub use go_to_location::GoToLocationNode;
pub use movement::{MoveNode, StopNode, WanderNode};
pub use navigation::{CheckArrivalNode, FollowPathNode, PlanPathNode};
pub use sensing::SensorCheckNode;
pub use set_capability_target::SetCapabilityTargetNode;
pub use set_go_to_location_target::SetGoToLocationTargetNode;
pub use timing::{IdleNode, PauseNode, TimerNode};
use crate::{BoxedBehavior, NodeRegistry};
use serde_json::Value;
macro_rules! register_action {
($registry:expr, $name:literal, $node_type:ty) => {
$registry.register($name, |config: Value| -> anyhow::Result<BoxedBehavior> {
Ok(Box::new(<$node_type>::from_json(config)?))
});
};
}
pub fn register_builtin_actions(registry: &mut NodeRegistry) {
register_action!(registry, "wander", WanderNode);
register_action!(registry, "move", MoveNode);
register_action!(registry, "sensor_check", SensorCheckNode);
register_action!(registry, "timer", TimerNode);
register_action!(registry, "idle", IdleNode);
register_action!(registry, "pause", PauseNode);
register_action!(registry, "stop", StopNode);
register_action!(registry, "estop_active", EstopActiveNode);
register_action!(registry, "plan_path", PlanPathNode);
register_action!(registry, "follow_path", FollowPathNode);
register_action!(registry, "check_arrival", CheckArrivalNode);
register_action!(registry, "capability_task", CapabilityTaskNode);
register_action!(registry, "set_capability_target", SetCapabilityTargetNode);
register_action!(registry, "capture_target", CaptureTargetNode);
register_action!(registry, "go_to_location", GoToLocationNode);
register_action!(registry, "set_go_to_location_target", SetGoToLocationTargetNode);
}