19 lines
770 B
Rust
19 lines
770 B
Rust
use bevy::prelude::*;
|
|
use crate::*;
|
|
|
|
pub fn get_mouse_pos(q_cam: &Query<(&Camera, &GlobalTransform), With<MainCamera>>, wnds: &Windows) -> Option<Vec2> {
|
|
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
|
|
}
|
|
} |