generated from tipragot/rust
Add a camera system #69
|
@ -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;
|
||||||
CoCo_Sol marked this conversation as resolved
Outdated
|
|||||||
|
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)
|
||||||
CoCo_Sol marked this conversation as resolved
Outdated
tipragot
commented
No abreviations No abreviations
|
|||||||
|
.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;
|
||||||
|
}
|
||||||
|
|
||||||
CoCo_Sol marked this conversation as resolved
Outdated
tipragot
commented
Not only... Not only...
|
|||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue
This should be a resource and the others too