From 4854ba59370897bdcc0b86c6c38c804a84c1b873 Mon Sep 17 00:00:00 2001 From: Elijah Voigt Date: Wed, 16 Jul 2025 16:05:13 -0700 Subject: [PATCH] Very simple click and dragging --- src/bin/trees/main.rs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/bin/trees/main.rs b/src/bin/trees/main.rs index 775ec52..1d0534f 100644 --- a/src/bin/trees/main.rs +++ b/src/bin/trees/main.rs @@ -679,7 +679,8 @@ fn populate_tree( commands .entity(trigger.target()) .insert((mesh, material, transform)) - .observe(delete_tree); + .observe(delete_tree) + .observe(drag_tree); } fn hide_monologue_preview( @@ -700,3 +701,23 @@ fn hide_monologue_preview( commands.entity(*preview).despawn_related::(); } } + +fn drag_tree( + trigger: Trigger>, + mut query: Query<&mut Transform, With>, + camera: Single<(&Camera, &GlobalTransform), With>, + window: Single<&Window> +) { + if let Ok(mut t) = query.get_mut(trigger.target()) { + let world_position = window + .cursor_position() + .and_then(|cursor| { + camera.0.viewport_to_world(camera.1, cursor).ok() + }).map(|ray| { + // Compute ray's distance to entity + let distance = ray.intersect_plane(t.translation, InfinitePlane3d::new(t.up())).unwrap(); + ray.get_point(distance) + }); + t.translation = world_position.unwrap(); + } +}