use bevy::prelude::*; use crate::*; pub fn get_mouse_pos(q_cam: &Query<(&Camera, &GlobalTransform), With>, wnds: &Windows) -> Option { let (cam, cam_pos) = q_cam.get_single().expect("More than 1 MainCamera..."); let wnd = wnds.get_primary().expect("No window available???"); if let Some(screen_pos) = wnd.cursor_position() { let w_size = Vec2::new(wnd.width() as f32, wnd.height() as f32); let ndc = (screen_pos / w_size) * 2.0 - Vec2::ONE; let ndc_to_world = cam_pos.compute_matrix() * cam.projection_matrix().inverse(); let world_pos = ndc_to_world.project_point3(ndc.extend(-1.0)); let world_pos: Vec2 = world_pos.truncate(); Some(world_pos) } else { None } }