From 23d32213ff8832d2c4360618eb511a0098153818 Mon Sep 17 00:00:00 2001 From: Alexander Foremny <aforemny@posteo.de> Date: Sat, 23 Mar 2024 08:53:12 +0100 Subject: feat: camera movement --- src/client.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/client.rs') diff --git a/src/client.rs b/src/client.rs index 6fa6ff1..7f1220e 100644 --- a/src/client.rs +++ b/src/client.rs @@ -94,6 +94,7 @@ impl Plugin for ClientPlugin { .chain(), ), ) + .add_systems(Update, move_camera) .add_systems( FixedPreUpdate, buffer_input.in_set(InputSystemSet::BufferInputs), @@ -790,3 +791,27 @@ fn health_indicator_despawn( commands.entity(entity).despawn(); } } + +const CAMERA_MOVEMENT_SPEED: f32 = 100.; + +fn move_camera( + mut cameras: Query<&mut Transform, With<Camera>>, + players: Query<(&PlayerId, &PlayerPosition, &Shape)>, + client_id: Res<ClientId>, + time: Res<Time>, +) { + let Some(player_position) = player_position(&client_id, &players) else { + return; + }; + let dt = time.delta().as_secs_f32(); + for mut transform in cameras.iter_mut() { + let direction = (Vec3::new( + player_position.0.x, + player_position.0.y, + transform.translation.z, + ) - transform.translation) + .normalize_or_zero(); + transform.translation += + (dt * CAMERA_MOVEMENT_SPEED).min(direction.length()) * direction.normalize_or_zero(); + } +} -- cgit v1.2.3