use flax::{components::{name, child_of}, entity_ids, Dfs, Entity, Query, Topo, World};
use tracing_subscriber::{prelude::*, EnvFilter};
use tracing_tree::HierarchicalLayer;
fn main() {
tracing_subscriber::registry()
.with(EnvFilter::from_default_env())
.with(HierarchicalLayer::default().with_indent_lines(true))
.init();
let mut world = World::new();
let root = Entity::builder()
.set(name(), "root".into())
.attach(
child_of,
Entity::builder().set(name(), "root.child.1".into()).attach(
child_of,
Entity::builder().set(name(), "root.child.1.1".into()),
),
)
.attach(
child_of,
Entity::builder().set(name(), "root.child.2".into()),
)
.attach(
child_of,
Entity::builder().set(name(), "root.child.3".into()),
)
.spawn(&mut world);
let root2 = Entity::builder()
.set(name(), "root2".into())
.attach(
child_of,
Entity::builder().set(name(), "root2.child.1".into()),
)
.attach(
child_of,
Entity::builder()
.set(name(), "root2.child.2".into())
.attach(
child_of,
Entity::builder()
.set(name(), "root2.child.2.1".into())
.attach(
child_of,
Entity::builder().set(name(), "root2.child.2.1.1".into()),
),
)
.attach(
child_of,
Entity::builder().set(name(), "root2.child.2.2".into()),
),
)
.spawn(&mut world);
tracing::info!("Spawned roots: {root}, {root2}");
{
let _span = tracing::info_span!("dfs");
let mut query = Query::new((entity_ids(), name())).with_strategy(Dfs::new(child_of));
tracing::info!("Dfs:");
for (id, name) in query.borrow(&world).iter() {
tracing::info!(?id, ?name);
}
}
{
let _span = tracing::info_span!("topo");
let mut query = Query::new((entity_ids(), name())).with_strategy(Topo::new(child_of));
for (id, name) in &mut query.borrow(&world) {
tracing::info!(?id, ?name);
}
}
}