update
All checks were successful
Rust Checks / checks (push) Successful in 5m32s
Rust Checks / checks (pull_request) Successful in 2m41s

This commit is contained in:
CoCo_Sol 2024-02-28 13:37:04 +01:00
parent 2266bf7667
commit 2af9dd5fe1

View file

@ -7,16 +7,20 @@ use bevy::prelude::*;
use crate::CurrentScene;
/// The speed of camera movement.
const CAMERA_SPEED_MOVEMENT: f32 = 10.;
#[derive(Resource)]
struct CameraSpeedMouvement(f32);
/// The speed of camera scaling.
const CAMERA_SPEED_SCALE: f32 = 0.1;
#[derive(Resource)]
struct CameraSpeedScale(f32);
/// The minimum scale of the camera.
const MIN_SCALE: f32 = 0.5;
#[derive(Resource)]
struct MinScale(f32);
/// The maximum scale of the camera.
const MAX_SCALE: f32 = 5.;
#[derive(Resource)]
struct MaxScale(f32);
/// Key settings for camera movement.
#[derive(Resource)]
@ -41,7 +45,7 @@ pub struct CameraPlugin;
impl Plugin for CameraPlugin {
fn build(&self, app: &mut App) {
app.add_systems(Startup, init_camera)
.add_systems(Startup, init_key_movement)
.add_systems(Startup, init_resources)
.add_systems(Update, movement_system.run_if(in_state(CurrentScene::Game)))
.add_systems(Update, scale_system.run_if(in_state(CurrentScene::Game)));
}
@ -53,13 +57,18 @@ fn init_camera(mut commands: Commands) {
}
/// Initializes the key movement settings for the camera.
fn init_key_movement(mut commands: Commands) {
fn init_resources(mut commands: Commands) {
commands.insert_resource(KeysMovementSettings {
up: KeyCode::Z,
down: KeyCode::S,
right: KeyCode::D,
left: KeyCode::Q,
});
commands.insert_resource(CameraSpeedMouvement(10.0));
commands.insert_resource(CameraSpeedScale(0.1));
commands.insert_resource(MinScale(0.1));
commands.insert_resource(MaxScale(10.0));
}
/// Moves the camera with keyboard input.
@ -67,15 +76,16 @@ fn movement_system(
mut query: Query<&mut Transform, With<Camera>>,
keys: Res<Input<KeyCode>>,
keys_settings: Res<KeysMovementSettings>,
movement_speed: Res<CameraSpeedMouvement>,
) {
for mut transform in query.iter_mut() {
let mut target = Vec3::ZERO;
for key in keys.get_pressed() {
match *key {
v if v == keys_settings.up => target.y += CAMERA_SPEED_MOVEMENT,
v if v == keys_settings.down => target.y -= CAMERA_SPEED_MOVEMENT,
v if v == keys_settings.right => target.x += CAMERA_SPEED_MOVEMENT,
v if v == keys_settings.left => target.x -= CAMERA_SPEED_MOVEMENT,
v if v == keys_settings.up => target.y += movement_speed.0,
v if v == keys_settings.down => target.y -= movement_speed.0,
v if v == keys_settings.right => target.x += movement_speed.0,
v if v == keys_settings.left => target.x -= movement_speed.0,
_ => continue,
}
}
@ -88,6 +98,9 @@ fn movement_system(
fn scale_system(
mut scroll_ev: EventReader<MouseWheel>,
mut query: Query<&mut OrthographicProjection, With<Camera>>,
min_scale: Res<MinScale>,
max_scale: Res<MaxScale>,
scale_speed: Res<CameraSpeedScale>,
) {
for ev in scroll_ev.read() {
for mut projection in query.iter_mut() {
@ -95,8 +108,8 @@ fn scale_system(
return;
}
let future_scale = ev.y.mul_add(CAMERA_SPEED_SCALE, projection.scale);
if MIN_SCALE < future_scale && future_scale < MAX_SCALE {
let future_scale = ev.y.mul_add(scale_speed.0, projection.scale);
if min_scale.0 < future_scale && future_scale < max_scale.0 {
projection.scale = future_scale;
}
}