diff --git a/client/src/main.rs b/client/src/main.rs index 0110312..e2228c7 100644 --- a/client/src/main.rs +++ b/client/src/main.rs @@ -3,6 +3,7 @@ use std::{collections::HashMap, net::UdpSocket, time::SystemTime}; use bevy::{ diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin}, prelude::*, + render::camera::RenderTarget, }; use bevy_egui::{EguiContext, EguiPlugin}; @@ -18,6 +19,9 @@ use daggmask_shared::{ use renet_visualizer::{RenetClientVisualizer, RenetVisualizerStyle}; +#[derive(Component)] +struct MainCamera; + #[derive(Component)] struct ControlledPlayer; @@ -77,6 +81,7 @@ fn main() { app.insert_resource(NetworkMapping::default()); app.add_system(player_input); + app.add_system(cursor_system); app.add_system(client_send_input.with_run_criteria(run_if_client_connected)); app.add_system(client_send_player_commands.with_run_criteria(run_if_client_connected)); app.add_system(client_sync_players.with_run_criteria(run_if_client_connected)); @@ -133,6 +138,30 @@ fn player_input( } } +fn cursor_system( + wnds: Res, + q_camera: Query<(&Camera, &GlobalTransform), With>, +) { + let (camera, camera_transform) = q_camera.single(); + + let wnd = if let RenderTarget::Window(id) = camera.target { + wnds.get(id).unwrap() + } else { + wnds.get_primary().unwrap() + }; + + // check if the cursor is inside the window and get its position + if let Some(screen_pos) = wnd.cursor_position() { + let window_size = Vec2::new(wnd.width() as f32, wnd.height() as f32); + let ndc = (screen_pos / window_size) * 2.0 - Vec2::ONE; + let ndc_to_world = camera_transform.compute_matrix() * camera.projection_matrix().inverse(); + let world_pos = ndc_to_world.project_point3(ndc.extend(-1.0)); + let world_pos: Vec2 = world_pos.truncate(); + + info!("World coords: {}/{}", world_pos.x, world_pos.y); + } +} + fn client_send_input(player_input: Res, mut client: ResMut) { let input_message = bincode::serialize(&*player_input).unwrap(); @@ -247,5 +276,7 @@ fn client_sync_players( } fn setup_camera(mut commands: Commands) { - commands.spawn_bundle(Camera2dBundle::default()); + commands + .spawn_bundle(Camera2dBundle::default()) + .insert(MainCamera); } diff --git a/server/src/main.rs b/server/src/main.rs index ebfc68e..a3e7744 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -6,7 +6,8 @@ use bevy::{ }; use bevy_egui::{EguiContext, EguiPlugin}; -use bevy_rapier2d::{prelude::*, rapier::prelude::CollisionEventFlags}; +use bevy_rapier2d::prelude::*; + use bevy_renet::{ renet::{RenetServer, ServerAuthentication, ServerConfig, ServerEvent}, RenetServerPlugin,