From fd35acc498dca9b3e4849ee1973c1322dfbba4f1 Mon Sep 17 00:00:00 2001 From: rewin Date: Fri, 12 Jan 2024 20:59:58 +0300 Subject: [PATCH] cargo fmt --- studio/src/camera_controller.rs | 1 - studio/src/input.rs | 20 +- studio/src/interaction/gizmos/combo.rs | 275 +++++++------- studio/src/interaction/gizmos/common.rs | 14 +- studio/src/interaction/gizmos/mod.rs | 33 +- studio/src/interaction/gizmos/rotation.rs | 175 +++++---- studio/src/interaction/gizmos/translation.rs | 359 ++++++++++--------- studio/src/lib.rs | 7 +- studio/src/scene.rs | 4 +- 9 files changed, 441 insertions(+), 447 deletions(-) diff --git a/studio/src/camera_controller.rs b/studio/src/camera_controller.rs index 8a6902b..6c94020 100644 --- a/studio/src/camera_controller.rs +++ b/studio/src/camera_controller.rs @@ -100,7 +100,6 @@ fn camera_control_kinematic( Lifecycle::Stop => any_stopped = true, } - match motion { Pan(delta) => do_pan(proj, &window, *delta, &mut xform, &mut controller), Zoom(delta) => do_zoom(&window, *delta, &mut xform, &mut controller), diff --git a/studio/src/input.rs b/studio/src/input.rs index 7c3fdbf..65f4370 100644 --- a/studio/src/input.rs +++ b/studio/src/input.rs @@ -13,9 +13,8 @@ impl Plugin for StudioInputPlugin { fn build(&self, app: &mut App) { app.add_event::(); - // Reading each frame of the mouse delta allows - // to get rid of the bug that delta is counted from the last reading, + // to get rid of the bug that delta is counted from the last reading, // which leads to camera jumps if you move the mouse between clicks app.add_systems( PreUpdate, @@ -32,7 +31,7 @@ impl Plugin for StudioInputPlugin { translate_debug_toggle, translate_dcc_camera_events, translate_fps_camera_events, - send_undo_event + send_undo_event, ) .in_set(StudioInputSystem) .after(bevy::input::InputSystem) @@ -55,7 +54,7 @@ pub enum Lifecycle { pub enum Action { Camera(CameraMotion), Selection(Selection), - ToggleDebug + ToggleDebug, } #[derive(Clone, Copy)] @@ -85,7 +84,6 @@ impl From for Action { } } - // TODO: Make the bindings of raw device inputs to InputActions configurable fn translate_selection_events(keyboard: Res>, mut input: EventWriter) { @@ -308,22 +306,20 @@ impl LastFrameMouseDelta { } } -fn read_mouse_delta(mut mouse_motion: EventReader, mut last_delta: ResMut) { +fn read_mouse_delta( + mut mouse_motion: EventReader, + mut last_delta: ResMut, +) { let delta = mouse_motion .read() .fold(Vec2::ZERO, |accum, current| accum + current.delta); last_delta.0 = delta; } - // TODO: Make it configurable -fn send_undo_event( - mut events : EventWriter, - keyboard: Res>, -) { +fn send_undo_event(mut events: EventWriter, keyboard: Res>) { if keyboard.pressed(KeyCode::ControlLeft) && keyboard.just_pressed(KeyCode::Z) { events.send(UndoRedo::Undo); info!("Undo event sent"); } } - diff --git a/studio/src/interaction/gizmos/combo.rs b/studio/src/interaction/gizmos/combo.rs index fb8828e..ecdb808 100644 --- a/studio/src/interaction/gizmos/combo.rs +++ b/studio/src/interaction/gizmos/combo.rs @@ -20,143 +20,148 @@ pub(super) fn spawn_combo_translation_rotation_gizmo( meshes: &GizmoMeshes, mats: &GizmoMats, ) { - cmd.spawn(TransformGizmoBundle::new(target, target_global_transform, space, normalizing_scale)) - .with_children(|cmd| { - use super::{ROT_X, ROT_Y, ROT_Z}; + cmd.spawn(TransformGizmoBundle::new( + target, + target_global_transform, + space, + normalizing_scale, + )) + .with_children(|cmd| { + use super::{ROT_X, ROT_Y, ROT_Z}; - // Center sphere - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - TranslationWidget::ScreenSpace, - MaterialMeshBundle { - mesh: meshes.translate_ss.clone(), - material: mats.translate_ss.clone(), - transform: Transform::IDENTITY, - ..default() - }, - On::>::run(on_gizmo_element_hover), - On::>::run(on_gizmo_element_unhover), - On::>::run(on_translation_start), - On::>::run(on_translate), - On::>::run(on_translation_end), - )); + // Center sphere + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + TranslationWidget::ScreenSpace, + MaterialMeshBundle { + mesh: meshes.translate_ss.clone(), + material: mats.translate_ss.clone(), + transform: Transform::IDENTITY, + ..default() + }, + On::>::run(on_gizmo_element_hover), + On::>::run(on_gizmo_element_unhover), + On::>::run(on_translation_start), + On::>::run(on_translate), + On::>::run(on_translation_end), + )); - // Rotate X - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - RotationWidget::Axis(Vec3::X), - MaterialMeshBundle { - mesh: meshes.rotate_ring.clone(), - material: mats.rotate_x.clone(), - transform: Transform::from_rotation(ROT_X), - ..default() - }, - On::>::run(on_gizmo_element_hover), - On::>::run(on_gizmo_element_unhover), - On::>::run(on_rotation_start), - On::>::run(on_rotate), - On::>::run(on_rotation_end), - )); - // Translate X - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - TranslationWidget::Axis(Vec3::X), - MaterialMeshBundle { - mesh: meshes.translate_arrow.clone(), - material: mats.translate_x.clone(), - transform: Transform { - rotation: ROT_X, - translation: vec3(1.2, 0., 0.), - ..default() - }, - ..default() - }, - On::>::run(on_gizmo_element_hover), - On::>::run(on_gizmo_element_unhover), - On::>::run(on_translation_start), - On::>::run(on_translate), - On::>::run(on_translation_end), - )); + // Rotate X + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + RotationWidget::Axis(Vec3::X), + MaterialMeshBundle { + mesh: meshes.rotate_ring.clone(), + material: mats.rotate_x.clone(), + transform: Transform::from_rotation(ROT_X), + ..default() + }, + On::>::run(on_gizmo_element_hover), + On::>::run(on_gizmo_element_unhover), + On::>::run(on_rotation_start), + On::>::run(on_rotate), + On::>::run(on_rotation_end), + )); + // Translate X + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + TranslationWidget::Axis(Vec3::X), + MaterialMeshBundle { + mesh: meshes.translate_arrow.clone(), + material: mats.translate_x.clone(), + transform: Transform { + rotation: ROT_X, + translation: vec3(1.2, 0., 0.), + ..default() + }, + ..default() + }, + On::>::run(on_gizmo_element_hover), + On::>::run(on_gizmo_element_unhover), + On::>::run(on_translation_start), + On::>::run(on_translate), + On::>::run(on_translation_end), + )); - // Rotate Y - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - RotationWidget::Axis(Vec3::Y), - MaterialMeshBundle { - mesh: meshes.rotate_ring.clone(), - material: mats.rotate_y.clone(), - transform: Transform::from_rotation(ROT_Y), - ..default() - }, - On::>::run(on_gizmo_element_hover), - On::>::run(on_gizmo_element_unhover), - On::>::run(on_rotation_start), - On::>::run(on_rotate), - On::>::run(on_rotation_end), - )); - // Translate Y - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - TranslationWidget::Axis(Vec3::Y), - MaterialMeshBundle { - mesh: meshes.translate_arrow.clone(), - material: mats.translate_y.clone(), - transform: Transform { - rotation: ROT_Y, - translation: vec3(0., 1.2, 0.), - ..default() - }, - ..default() - }, - On::>::run(on_gizmo_element_hover), - On::>::run(on_gizmo_element_unhover), - On::>::run(on_translation_start), - On::>::run(on_translate), - On::>::run(on_translation_end), - )); + // Rotate Y + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + RotationWidget::Axis(Vec3::Y), + MaterialMeshBundle { + mesh: meshes.rotate_ring.clone(), + material: mats.rotate_y.clone(), + transform: Transform::from_rotation(ROT_Y), + ..default() + }, + On::>::run(on_gizmo_element_hover), + On::>::run(on_gizmo_element_unhover), + On::>::run(on_rotation_start), + On::>::run(on_rotate), + On::>::run(on_rotation_end), + )); + // Translate Y + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + TranslationWidget::Axis(Vec3::Y), + MaterialMeshBundle { + mesh: meshes.translate_arrow.clone(), + material: mats.translate_y.clone(), + transform: Transform { + rotation: ROT_Y, + translation: vec3(0., 1.2, 0.), + ..default() + }, + ..default() + }, + On::>::run(on_gizmo_element_hover), + On::>::run(on_gizmo_element_unhover), + On::>::run(on_translation_start), + On::>::run(on_translate), + On::>::run(on_translation_end), + )); - // Rotate Z - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - RotationWidget::Axis(Vec3::Z), - MaterialMeshBundle { - mesh: meshes.rotate_ring.clone(), - material: mats.rotate_z.clone(), - transform: Transform::from_rotation(ROT_Z), - ..default() - }, - On::>::run(on_gizmo_element_hover), - On::>::run(on_gizmo_element_unhover), - On::>::run(on_rotation_start), - On::>::run(on_rotate), - On::>::run(on_rotation_end), - )); - // Translate Z - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - TranslationWidget::Axis(Vec3::Z), - MaterialMeshBundle { - mesh: meshes.translate_arrow.clone(), - material: mats.translate_z.clone(), - transform: Transform { - rotation: ROT_Z, - translation: vec3(0., 0., 1.2), - ..default() - }, - ..default() - }, - On::>::run(on_gizmo_element_hover), - On::>::run(on_gizmo_element_unhover), - On::>::run(on_translation_start), - On::>::run(on_translate), - On::>::run(on_translation_end), - )); - }); + // Rotate Z + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + RotationWidget::Axis(Vec3::Z), + MaterialMeshBundle { + mesh: meshes.rotate_ring.clone(), + material: mats.rotate_z.clone(), + transform: Transform::from_rotation(ROT_Z), + ..default() + }, + On::>::run(on_gizmo_element_hover), + On::>::run(on_gizmo_element_unhover), + On::>::run(on_rotation_start), + On::>::run(on_rotate), + On::>::run(on_rotation_end), + )); + // Translate Z + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + TranslationWidget::Axis(Vec3::Z), + MaterialMeshBundle { + mesh: meshes.translate_arrow.clone(), + material: mats.translate_z.clone(), + transform: Transform { + rotation: ROT_Z, + translation: vec3(0., 0., 1.2), + ..default() + }, + ..default() + }, + On::>::run(on_gizmo_element_hover), + On::>::run(on_gizmo_element_unhover), + On::>::run(on_translation_start), + On::>::run(on_translate), + On::>::run(on_translation_end), + )); + }); } diff --git a/studio/src/interaction/gizmos/common.rs b/studio/src/interaction/gizmos/common.rs index 96941bf..b1d56d2 100644 --- a/studio/src/interaction/gizmos/common.rs +++ b/studio/src/interaction/gizmos/common.rs @@ -5,7 +5,7 @@ use crate::interaction::TransformSpace; #[derive(Component, Reflect)] pub(super) struct TransformGizmo { - pub(super) target : Entity, + pub(super) target: Entity, pub(super) transform_space: TransformSpace, } @@ -24,20 +24,19 @@ pub(super) struct InitialTransform(pub GlobalTransform); impl TransformGizmoBundle { pub fn new( - target : Entity, - target_global_transform : &GlobalTransform, + target: Entity, + target_global_transform: &GlobalTransform, space: TransformSpace, normalizing_scale: f32, ) -> Self { let name = Name::new("TransformGizmo"); let marker = TransformGizmo { target, - transform_space: space + transform_space: space, }; match space { TransformSpace::Local => { - let mut transform = target_global_transform.compute_transform(); transform.scale = Vec3::splat(normalizing_scale); @@ -45,14 +44,13 @@ impl TransformGizmoBundle { name, marker, spatial: SpatialBundle { - global_transform : GlobalTransform::from(transform), + global_transform: GlobalTransform::from(transform), transform, ..default() }, } } TransformSpace::World => { - let transform = Transform::from_translation(target_global_transform.translation()) .with_scale(Vec3::splat(normalizing_scale)); @@ -60,7 +58,7 @@ impl TransformGizmoBundle { name, marker, spatial: SpatialBundle { - global_transform : GlobalTransform::from(transform), + global_transform: GlobalTransform::from(transform), transform, ..default() }, diff --git a/studio/src/interaction/gizmos/mod.rs b/studio/src/interaction/gizmos/mod.rs index e309a5a..b7ae535 100644 --- a/studio/src/interaction/gizmos/mod.rs +++ b/studio/src/interaction/gizmos/mod.rs @@ -33,10 +33,8 @@ const ROT_Z: Quat = Quat::from_xyzw(CIRC_45, 0., 0., CIRC_45); pub struct GizmoPlugin; - impl Plugin for GizmoPlugin { fn build(&self, app: &mut App) { - app.register_type::(); app.add_event::(); @@ -60,8 +58,10 @@ impl Plugin for GizmoPlugin { resource_exists::() .and_then(not(any_with_component::())), ), - (update_target_global_trasform, sync_gizmo_transform).chain().after(CameraMotionSystem), - normalize_gizmo_scale.after(CameraMotionSystem) + (update_target_global_trasform, sync_gizmo_transform) + .chain() + .after(CameraMotionSystem), + normalize_gizmo_scale.after(CameraMotionSystem), ), ); app.add_systems( @@ -71,10 +71,7 @@ impl Plugin for GizmoPlugin { } } -fn despawn_existing_gizmo( - mut cmd: Commands, - q_gizmos: Query>, -) { +fn despawn_existing_gizmo(mut cmd: Commands, q_gizmos: Query>) { for ent in q_gizmos.iter() { cmd.entity(ent).despawn_recursive(); } @@ -142,11 +139,10 @@ fn spawn_gizmo( } } - fn sync_gizmo_transform( - mut cmd : Commands, - mut q_gizmo : Query<(&mut Transform, &TransformGizmo)>, - q_targets : Query<&GlobalTransform> + mut cmd: Commands, + mut q_gizmo: Query<(&mut Transform, &TransformGizmo)>, + q_targets: Query<&GlobalTransform>, ) { for (mut transform, gizmo) in q_gizmo.iter_mut() { if let Ok(target) = q_targets.get(gizmo.target) { @@ -155,10 +151,10 @@ fn sync_gizmo_transform( let target_transform = target.compute_transform(); transform.translation = target_transform.translation; transform.rotation = target_transform.rotation; - }, + } super::TransformSpace::World => { transform.translation = target.translation(); - }, + } } } else { cmd.entity(gizmo.target).despawn_recursive(); @@ -167,9 +163,9 @@ fn sync_gizmo_transform( } fn update_target_global_trasform( - mut q_gizmo : Query<&TransformGizmo>, - mut q_targets : ParamSet<(TransformHelper,)>, - mut q_targets_global : Query<&mut GlobalTransform> + mut q_gizmo: Query<&TransformGizmo>, + mut q_targets: ParamSet<(TransformHelper,)>, + mut q_targets_global: Query<&mut GlobalTransform>, ) { for gizmo in q_gizmo.iter_mut() { if let Ok(global_transform) = q_targets.p0().compute_global_transform(gizmo.target) { @@ -180,7 +176,6 @@ fn update_target_global_trasform( } } - fn normalize_gizmo_scale( q_cam_xform: Query<&Transform, With>, mut q_gizmo: Query< @@ -197,4 +192,4 @@ fn normalize_gizmo_scale( let dist = Vec3::distance(cam_xform.translation, xform.translation); xform.scale = Vec3::splat(dist / 15.); -} \ No newline at end of file +} diff --git a/studio/src/interaction/gizmos/rotation.rs b/studio/src/interaction/gizmos/rotation.rs index f68ca8f..cf8a3f9 100644 --- a/studio/src/interaction/gizmos/rotation.rs +++ b/studio/src/interaction/gizmos/rotation.rs @@ -48,85 +48,85 @@ pub(super) fn spawn_rotation_gizmo( mats: &GizmoMats, ) { cmd.spawn(( - TransformGizmoBundle::new(target, target_global_transform, space, normalizing_scale), - On::>::run(on_rotation_start), - On::>::run(on_rotate), - On::>::run(on_rotation_end), - )) - .with_children(|cmd| { - use super::{ROT_X, ROT_Y, ROT_Z}; + TransformGizmoBundle::new(target, target_global_transform, space, normalizing_scale), + On::>::run(on_rotation_start), + On::>::run(on_rotate), + On::>::run(on_rotation_end), + )) + .with_children(|cmd| { + use super::{ROT_X, ROT_Y, ROT_Z}; - // Trackball - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - RotationWidget::Trackball, - MaterialMeshBundle { - mesh: meshes.rotate_ball.clone(), - material: mats.rotate_trackball.clone(), - ..default() - }, - On::>::run(on_trackball_hover), - On::>::run(on_trackball_unhover), - )); + // Trackball + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + RotationWidget::Trackball, + MaterialMeshBundle { + mesh: meshes.rotate_ball.clone(), + material: mats.rotate_trackball.clone(), + ..default() + }, + On::>::run(on_trackball_hover), + On::>::run(on_trackball_unhover), + )); - // Screen-space - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - RotationWidget::ScreenSpace, - MaterialMeshBundle { - mesh: meshes.rotate_ss.clone(), - material: mats.rotate_ss.clone(), - ..default() - }, - On::>::run(on_gizmo_element_hover), - On::>::run(on_gizmo_element_unhover), - )); + // Screen-space + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + RotationWidget::ScreenSpace, + MaterialMeshBundle { + mesh: meshes.rotate_ss.clone(), + material: mats.rotate_ss.clone(), + ..default() + }, + On::>::run(on_gizmo_element_hover), + On::>::run(on_gizmo_element_unhover), + )); - // X - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - RotationWidget::Axis(Vec3::X), - MaterialMeshBundle { - mesh: meshes.rotate_ring.clone(), - material: mats.rotate_x.clone(), - transform: Transform::from_rotation(ROT_X), - ..default() - }, - On::>::run(on_gizmo_element_hover), - On::>::run(on_gizmo_element_unhover), - )); - // Y - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - RotationWidget::Axis(Vec3::Y), - MaterialMeshBundle { - mesh: meshes.rotate_ring.clone(), - material: mats.rotate_y.clone(), - transform: Transform::from_rotation(ROT_Y), - ..default() - }, - On::>::run(on_gizmo_element_hover), - On::>::run(on_gizmo_element_unhover), - )); - // Z - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - RotationWidget::Axis(Vec3::Z), - MaterialMeshBundle { - mesh: meshes.rotate_ring.clone(), - material: mats.rotate_z.clone(), - transform: Transform::from_rotation(ROT_Z), - ..default() - }, - On::>::run(on_gizmo_element_hover), - On::>::run(on_gizmo_element_unhover), - )); - }); + // X + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + RotationWidget::Axis(Vec3::X), + MaterialMeshBundle { + mesh: meshes.rotate_ring.clone(), + material: mats.rotate_x.clone(), + transform: Transform::from_rotation(ROT_X), + ..default() + }, + On::>::run(on_gizmo_element_hover), + On::>::run(on_gizmo_element_unhover), + )); + // Y + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + RotationWidget::Axis(Vec3::Y), + MaterialMeshBundle { + mesh: meshes.rotate_ring.clone(), + material: mats.rotate_y.clone(), + transform: Transform::from_rotation(ROT_Y), + ..default() + }, + On::>::run(on_gizmo_element_hover), + On::>::run(on_gizmo_element_unhover), + )); + // Z + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + RotationWidget::Axis(Vec3::Z), + MaterialMeshBundle { + mesh: meshes.rotate_ring.clone(), + material: mats.rotate_z.clone(), + transform: Transform::from_rotation(ROT_Z), + ..default() + }, + On::>::run(on_gizmo_element_hover), + On::>::run(on_gizmo_element_unhover), + )); + }); } pub(super) fn update_ss_ring_rotation( @@ -179,7 +179,7 @@ pub(super) fn on_rotation_start( event: Listener>, mut cmd: Commands, q_xform: Query<(Entity, &GlobalTransform)>, - q_gizmos: Query<&TransformGizmo> + q_gizmos: Query<&TransformGizmo>, ) { info!("Rotation start"); @@ -211,7 +211,7 @@ pub(super) fn on_rotation_end( mut cmd: Commands, r_xform_mode: Res, mut ev_rebuild_gizmo: EventWriter, - q_inited_components: Query> + q_inited_components: Query>, ) { info!("Rotation end"); @@ -222,7 +222,6 @@ pub(super) fn on_rotation_end( .remove::() .remove::(); } - if matches!(r_xform_mode.space, TransformSpace::World) { ev_rebuild_gizmo.send(RebuildGizmo); @@ -232,16 +231,14 @@ pub(super) fn on_rotation_end( pub(super) fn on_rotate( event: Listener>, mut raycast: Raycast, - mut q_root: Query< - ( - &mut Transform, - Option<&Parent>, - &InitialTransform, - &InitialHitPoint, - &mut LastHitPoint, - &mut LastRotation, - ), - >, + mut q_root: Query<( + &mut Transform, + Option<&Parent>, + &InitialTransform, + &InitialHitPoint, + &mut LastHitPoint, + &mut LastRotation, + )>, q_camera: Query<(&Camera, &GlobalTransform), With>, q_gizmo: Query<&GlobalTransform, (With, Without)>, q_world_xforms: Query<&GlobalTransform, (With, Without)>, diff --git a/studio/src/interaction/gizmos/translation.rs b/studio/src/interaction/gizmos/translation.rs index 00a2b99..14d4f75 100644 --- a/studio/src/interaction/gizmos/translation.rs +++ b/studio/src/interaction/gizmos/translation.rs @@ -1,10 +1,5 @@ -use bevy::{ - math::vec3, pbr::NotShadowCaster, prelude::*, - render::view::RenderLayers, -}; -use bevy_mod_picking::prelude::{ - Drag, DragEnd, DragStart, Listener, On, Out, Over, Pointer, -}; +use bevy::{math::vec3, pbr::NotShadowCaster, prelude::*, render::view::RenderLayers}; +use bevy_mod_picking::prelude::{Drag, DragEnd, DragStart, Listener, On, Out, Over, Pointer}; use crate::{interaction::TransformSpace, MainCamera}; @@ -31,181 +26,181 @@ pub(super) fn spawn_translation_gizmo( mats: &GizmoMats, ) { cmd.spawn(( - TransformGizmoBundle::new(target, target_global_transform, space, normalizing_scale), - On::>::run(on_gizmo_element_hover), - On::>::run(on_gizmo_element_unhover), - On::>::run(on_translation_start), - On::>::run(on_translate), - On::>::run(on_translation_end), - )) - .with_children(|cmd| { - use super::{CIRC_45, ROT_X, ROT_Y, ROT_Z}; + TransformGizmoBundle::new(target, target_global_transform, space, normalizing_scale), + On::>::run(on_gizmo_element_hover), + On::>::run(on_gizmo_element_unhover), + On::>::run(on_translation_start), + On::>::run(on_translate), + On::>::run(on_translation_end), + )) + .with_children(|cmd| { + use super::{CIRC_45, ROT_X, ROT_Y, ROT_Z}; - // Center sphere - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - TranslationWidget::ScreenSpace, - MaterialMeshBundle { - mesh: meshes.translate_ss.clone(), - material: mats.translate_ss.clone(), - transform: Transform::IDENTITY, - ..default() - }, - )); + // Center sphere + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + TranslationWidget::ScreenSpace, + MaterialMeshBundle { + mesh: meshes.translate_ss.clone(), + material: mats.translate_ss.clone(), + transform: Transform::IDENTITY, + ..default() + }, + )); - // X - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - TranslationWidget::Axis(Vec3::X), - MaterialMeshBundle { - mesh: meshes.translate_line.clone(), - material: mats.translate_x.clone(), - transform: Transform { - rotation: ROT_X, - translation: vec3(0.6, 0., 0.), - ..default() - }, - ..default() - }, - )); - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - TranslationWidget::Axis(Vec3::X), - MaterialMeshBundle { - mesh: meshes.translate_arrow.clone(), - material: mats.translate_x.clone(), - transform: Transform { - rotation: ROT_X, - translation: vec3(1., 0., 0.), - ..default() - }, - ..default() - }, - )); + // X + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + TranslationWidget::Axis(Vec3::X), + MaterialMeshBundle { + mesh: meshes.translate_line.clone(), + material: mats.translate_x.clone(), + transform: Transform { + rotation: ROT_X, + translation: vec3(0.6, 0., 0.), + ..default() + }, + ..default() + }, + )); + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + TranslationWidget::Axis(Vec3::X), + MaterialMeshBundle { + mesh: meshes.translate_arrow.clone(), + material: mats.translate_x.clone(), + transform: Transform { + rotation: ROT_X, + translation: vec3(1., 0., 0.), + ..default() + }, + ..default() + }, + )); - // Y - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - TranslationWidget::Axis(Vec3::Y), - MaterialMeshBundle { - mesh: meshes.translate_line.clone(), - material: mats.translate_y.clone(), - transform: Transform { - rotation: ROT_Y, - translation: vec3(0., 0.6, 0.), - ..default() - }, - ..default() - }, - )); - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - TranslationWidget::Axis(Vec3::Y), - MaterialMeshBundle { - mesh: meshes.translate_arrow.clone(), - material: mats.translate_y.clone(), - transform: Transform { - rotation: ROT_Y, - translation: vec3(0., 1., 0.), - ..default() - }, - ..default() - }, - )); + // Y + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + TranslationWidget::Axis(Vec3::Y), + MaterialMeshBundle { + mesh: meshes.translate_line.clone(), + material: mats.translate_y.clone(), + transform: Transform { + rotation: ROT_Y, + translation: vec3(0., 0.6, 0.), + ..default() + }, + ..default() + }, + )); + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + TranslationWidget::Axis(Vec3::Y), + MaterialMeshBundle { + mesh: meshes.translate_arrow.clone(), + material: mats.translate_y.clone(), + transform: Transform { + rotation: ROT_Y, + translation: vec3(0., 1., 0.), + ..default() + }, + ..default() + }, + )); - // Z - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - TranslationWidget::Axis(Vec3::Z), - MaterialMeshBundle { - mesh: meshes.translate_line.clone(), - material: mats.translate_z.clone(), - transform: Transform { - rotation: ROT_Z, - translation: vec3(0., 0., 0.6), - ..default() - }, - ..default() - }, - )); - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - TranslationWidget::Axis(Vec3::Z), - MaterialMeshBundle { - mesh: meshes.translate_arrow.clone(), - material: mats.translate_z.clone(), - transform: Transform { - rotation: ROT_Z, - translation: vec3(0., 0., 1.), - ..default() - }, - ..default() - }, - )); + // Z + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + TranslationWidget::Axis(Vec3::Z), + MaterialMeshBundle { + mesh: meshes.translate_line.clone(), + material: mats.translate_z.clone(), + transform: Transform { + rotation: ROT_Z, + translation: vec3(0., 0., 0.6), + ..default() + }, + ..default() + }, + )); + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + TranslationWidget::Axis(Vec3::Z), + MaterialMeshBundle { + mesh: meshes.translate_arrow.clone(), + material: mats.translate_z.clone(), + transform: Transform { + rotation: ROT_Z, + translation: vec3(0., 0., 1.), + ..default() + }, + ..default() + }, + )); - // YZ Plane - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - TranslationWidget::Plane(Vec3::X), - MaterialMeshBundle { - mesh: meshes.translate_plane.clone(), - material: mats.translate_yz.clone(), - transform: Transform { - rotation: ROT_X, - translation: vec3(0., CIRC_45, CIRC_45), - ..default() - }, - ..default() - }, - )); - // XZ Plane - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - TranslationWidget::Plane(Vec3::Y), - MaterialMeshBundle { - mesh: meshes.translate_plane.clone(), - material: mats.translate_xz.clone(), - transform: Transform { - rotation: ROT_Y, - translation: vec3(CIRC_45, 0., CIRC_45), - ..default() - }, - ..default() - }, - )); - // XY Plane - cmd.spawn(( - NotShadowCaster, - RenderLayers::layer(GIZMO_RENDER_LAYER), - TranslationWidget::Plane(Vec3::Z), - MaterialMeshBundle { - mesh: meshes.translate_plane.clone(), - material: mats.translate_xy.clone(), - transform: Transform { - rotation: ROT_Z, - translation: vec3(CIRC_45, CIRC_45, 0.), - ..default() - }, - ..default() - }, - )); - }); + // YZ Plane + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + TranslationWidget::Plane(Vec3::X), + MaterialMeshBundle { + mesh: meshes.translate_plane.clone(), + material: mats.translate_yz.clone(), + transform: Transform { + rotation: ROT_X, + translation: vec3(0., CIRC_45, CIRC_45), + ..default() + }, + ..default() + }, + )); + // XZ Plane + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + TranslationWidget::Plane(Vec3::Y), + MaterialMeshBundle { + mesh: meshes.translate_plane.clone(), + material: mats.translate_xz.clone(), + transform: Transform { + rotation: ROT_Y, + translation: vec3(CIRC_45, 0., CIRC_45), + ..default() + }, + ..default() + }, + )); + // XY Plane + cmd.spawn(( + NotShadowCaster, + RenderLayers::layer(GIZMO_RENDER_LAYER), + TranslationWidget::Plane(Vec3::Z), + MaterialMeshBundle { + mesh: meshes.translate_plane.clone(), + material: mats.translate_xy.clone(), + transform: Transform { + rotation: ROT_Z, + translation: vec3(CIRC_45, CIRC_45, 0.), + ..default() + }, + ..default() + }, + )); + }); } pub(super) fn on_translation_start( _: Listener>, mut cmd: Commands, q_xform: Query<(Entity, &GlobalTransform)>, - q_gizmos: Query<&TransformGizmo> + q_gizmos: Query<&TransformGizmo>, ) { for gizmo_data in q_gizmos.iter() { if let Ok((ent, &world_xform)) = q_xform.get(gizmo_data.target) { @@ -230,10 +225,12 @@ pub(super) fn on_translate( q_camera: Query<(&Camera, &GlobalTransform), With>, q_gizmo: Query<(&GlobalTransform, &TransformGizmo), Without>, q_widget: Query<&TranslationWidget>, - q_all_global_transforms : Query<&GlobalTransform> + q_all_global_transforms: Query<&GlobalTransform>, ) { let (gizmo_xform, gizmo_data) = q_gizmo.single(); - let Ok((mut target_transform, target_global_transform, target_parent)) = q_root.get_mut(gizmo_data.target) else { + let Ok((mut target_transform, target_global_transform, target_parent)) = + q_root.get_mut(gizmo_data.target) + else { error!("Translation gizmo target not found"); return; }; @@ -272,8 +269,12 @@ pub(super) fn on_translate( let target_ws = origin_ws + axis_ws * projection_length; if let Some(target_parent) = target_parent { - if let Ok(parent_global_transform) = q_all_global_transforms.get(target_parent.get()) { - let real_local_transform = GlobalTransform::from(Transform::from_translation(target_ws)).reparented_to(parent_global_transform); + if let Ok(parent_global_transform) = + q_all_global_transforms.get(target_parent.get()) + { + let real_local_transform = + GlobalTransform::from(Transform::from_translation(target_ws)) + .reparented_to(parent_global_transform); target_transform.translation = real_local_transform.translation; } } else { @@ -295,8 +296,12 @@ pub(super) fn on_translate( let target_ws = ray.origin + ray.direction * hit_dist; if let Some(target_parent) = target_parent { - if let Ok(parent_global_transform) = q_all_global_transforms.get(target_parent.get()) { - let real_local_transform = GlobalTransform::from(Transform::from_translation(target_ws)).reparented_to(parent_global_transform); + if let Ok(parent_global_transform) = + q_all_global_transforms.get(target_parent.get()) + { + let real_local_transform = + GlobalTransform::from(Transform::from_translation(target_ws)) + .reparented_to(parent_global_transform); target_transform.translation = real_local_transform.translation; } } else { diff --git a/studio/src/lib.rs b/studio/src/lib.rs index 6ec879d..3d7a8b7 100644 --- a/studio/src/lib.rs +++ b/studio/src/lib.rs @@ -80,14 +80,14 @@ pub fn init(viewport_size: ViewportSize) { SkyboxPlugin, UiLayerPlugin, WorldGridPlugin, - UndoPlugin + UndoPlugin, )) .add_systems( Startup, move |mut cmd: Commands, mut ew: EventWriter| { cmd.insert_resource(SkyboxId("gum_trees_4k".to_string())); ew.send(LoadSceneEvent("bookcase".to_string())); - } + }, ); // Only for registering components for undo @@ -147,7 +147,7 @@ pub fn start_viewer( SkyboxPlugin, UiLayerPlugin, WorldGridPlugin, - UndoPlugin + UndoPlugin, )) .add_systems( Startup, @@ -157,7 +157,6 @@ pub fn start_viewer( }, ); - // Only for registering components for undo use space_editor::prelude::space_undo::AppAutoUndo; app.auto_reflected_undo::(); diff --git a/studio/src/scene.rs b/studio/src/scene.rs index fa54840..ab64c3e 100644 --- a/studio/src/scene.rs +++ b/studio/src/scene.rs @@ -13,7 +13,7 @@ use bevy::{ scene::InstanceId, }; -use space_editor::prelude::{PrefabMarker, space_undo::OneFrameUndoIgnore}; +use space_editor::prelude::{space_undo::OneFrameUndoIgnore, PrefabMarker}; #[cfg(feature = "wasm")] use wasm_bindgen::prelude::wasm_bindgen; @@ -209,7 +209,7 @@ fn spawn_next_scene( SceneElement, SpatialBundle::default(), PrefabMarker, - OneFrameUndoIgnore::default() //To prevert undo try to register add event + OneFrameUndoIgnore::default(), //To prevert undo try to register add event )) .id();