sync selection between editor and storyteller

This commit is contained in:
rewin
2024-01-17 20:10:14 +03:00
parent 8320297874
commit cfe849959e
3 changed files with 36 additions and 2 deletions
+1 -1
View File
@@ -32,7 +32,7 @@ web-sys = { version = "0.3.65", optional = true, features = [
"HtmlElement",
"Window",
] }
space_editor = {git = "https://github.com/rewin123/space_editor", rev = "a6804e63428e29d858d8b5c0eabeb4fe7b2aa7f4"}
space_editor = {git = "https://github.com/rewin123/space_editor", rev = "f3e2e0de52540125b79dad98656382ff473dedc2"}
[features]
wasm = [
+6 -1
View File
@@ -318,8 +318,13 @@ fn read_mouse_delta(
// TODO: Make it configurable
fn send_undo_event(mut events: EventWriter<UndoRedo>, keyboard: Res<Input<KeyCode>>) {
if keyboard.pressed(KeyCode::ControlLeft) && keyboard.just_pressed(KeyCode::Z) {
if keyboard.pressed(KeyCode::ControlLeft) && keyboard.just_pressed(KeyCode::Z) && !keyboard.pressed(KeyCode::ShiftLeft) {
events.send(UndoRedo::Undo);
info!("Undo event sent");
}
if keyboard.pressed(KeyCode::ControlLeft) && keyboard.just_pressed(KeyCode::Z) && keyboard.pressed(KeyCode::ShiftLeft) {
events.send(UndoRedo::Redo);
info!("Redo event sent");
}
}
+29
View File
@@ -32,6 +32,11 @@ impl Plugin for SelectionPlugin {
.map(bevy::utils::error)
.run_if(resource_changed_or_removed::<Selection>()),
);
app.add_systems(
Update,
sync_editor_selected
);
}
}
@@ -44,6 +49,30 @@ pub struct Selected;
#[derive(Resource, Deref, DerefMut, Debug)]
pub struct Selection(Entity);
fn sync_editor_selected(
mut cmd: Commands,
q_new_selected: Query<Entity, (Added<Selected>, Without<space_editor::prelude::Selected>)>,
q_editor_selected: Query<Entity, With<space_editor::prelude::Selected>>,
q_selected: Query<Entity, With<Selected>>,
q_added_editor_selected: Query<Entity, (Without<Selected>, Added<space_editor::prelude::Selected>)>,
) {
for ent in q_new_selected.iter() {
for ed_ent in q_editor_selected.iter() {
cmd.entity(ed_ent).remove::<space_editor::prelude::Selected>();
}
cmd.entity(ent).insert(space_editor::prelude::Selected);
}
for ent in q_added_editor_selected.iter() {
cmd.entity(ent).insert(Selected);
cmd.insert_resource(Selection(ent));
for ent in q_selected.iter() {
cmd.entity(ent).remove::<Selected>();
}
}
}
fn tag_scene_elements(
mut cmd: Commands,
q_scene_elements: Query<(Entity, &Children), (With<SceneElement>, Without<Selectable>)>,