From baa9431c39f8709c57d6e228ba027b961310db63 Mon Sep 17 00:00:00 2001 From: Lee-Orr Date: Tue, 12 Mar 2024 14:20:03 -0400 Subject: [PATCH] detect light and other scene elements --- studio/src/anim/timeline_animation.rs | 21 +++++++++++++++++---- studio/src/scene.rs | 1 + 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/studio/src/anim/timeline_animation.rs b/studio/src/anim/timeline_animation.rs index 82d83c9..a848168 100644 --- a/studio/src/anim/timeline_animation.rs +++ b/studio/src/anim/timeline_animation.rs @@ -137,7 +137,7 @@ mod wasm { use serde::{Deserialize, Serialize}; use wasm_bindgen::prelude::*; - use crate::wasm::{StaticBuffer, WasmMessageBuffer}; + use crate::{scene::SceneElement, wasm::{StaticBuffer, WasmMessageBuffer}}; use super::{AnimationTarget, GlobalSeekTime, TimelineEvent}; @@ -177,7 +177,7 @@ mod wasm { export interface UpdateAnimationTargets extends CustomEvent { type: "update-animation-targets", details: { - added: Record, + added: Record, removed: string[] } } @@ -192,6 +192,10 @@ mod wasm { const CAMERA : &str = "camera"; const TRANSFORM : &str = "transform"; + const LIGHT : &str = "light"; + const BONE : &str = "bone"; + const SKELETON : &str = "skeleton"; + const MESH : &str = "mesh"; #[derive(Serialize, Deserialize)] struct AddedAnimationTargetRecordItem { @@ -210,7 +214,8 @@ mod wasm { pub(super) fn notify_updated_animation_targets( q_window: Query<&Window, With>, q_cameras: Query<(Entity, Option<&Name>), (Added, With)>, - q_transforms: Query<(Entity, Option<&Name>), (Added, With, Without)>, + q_scene_elements: Query<(Entity, Option<&Name>, &SceneElement), (Added, Without)>, + q_transforms: Query<(Entity, Option<&Name>), (Added, With, Without, Without)>, mut removed: bevy::prelude::RemovedComponents ) -> Result<(), String> { let Ok(window) = q_window.get_single() else { @@ -219,7 +224,15 @@ mod wasm { let added = q_transforms.iter().map(|(entity, name)| { (entity, AddedAnimationTargetRecordItem { name: name.map(|v| v.to_string()), target_type: TRANSFORM.to_owned()}) - }).chain(q_cameras.iter().map(|(entity, name)| (entity, AddedAnimationTargetRecordItem { name: name.map(|v| v.to_string()), target_type: CAMERA.to_owned()}))).collect::>(); + }).chain(q_cameras.iter().map(|(entity, name)| (entity, AddedAnimationTargetRecordItem { name: name.map(|v| v.to_string()), target_type: CAMERA.to_owned()}))) + .chain(q_scene_elements.iter().map(|(entity, name, element)| (entity, AddedAnimationTargetRecordItem { name: name.map(|v| v.to_string()), target_type: match element { + SceneElement::Generic => TRANSFORM, + SceneElement::Mesh => MESH, + SceneElement::Skeleton => SKELETON, + SceneElement::Bone => BONE, + SceneElement::Light => LIGHT, + SceneElement::Camera => CAMERA, + }.to_string()}))).collect::>(); let removed = removed.read().collect::>(); diff --git a/studio/src/scene.rs b/studio/src/scene.rs index c9b0e3f..32abc05 100644 --- a/studio/src/scene.rs +++ b/studio/src/scene.rs @@ -99,6 +99,7 @@ impl Plugin for ScenePlugin { fn minimal_scene_setup(mut cmd: Commands) { cmd.spawn(( Name::new("Directional Light"), + AnimationTarget, DirectionalLightBundle { directional_light: DirectionalLight { shadows_enabled: false,