diff --git a/Cargo.lock b/Cargo.lock index 506bd01..6185ba8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -409,6 +409,19 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-compat" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f68a707c1feb095d8c07f8a65b9f506b117d30af431cab89374357de7c11461b" +dependencies = [ + "futures-core", + "futures-io", + "once_cell", + "pin-project-lite", + "tokio", +] + [[package]] name = "async-dup" version = "1.2.4" @@ -1676,6 +1689,16 @@ dependencies = [ "thiserror", ] +[[package]] +name = "bevy_tweening" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e85ee55885db7a35d9bdd3b27ef9d9e36f7188801dc24ad5d3a013ee62b0579a" +dependencies = [ + "bevy", + "interpolation", +] + [[package]] name = "bevy_ui" version = "0.13.1" @@ -6059,7 +6082,7 @@ dependencies = [ [[package]] name = "space_bevy_xpbd_plugin" version = "0.5.0" -source = "git+https://github.com/rewin123/space_editor?rev=7b93e21ee1eb8a42418890b6cd525eaa7db43b95#7b93e21ee1eb8a42418890b6cd525eaa7db43b95" +source = "git+https://github.com/rewin123/space_editor?rev=948090e407558017874de491c5297aa1d2e9d21e#948090e407558017874de491c5297aa1d2e9d21e" dependencies = [ "bevy", "bevy-inspector-egui", @@ -6070,7 +6093,7 @@ dependencies = [ [[package]] name = "space_editor" version = "0.5.0" -source = "git+https://github.com/rewin123/space_editor?rev=7b93e21ee1eb8a42418890b6cd525eaa7db43b95#7b93e21ee1eb8a42418890b6cd525eaa7db43b95" +source = "git+https://github.com/rewin123/space_editor?rev=948090e407558017874de491c5297aa1d2e9d21e#948090e407558017874de491c5297aa1d2e9d21e" dependencies = [ "bevy", "space_bevy_xpbd_plugin", @@ -6081,7 +6104,7 @@ dependencies = [ [[package]] name = "space_editor_core" version = "0.5.0" -source = "git+https://github.com/rewin123/space_editor?rev=7b93e21ee1eb8a42418890b6cd525eaa7db43b95#7b93e21ee1eb8a42418890b6cd525eaa7db43b95" +source = "git+https://github.com/rewin123/space_editor?rev=948090e407558017874de491c5297aa1d2e9d21e#948090e407558017874de491c5297aa1d2e9d21e" dependencies = [ "bevy", "bevy_egui", @@ -6096,7 +6119,7 @@ dependencies = [ [[package]] name = "space_editor_ui" version = "0.5.0" -source = "git+https://github.com/rewin123/space_editor?rev=7b93e21ee1eb8a42418890b6cd525eaa7db43b95#7b93e21ee1eb8a42418890b6cd525eaa7db43b95" +source = "git+https://github.com/rewin123/space_editor?rev=948090e407558017874de491c5297aa1d2e9d21e#948090e407558017874de491c5297aa1d2e9d21e" dependencies = [ "anyhow", "bevy", @@ -6124,7 +6147,7 @@ dependencies = [ [[package]] name = "space_persistence" version = "0.5.0" -source = "git+https://github.com/rewin123/space_editor?rev=7b93e21ee1eb8a42418890b6cd525eaa7db43b95#7b93e21ee1eb8a42418890b6cd525eaa7db43b95" +source = "git+https://github.com/rewin123/space_editor?rev=948090e407558017874de491c5297aa1d2e9d21e#948090e407558017874de491c5297aa1d2e9d21e" dependencies = [ "bevy", "ron", @@ -6134,7 +6157,7 @@ dependencies = [ [[package]] name = "space_prefab" version = "0.5.0" -source = "git+https://github.com/rewin123/space_editor?rev=7b93e21ee1eb8a42418890b6cd525eaa7db43b95#7b93e21ee1eb8a42418890b6cd525eaa7db43b95" +source = "git+https://github.com/rewin123/space_editor?rev=948090e407558017874de491c5297aa1d2e9d21e#948090e407558017874de491c5297aa1d2e9d21e" dependencies = [ "bevy", "bevy-inspector-egui", @@ -6148,7 +6171,7 @@ dependencies = [ [[package]] name = "space_shared" version = "0.5.0" -source = "git+https://github.com/rewin123/space_editor?rev=7b93e21ee1eb8a42418890b6cd525eaa7db43b95#7b93e21ee1eb8a42418890b6cd525eaa7db43b95" +source = "git+https://github.com/rewin123/space_editor?rev=948090e407558017874de491c5297aa1d2e9d21e#948090e407558017874de491c5297aa1d2e9d21e" dependencies = [ "anyhow", "bevy", @@ -6161,7 +6184,7 @@ dependencies = [ [[package]] name = "space_undo" version = "0.5.0" -source = "git+https://github.com/rewin123/space_editor?rev=7b93e21ee1eb8a42418890b6cd525eaa7db43b95#7b93e21ee1eb8a42418890b6cd525eaa7db43b95" +source = "git+https://github.com/rewin123/space_editor?rev=948090e407558017874de491c5297aa1d2e9d21e#948090e407558017874de491c5297aa1d2e9d21e" dependencies = [ "bevy", "pretty-type-name", @@ -6287,12 +6310,14 @@ name = "studio" version = "0.1.0" dependencies = [ "anyhow", + "async-compat", "bevy", "bevy-inspector-egui", "bevy_mod_outline", "bevy_mod_picking", "bevy_mod_raycast", "bevy_rapier3d", + "bevy_tweening", "bevy_web_asset", "bitflags 2.5.0", "bytemuck", @@ -6312,6 +6337,7 @@ dependencies = [ "serde_repr", "space_editor", "studio-bvh", + "uuid", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", diff --git a/studio/Cargo.toml b/studio/Cargo.toml index d8c3aa6..f31adc1 100644 --- a/studio/Cargo.toml +++ b/studio/Cargo.toml @@ -48,13 +48,14 @@ futures = "0.3.30" image = "0.25.0" bytemuck = "1.14.1" -space_editor = {git = "https://github.com/rewin123/space_editor", rev = "7b93e21ee1eb8a42418890b6cd525eaa7db43b95"} +space_editor = {git = "https://github.com/rewin123/space_editor", rev = "948090e407558017874de491c5297aa1d2e9d21e"} anyhow.workspace = true serde_repr = "0.1.18" wasm-bindgen-futures = "0.4" async-compat = "0.2" uuid = { version = "1", features = ["v4", "serde"]} +bevy_tweening = "0.10.0" [dependencies.reqwest] version = "0.12.2" diff --git a/studio/src/anim/timeline_animation.rs b/studio/src/anim/timeline_animation.rs index 97ae6f9..3c4cfb9 100644 --- a/studio/src/anim/timeline_animation.rs +++ b/studio/src/anim/timeline_animation.rs @@ -34,7 +34,7 @@ impl Plugin for TimelinePlugin { .register_type::() .add_event::() .add_event::() - .add_state::(); + .init_state::(); app.insert_resource(GlobalSeekTime { time: 0., @@ -375,7 +375,7 @@ fn process_auto_key( for entity in &changed { info!("Setting Auto Key"); - event.send(KeyframeInteractionEvent::RecordKeyframe { target: entity }) + event.send(KeyframeInteractionEvent::RecordKeyframe { target: entity }); } } diff --git a/studio/src/input.rs b/studio/src/input.rs index a519605..7cd6645 100644 --- a/studio/src/input.rs +++ b/studio/src/input.rs @@ -50,8 +50,8 @@ impl Plugin for StudioInputPlugin { /// Logs all `InputAction`s emitted, along with the input state at the time they /// were fired, with `debug` verbosity. fn log_input_actions( - ri_keyboard: Res>, - ri_mouse_buttons: Res>, + ri_keyboard: Res>, + ri_mouse_buttons: Res>, mut er_input_actions: EventReader, ) { if er_input_actions.is_empty() { @@ -78,7 +78,7 @@ fn log_input_actions( let mod_keys = [AltLeft, AltRight, ShiftLeft, ControlLeft, ControlRight] .into_iter() .collect::>(); - let action_keys = [W, A, S, D, E, Q, Escape, Grave, Delete, F] + let action_keys = [KeyCode::KeyW, KeyCode::KeyA, KeyCode::KeyS, KeyCode::KeyD, KeyCode::KeyE, KeyCode::KeyQ, KeyCode::Escape, KeyCode::Quote, KeyCode::Delete, KeyCode::KeyF] .into_iter() .collect::>(); diff --git a/studio/src/interaction/gizmos/resources.rs b/studio/src/interaction/gizmos/resources.rs index fec5462..e58e32c 100644 --- a/studio/src/interaction/gizmos/resources.rs +++ b/studio/src/interaction/gizmos/resources.rs @@ -38,22 +38,24 @@ pub(super) struct GizmoMats { pub rotate_ss: Handle, } +#[allow(deprecated)] pub(super) fn init_resources( mut cmd: Commands, mut ra_meshes: ResMut>, mut ra_mats: ResMut>, ) { - let translate_line = ra_meshes.add(Mesh::from(shape::Cylinder { + + let translate_line = ra_meshes.add(Cylinder { radius: 0.03, - height: 0.8, - resolution: 6, - segments: 1, - })); + half_height: 0.4, + }); + let translate_arrow = ra_meshes.add(Mesh::from(geo::Cone { radius: 0.115, length: 0.4, resolution: 12, })); + let translate_plane = ra_meshes.add(Mesh::from(geo::Plane2Sided { size: 0.25 })); let translate_ss = ra_meshes.add( Mesh::try_from(shape::Icosphere { diff --git a/studio/src/remote/reader.rs b/studio/src/remote/reader.rs index 6798468..685666d 100644 --- a/studio/src/remote/reader.rs +++ b/studio/src/remote/reader.rs @@ -21,10 +21,10 @@ impl RemoteAssetReader { let token = path .ext_file_prefix() .ok_or_else(|| { - AssetReaderError::Io(std::io::Error::new( + AssetReaderError::Io(Arc::new(std::io::Error::new( ErrorKind::Other, format!("Failed to parse token from '{path:?}'"), - )) + ))) })? .to_str() .unwrap(); @@ -40,10 +40,10 @@ impl RemoteAssetReader { .json::() .await .map_err(IntoError::::into), - other => Err(AssetReaderError::Io(std::io::Error::new( + other => Err(AssetReaderError::Io(Arc::new(std::io::Error::new( ErrorKind::Other, format!("Status Code from endpoint: {other}"), - ))), + )))), }?; let url = format!( @@ -69,10 +69,10 @@ impl RemoteAssetReader { .map_err(IntoError::::into)? .into_iter() .collect::>()), - other => Err(AssetReaderError::Io(std::io::Error::new( + other => Err(AssetReaderError::Io(Arc::new(std::io::Error::new( ErrorKind::Other, format!("Status Code from bucket URL: {other}"), - ))), + )))), }?; let reader: Box = Box::new(VecReader::new(bytes)); diff --git a/studio/src/scene.rs b/studio/src/scene.rs index 59ef608..3fc35ab 100644 --- a/studio/src/scene.rs +++ b/studio/src/scene.rs @@ -12,7 +12,7 @@ use bevy::{ prelude::*, render::{camera::RenderTarget, primitives::Aabb}, scene::InstanceId, - utils::{EntityHashSet, HashSet}, + utils::HashSet, }; #[cfg(feature = "wasm")] use serde_repr::{Deserialize_repr, Serialize_repr}; @@ -461,7 +461,7 @@ fn tag_scene_elements( fn autoplay_animations( mut cmd: Commands, mut l_done: Local>, - mut l_animating: Local>, + mut l_animating: Local>, ra_gltfs: Res>, ra_anims: Res>, q_prefabs: Query<(&GltfPrefab, &Handle)>, diff --git a/studio/src/screenshot.rs b/studio/src/screenshot.rs index 7a1cbc8..93b6544 100644 --- a/studio/src/screenshot.rs +++ b/studio/src/screenshot.rs @@ -188,7 +188,7 @@ fn prepare_screen_capture_buffers( let size = texture.size(); let format = texture.format(); let bytes_per_row = - (size.width / format.block_dimensions().0) * format.block_size(None).unwrap(); + (size.width / format.block_dimensions().0) * format.block_copy_size(None).unwrap(); let padded_bytes_per_row = RenderDevice::align_copy_bytes_per_row(bytes_per_row as usize) as u32; diff --git a/studio/src/skybox.rs b/studio/src/skybox.rs index 8e63e72..104ab93 100644 --- a/studio/src/skybox.rs +++ b/studio/src/skybox.rs @@ -1,5 +1,3 @@ -use core::fmt; - use bevy::{ asset::LoadState, prelude::*, @@ -118,21 +116,21 @@ fn spawn_skybox( // cmd.remove_resource::(); } -struct SkyboxPaths { - cubemap: String, - env_diffuse: String, - env_specular: String, -} +// struct SkyboxPaths { +// cubemap: String, +// env_diffuse: String, +// env_specular: String, +// } -impl SkyboxPaths { - fn new(name: impl fmt::Display) -> Self { - Self { - cubemap: format!("skyboxes/{name}.hdr"), - env_diffuse: format!("skyboxes/{name}_diffuse.zstd.ktx2"), - env_specular: format!("skyboxes/{name}_specular.zstd.ktx2"), - } - } -} +// impl SkyboxPaths { +// fn new(name: impl fmt::Display) -> Self { +// Self { +// cubemap: format!("skyboxes/{name}.hdr"), +// env_diffuse: format!("skyboxes/{name}_diffuse.zstd.ktx2"), +// env_specular: format!("skyboxes/{name}_specular.zstd.ktx2"), +// } +// } +// } #[cfg(feature = "wasm")] mod wasm { diff --git a/studio/src/ui/inspector.rs b/studio/src/ui/inspector.rs index 5d6f3df..5962477 100644 --- a/studio/src/ui/inspector.rs +++ b/studio/src/ui/inspector.rs @@ -11,12 +11,9 @@ use serde::{Deserialize, Serialize}; use serde_json::{self, json, Map as JsonMap, Value as JsonValue}; use space_editor::{ space_editor_ui::{ - editor_tab::{EditorTab, EditorTabName}, - EditorUiAppExt, - }, - space_prefab::{ - component::MeshPrimitivePrefab, editor_registry::EditorRegistryExt, save::SaveState, + editor_tab::{EditorTab, EditorTabName}, ui_plugin::EditorUiAppExt }, + space_prefab::{component::MeshPrimitive3dPrefab, editor_registry::EditorRegistryExt, save::SaveState}, }; use wasm_bindgen::prelude::*; @@ -66,7 +63,7 @@ impl Plugin for InspectorPlugin { app.register_inspect::(); app.register_inspect::(); - app.register_inspect::(); + app.register_inspect::(); //register standart material { @@ -627,7 +624,7 @@ fn serialize_standart_materal( ev_inspect.clear(); - if let Some((target, handle)) = r_selection + if let Some((_, handle)) = r_selection .as_ref() .and_then(|selection| find_handle_in_self_or_children(***selection, &q_children, &q_m)) .and_then(|target| q_m.get(target).ok().map(|h| (target, h.clone()))) diff --git a/studio/src/world_grid.rs b/studio/src/world_grid.rs index 2c3256e..ea9d27a 100644 --- a/studio/src/world_grid.rs +++ b/studio/src/world_grid.rs @@ -37,10 +37,7 @@ fn spawn_world_grid( mut ra_meshes: ResMut>, mut ra_mat_proc_grid: ResMut>, ) { - let plane = ra_meshes.add(Mesh::from(shape::Plane { - size: 200.0, - subdivisions: 0, - })); + let plane = ra_meshes.add(Plane3d::default()); let proc_grid = ra_mat_proc_grid.add(ProceduralGridMaterial {}); cmd.spawn(( @@ -53,7 +50,7 @@ fn spawn_world_grid( MaterialMeshBundle { mesh: plane.clone(), material: proc_grid.clone(), - transform: Transform::IDENTITY, + transform: Transform::IDENTITY.with_scale(Vec3::splat(200.0)), ..default() }, NotShadowCaster,