mirror of
https://github.com/storytold/storyteller-bevy.git
synced 2026-10-17 00:13:17 +00:00
added the studio mode viewing or editing
This commit is contained in:
@@ -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"))
|
||||
|
||||
@@ -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<SceneElement>, Without<Selectable>)>,
|
||||
q_primitives: Query<&Handle<Mesh>>,
|
||||
r_studio_mode : Res<StudioMode>
|
||||
) {
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<LoadSceneEvent>| {
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user