cornerstone 0.3.1

A behavior tree library
Documentation
use std::{
    collections::HashMap,
    time::{Duration, Instant},
};

// use cornerstone::{
//     node::composite::{Composite, Parallel, Sequence},
//     Context, DataProxy, NodeStatus, TreeNode,
// };

// struct SleepNode {
//     name: String,
//     end_ts: Instant,
//     data_proxy: DataProxy,
// }

// impl TreeNode for SleepNode {
//     fn tick(&mut self, ctx: &mut cornerstone::Context) -> NodeStatus {
//         let current_ts = Instant::now();

//         if current_ts <= self.end_ts {
//             println!("sleep: {}", self.name);

//             NodeStatus::Running
//         } else {
//             println!("finish: {}", self.name);
//             NodeStatus::Success
//         }
//     }
// }

fn main() {
    // let mut ctx = Context::default();

    // let sleep_node_1 = SleepNode {
    //     name: "alice".to_string(),
    //     end_ts: Instant::now() + Duration::from_secs(3),
    //     data_proxy: DataProxy::new(HashMap::new()),
    // };

    // let sleep_node_2 = SleepNode {
    //     name: "bob".to_string(),
    //     end_ts: Instant::now() + Duration::from_secs(5),
    //     data_proxy: DataProxy::new(HashMap::new()),
    // };

    // let mut root = Parallel::new(Some(1), None);
    // root.add_child(Box::new(sleep_node_1));
    // root.add_child(Box::new(sleep_node_2));

    // loop {
    //     let res = root.tick(&mut ctx);

    //     if res != NodeStatus::Running {
    //         println!("finish run sleep node: res= {res:?}");
    //         break;
    //     } else {
    //         println!("need wait for finish");
    //         std::thread::sleep(Duration::from_millis(200));
    //     }
    // }
}