From cd0226f0fca87ff02919cf4b11d19af1143a4495 Mon Sep 17 00:00:00 2001 From: Brooks Palin Date: Tue, 19 Dec 2023 17:41:42 -0700 Subject: [PATCH] added the studio mode viewing or editing --- studio-web/src/lib/viewer.element.ts | 2 ++ studio/src/interaction/selection.rs | 7 +++++-- studio/src/lib.rs | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/studio-web/src/lib/viewer.element.ts b/studio-web/src/lib/viewer.element.ts index d81cd7d..e2a00aa 100644 --- a/studio-web/src/lib/viewer.element.ts +++ b/studio-web/src/lib/viewer.element.ts @@ -14,6 +14,7 @@ export class ViewerElement extends LitElement { @property() objectId?: string; @property() skyboxId?: string; + @property() viewmode?: string = "viewer" @inject(CANVAS_PROVIDER) _canvasProvider?: CanvasProvider; @@ -77,6 +78,7 @@ export class ViewerElement extends LitElement { `#${this._canvasProvider!.canvasId}`, "Storyteller Studio", new ViewportSize(width, height), + this.viewmode ); } catch (err) { if (!(err as Error).message?.startsWith("Using exceptions for control flow")) diff --git a/studio/src/interaction/selection.rs b/studio/src/interaction/selection.rs index fa600fe..554f797 100644 --- a/studio/src/interaction/selection.rs +++ b/studio/src/interaction/selection.rs @@ -6,7 +6,7 @@ use bevy_mod_picking::{prelude::Pointer, selection::Select, PickableBundle}; use crate::{ input::{self, Action, InputAction, Lifecycle}, - scene::{SceneElement, SceneSpawnerSystem, SceneState}, + scene::{SceneElement, SceneSpawnerSystem, SceneState}, StudioMode, }; pub struct SelectionPlugin; @@ -48,6 +48,7 @@ fn tag_scene_elements( mut cmd: Commands, q_scene_elements: Query<(Entity, &Children), (With, Without)>, q_primitives: Query<&Handle>, + r_studio_mode : Res ) { for (ent, children) in q_scene_elements.iter() { cmd.entity(ent).insert(Selectable); @@ -56,7 +57,9 @@ fn tag_scene_elements( .iter() .filter(|child| q_primitives.contains(**child)) { - cmd.entity(ent_child).insert(PickableBundle::default()); + if let StudioMode::Editor = *r_studio_mode { + cmd.entity(ent_child).insert(PickableBundle::default()); + } } } } diff --git a/studio/src/lib.rs b/studio/src/lib.rs index 0fad6f8..7eb99ad 100644 --- a/studio/src/lib.rs +++ b/studio/src/lib.rs @@ -103,12 +103,19 @@ pub fn start_viewer( canvas_selector: &str, canvas_alt: &str, viewport_size: ViewportSize, + viewer_mode: &str, ) { #[cfg(feature = "wasm")] console_error_panic_hook::set_once(); let object_id = object_id.to_string(); let skybox_id = skybox_id.to_string(); + let studio_mode = match viewer_mode { + "editor" => StudioMode::Editor, + "viewer" => StudioMode::Viewer, + //Fixme: Unclear how we should hadle errors like this: Should we choose a default value? + _ => panic!("Invalid viewer mode: {}", viewer_mode), + }; let mut app = App::new(); app.add_plugins(( @@ -139,6 +146,7 @@ pub fn start_viewer( Startup, move |mut cmd: Commands, mut ew: EventWriter| { cmd.insert_resource(SkyboxId(skybox_id.clone())); + cmd.insert_resource(studio_mode); ew.send(LoadSceneEvent(object_id.clone())); }, ); @@ -148,3 +156,9 @@ pub fn start_viewer( app.run(); } + +#[derive(Resource, Clone, Copy, PartialEq, Eq, Debug)] +pub enum StudioMode { + Editor, + Viewer +} \ No newline at end of file