use bevy::app::{App, Update};
use bevy::window::PrimaryWindow;
use crate::ecs::MainCamera;
use crate::prelude::*;
pub fn input_plugin(app: &mut App) {
app
.insert_resource(CursorWorldCoordinates(None))
.add_systems(Update, update_cursor_position);
}
#[derive(Resource, Default)]
pub struct CursorWorldCoordinates(pub Option<Vec2>);
fn update_cursor_position(
q_windows: Query<&Window, With<PrimaryWindow>>,
q_camera: Query<(&Camera, &GlobalTransform), With<MainCamera>>,
mut coords: ResMut<CursorWorldCoordinates>,
) {
let (camera, camera_transform) = q_camera.single().unwrap();
let window = q_windows.single().unwrap();
if let Some(world_position) = window
.cursor_position()
.and_then(|cursor| camera.viewport_to_world(camera_transform, cursor).ok())
.map(|ray| ray.origin.truncate())
{
coords.0 = Some(world_position);
} else {
coords.0 = None;
}
}