Scene in memory persistance and debug tools (#24)

![image](https://github.com/storytold/storyteller-bevy/assets/10954133/10eb5c33-2154-4e9d-95ce-1d8e8b822d22)
Debug tools example

---------

Co-authored-by: Danny McGee <dannymcgee@gmail.com>
This commit is contained in:
rewin
2024-02-02 22:51:18 +03:00
committed by GitHub
parent 2df86eaf58
commit 8f0b916eaa
15 changed files with 415 additions and 388 deletions
+18 -1
View File
@@ -3,13 +3,14 @@ use bevy::{
prelude::*,
render::view::RenderLayers,
};
use space_editor::space_editor_ui::NotShowCamera;
use crate::MainCamera;
use super::GIZMO_RENDER_LAYER;
#[derive(Component)]
pub(super) struct GizmoCamera;
pub struct GizmoCamera;
pub(super) fn spawn_gizmo_camera(
mut cmd: Commands,
@@ -35,6 +36,22 @@ pub(super) fn spawn_gizmo_camera(
},
RenderLayers::layer(GIZMO_RENDER_LAYER),
Fxaa::default(),
NotShowCamera,
));
});
}
pub(super) fn sync_gizmo_and_main_cameras(
q_main_camera: Query<&Camera, (With<MainCamera>, Without<GizmoCamera>)>,
mut q_gizmo_camera: Query<&mut Camera, (With<GizmoCamera>, Without<MainCamera>)>,
) {
let Ok(main_cam) = q_main_camera.get_single() else {
return;
};
let Ok(mut gizmo_cam) = q_gizmo_camera.get_single_mut() else {
return;
};
gizmo_cam.viewport = main_cam.viewport.clone();
}
+8 -4
View File
@@ -13,7 +13,7 @@ use self::{
use super::{Selection, TransformMode, TransformType};
mod camera;
pub mod camera;
mod combo;
mod common;
mod resources;
@@ -62,6 +62,10 @@ impl Plugin for GizmoPlugin {
normalize_gizmo_scale.after(CameraMotionSystem),
),
);
//sync camera viewports
app.add_systems(Update, camera::sync_gizmo_and_main_cameras);
app.add_systems(
PostUpdate,
update_ss_ring_rotation.after(TransformSystem::TransformPropagate),
@@ -139,10 +143,10 @@ fn spawn_gizmo(
fn sync_gizmo_transform(
mut cmd: Commands,
mut q_gizmo: Query<(&mut Transform, &TransformGizmo)>,
mut q_gizmo: Query<(Entity, &mut Transform, &TransformGizmo)>,
q_targets: Query<&GlobalTransform>,
) {
for (mut transform, gizmo) in q_gizmo.iter_mut() {
for (ent, mut transform, gizmo) in q_gizmo.iter_mut() {
if let Ok(target) = q_targets.get(gizmo.target) {
match gizmo.transform_space {
super::TransformSpace::Local => {
@@ -155,7 +159,7 @@ fn sync_gizmo_transform(
}
}
} else {
cmd.entity(gizmo.target).despawn_recursive();
cmd.entity(ent).despawn_recursive();
}
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
use bevy::prelude::*;
mod gizmos;
pub mod gizmos;
pub mod selection;
pub mod transformation;
+32
View File
@@ -25,6 +25,8 @@ impl Plugin for SelectionPlugin {
.after(SceneSpawnerSystem),
);
app.add_systems(Update, tag_scene_elements);
#[cfg(feature = "wasm")]
app.add_systems(
Update,
@@ -36,6 +38,8 @@ impl Plugin for SelectionPlugin {
.map(bevy::utils::error)
.run_if(resource_changed_or_removed::<Selection>()),
);
app.add_systems(Update, sync_editor_selected);
}
}
@@ -48,6 +52,34 @@ 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>)>,