Add spawn entity button
This commit is contained in:
parent
322e0dbcb6
commit
e10a0fabd3
|
@ -2,7 +2,7 @@ use bevy::{
|
||||||
app::{App, Startup},
|
app::{App, Startup},
|
||||||
core::{DebugName, Name},
|
core::{DebugName, Name},
|
||||||
core_pipeline::core_2d::Camera2dBundle,
|
core_pipeline::core_2d::Camera2dBundle,
|
||||||
ecs::{entity::Entity, query::Without, system::Commands},
|
ecs::{entity::Entity, query::Without, system::Commands, world::World},
|
||||||
ui::{node_bundles::NodeBundle, Node},
|
ui::{node_bundles::NodeBundle, Node},
|
||||||
DefaultPlugins,
|
DefaultPlugins,
|
||||||
};
|
};
|
||||||
|
@ -47,6 +47,10 @@ fn SceneTree<'a>(cx: Scope, selected_entity: &'a UseState<Option<Entity>>) -> El
|
||||||
let mut entities = entities.into_iter().collect::<Vec<_>>();
|
let mut entities = entities.into_iter().collect::<Vec<_>>();
|
||||||
entities.sort_by_key(|(entity, _)| *entity);
|
entities.sort_by_key(|(entity, _)| *entity);
|
||||||
|
|
||||||
|
let spawn_entity = use_system(cx, |world: &mut World| {
|
||||||
|
world.spawn_empty();
|
||||||
|
});
|
||||||
|
|
||||||
render! {
|
render! {
|
||||||
div {
|
div {
|
||||||
onclick: move |_| selected_entity.set(None),
|
onclick: move |_| selected_entity.set(None),
|
||||||
|
@ -68,6 +72,12 @@ fn SceneTree<'a>(cx: Scope, selected_entity: &'a UseState<Option<Entity>>) -> El
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
div {
|
||||||
|
onclick: move |_| spawn_entity(),
|
||||||
|
padding: "8",
|
||||||
|
background_color: NEUTRAL_800,
|
||||||
|
"Spawn Entity"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,14 @@ pub fn apply_mutations(
|
||||||
parent.add_child(child);
|
parent.add_child(child);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Mutation::AssignId { path, id } => todo!(),
|
Mutation::AssignId { path, id } => {
|
||||||
|
let mut entity = *stack.last().unwrap();
|
||||||
|
for index in path {
|
||||||
|
entity = world.entity(entity).get::<Children>().unwrap()[*index as usize];
|
||||||
|
}
|
||||||
|
element_id_to_bevy_ui_entity.insert(id, entity);
|
||||||
|
bevy_ui_entity_to_element_id.insert(entity, id);
|
||||||
|
}
|
||||||
Mutation::CreatePlaceholder { id } => {
|
Mutation::CreatePlaceholder { id } => {
|
||||||
let entity = world.spawn(NodeBundle::default()).id();
|
let entity = world.spawn(NodeBundle::default()).id();
|
||||||
element_id_to_bevy_ui_entity.insert(id, entity);
|
element_id_to_bevy_ui_entity.insert(id, entity);
|
||||||
|
@ -102,7 +109,20 @@ pub fn apply_mutations(
|
||||||
element_id_to_bevy_ui_entity.remove(&existing_element_id);
|
element_id_to_bevy_ui_entity.remove(&existing_element_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Mutation::InsertAfter { id, m } => todo!(),
|
Mutation::InsertAfter { id, m } => {
|
||||||
|
let entity = element_id_to_bevy_ui_entity[&id];
|
||||||
|
let parent = world.entity(entity).get::<Parent>().unwrap().get();
|
||||||
|
let mut parent = world.entity_mut(parent);
|
||||||
|
|
||||||
|
let index = parent
|
||||||
|
.get::<Children>()
|
||||||
|
.unwrap()
|
||||||
|
.iter()
|
||||||
|
.position(|child| *child == entity)
|
||||||
|
.unwrap();
|
||||||
|
let new = stack.drain((stack.len() - m)..).collect::<Vec<Entity>>();
|
||||||
|
parent.insert_children(index + 1, &new);
|
||||||
|
}
|
||||||
Mutation::InsertBefore { id, m } => todo!(),
|
Mutation::InsertBefore { id, m } => todo!(),
|
||||||
Mutation::SetAttribute {
|
Mutation::SetAttribute {
|
||||||
name,
|
name,
|
||||||
|
|
Loading…
Reference in a new issue