diff --git a/src/main.rs b/src/main.rs index c521725..affe33d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,4 @@ +use bevy::color::palettes::basic::{RED, WHITE}; use bevy::prelude::*; mod fps_counter; @@ -6,55 +7,114 @@ fn main() { .add_plugins(( DefaultPlugins, fps_counter::FpsCounterPlugin, + MeshPickingPlugin, )) + .add_systems(Startup, setup) + .add_systems(Startup, change_window_mode) + // .add_systems(Update, switch_focused_shape) + .add_systems(Update, show_focused_shape) + .add_systems(FixedUpdate, focused_follow_cursor) + .add_systems(Update, draw_cursor) .run(); } -//region first app -//region system -fn hello_world() { - println!("hello world!"); -} -//endregion -//region component -#[derive(Component)] -struct Person; +fn change_window_mode(mut windows: Query<&mut Window>) { + let mut window = windows.single_mut(); + // window.mode = WindowMode::Fullscreen(MonitorSelection::Current); + window.present_mode = bevy::window::PresentMode::AutoNoVsync; +} +fn setup( + mut commands: Commands, + mut meshes: ResMut>, + mut materials: ResMut>, +) { + commands.spawn(Camera2d); + + let shapes = [ + meshes.add(Rectangle::new(50.0, 100.0)), + meshes.add(Rectangle::new(100.0, 50.0)), + ]; + let num_shapes = shapes.len(); + for (i, shape) in shapes.into_iter().enumerate() { + commands + .spawn(( + Mesh2d(shape), + MeshMaterial2d(materials.add(Color::from(RED))), + Focused(true), + Transform::from_xyz((i as f32 - num_shapes as f32 / 2.0) * 150.0, 0.0, 0.0), + )) + .observe(on_click_shape); + } +} +fn draw_cursor( + camera_query: Single<(&Camera, &GlobalTransform)>, + windows: Query<&Window>, + mut gizmos: Gizmos, +) { + let Some(point) = get_cursor_worl_pos(camera_query, windows) else { + return; + }; + + gizmos.circle_2d(point, 10.0, WHITE); +} + +fn get_cursor_worl_pos( + camera_query: Single<(&Camera, &GlobalTransform)>, + windows: Query<&Window>, +) -> Option { + let (camera, camera_transform) = *camera_query; + let Ok(window) = windows.get_single() else { + return None; + }; + let Some(cursor_position) = window.cursor_position() else { + return None; + }; + + let Ok(point) = camera.viewport_to_world_2d(camera_transform, cursor_position) else { + return None; + }; + Some(point) +} #[derive(Component)] -struct Name(String); -fn add_people(mut commands: Commands) { - commands.spawn((Person, Name("Elaina Proctor".to_string()))); - commands.spawn((Person, Name("Renzo Hume".to_string()))); - commands.spawn((Person, Name("Zayna Nieves".to_string()))); -} -#[derive(Resource)] -struct GreetTimer(Timer); -//endregion -//region query -fn greet_people(time: Res