From 273223715650c573b432634e415289042ee90a7f Mon Sep 17 00:00:00 2001 From: rewin Date: Fri, 12 Jan 2024 20:16:50 +0300 Subject: [PATCH] fix gizmo scale --- studio/src/input.rs | 3 ++- studio/src/interaction/gizmos/mod.rs | 22 +++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/studio/src/input.rs b/studio/src/input.rs index 5991a93..903d29d 100644 --- a/studio/src/input.rs +++ b/studio/src/input.rs @@ -304,4 +304,5 @@ fn send_undo_event( events.send(UndoRedo::Undo); info!("Undo event sent"); } -} \ No newline at end of file +} + diff --git a/studio/src/interaction/gizmos/mod.rs b/studio/src/interaction/gizmos/mod.rs index 6aadd7a..f14ddfb 100644 --- a/studio/src/interaction/gizmos/mod.rs +++ b/studio/src/interaction/gizmos/mod.rs @@ -60,7 +60,8 @@ impl Plugin for GizmoPlugin { resource_exists::() .and_then(not(any_with_component::())), ), - (update_target_global_trasform, sync_gizmo_transform).chain() + (update_target_global_trasform, sync_gizmo_transform).chain(), + normalize_gizmo_scale.after(CameraMotionSystem) ), ); app.add_systems( @@ -177,4 +178,23 @@ fn update_target_global_trasform( } } } +} + + +fn normalize_gizmo_scale( + q_cam_xform: Query<&Transform, With>, + mut q_gizmo: Query< + (&mut Transform, &GlobalTransform), + (With, Without), + >, +) { + let Ok(cam_xform) = q_cam_xform.get_single() else { + return; + }; + let Ok((mut xform, world_xform)) = q_gizmo.get_single_mut() else { + return; + }; + + let dist = Vec3::distance(cam_xform.translation, xform.translation); + xform.scale = Vec3::splat(dist / 15.); } \ No newline at end of file