Add a camera system #69

Merged
CoCo_Sol merged 15 commits from camera into main 2024-03-02 11:18:13 +00:00
Showing only changes of commit 6ad7aa292c - Show all commits

View file

@ -1,13 +1,24 @@
//! TODO //! TODO
use bevy::input::mouse::MouseScrollUnit;
use bevy::prelude::*; use bevy::prelude::*;
use bevy::input::mouse::MouseWheel;
/// TODO
const CAMERRA_SPEED: f32 = 10.;
const CAMERRA_SPEED_ZOOM: f32 = 0.1;
const SMOOTHING: f32 = 0.5;
const MIN_ZOOM: f32 = 0.5;
const MAX_ZOOM: f32 = 5.;
/// TODO /// TODO
pub struct CameraPlugin; pub struct CameraPlugin;
impl Plugin for CameraPlugin { impl Plugin for CameraPlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
app.add_systems(Startup, init_camera); app.add_systems(Startup, init_camera)
.add_systems(Update, handle_movement)
.add_systems(Update, zoom_system);
} }
} }
@ -16,6 +27,41 @@ fn init_camera(mut commands: Commands) {
commands.spawn(Camera2dBundle::default()); commands.spawn(Camera2dBundle::default());
} }
fn movement_system(){} fn handle_movement(mut query: Query<&mut Transform, With<Camera>>, keys: Res<Input<KeyCode>>,){
fn zoom_system(){} for mut camera_transform in query.iter_mut() {
let mut target = camera_transform.translation.clone();
if keys.pressed(KeyCode::Z) {
target.y += CAMERRA_SPEED;
}
else if keys.pressed(KeyCode::S) {
target.y -= CAMERRA_SPEED;
}
if keys.pressed(KeyCode::D) {
target.x += CAMERRA_SPEED;
}
else if keys.pressed(KeyCode::Q) {
target.x -= CAMERRA_SPEED;
}
camera_transform.translation = camera_transform
.translation
.lerp(target, SMOOTHING);
}
}
fn zoom_system(mut scroll_evr: EventReader<MouseWheel>, mut query: Query<&mut OrthographicProjection, With<Camera>>){
for ev in scroll_evr.read() {
for mut camera_projection in query.iter_mut() {
if ev.unit == MouseScrollUnit::Pixel {
return;
}
if camera_projection.scale + ev.y * CAMERRA_SPEED_ZOOM > MIN_ZOOM && camera_projection.scale + ev.y * CAMERRA_SPEED_ZOOM < MAX_ZOOM {
camera_projection.scale += ev.y * CAMERRA_SPEED_ZOOM;
}
}
}
}