use crate::prelude::PhosCamera; use bevy::input::mouse::MouseMotion; use bevy::prelude::*; use bevy::window::CursorGrabMode; pub mod prelude { use bevy::prelude::Component; #[derive(Component, Default)] pub struct PhosCamera { pub min_height: f32, pub max_height: f32, pub speed: f32, } } pub struct PhosCameraPlugin; impl Plugin for PhosCameraPlugin { fn build(&self, app: &mut App) { app.add_systems(Startup, setup).add_systems( Update, (grab_mouse, (update_camera, update_camera_mouse).chain()), ); } } fn setup(mut commands: Commands, mut msaa: ResMut) { *msaa = Msaa::Off; commands.spawn(( Camera3dBundle { transform: Transform::from_xyz(0., 30., 0.) .looking_at(Vec3::new(1000., 0., 1000.), Vec3::Y), ..default() }, PhosCamera { speed: 100., ..default() }, )); } fn update_camera( mut cam_query: Query<(&PhosCamera, &mut Transform)>, keyboard_input: Res>, time: Res