///|
fn main {
let source = "root root\n" +
"blackboard enemy_visible true\n" +
"blackboard ammo 2\n" +
"selector root engage patrol\n" +
"sequence engage see_enemy has_ammo aim fire\n" +
"condition see_enemy enemy_visible eq true\n" +
"condition has_ammo ammo gt 0\n" +
"action aim aim_weapon running,success mode=aiming\n" +
"action fire fire_weapon success ammo=1 result=hit\n" +
"action patrol patrol_area success mode=patrol\n"
match @moonbtkit.parse_dsl(source) {
Ok(doc) => {
let engine = @moonbtkit.new_engine(doc.tree, blackboard=doc.blackboard)
match engine.run_until_done(max_ticks=6) {
Ok(result) => {
println(result.summary())
println("digest: " + engine.trace_digest())
println("timeline:")
println(@moonbtkit.timeline_text(engine.trace))
println(
"coverage: " +
@moonbtkit.coverage_from_trace(doc.tree, engine.trace).summary(),
)
println("mermaid:")
println(
@moonbtkit.tree_to_mermaid(
doc.tree,
options=@moonbtkit.compact_visual_options(),
),
)
}
Err(err) => println("run error: " + err.message())
}
}
Err(err) => println("parse error: " + err.message())
}
}