Fly controller (#26)

This commit is contained in:
extrawurst
2025-04-12 17:16:41 +02:00
committed by GitHub
parent dab4ea0656
commit 9b3765c41d
10 changed files with 550 additions and 325 deletions

View File

@@ -3,10 +3,7 @@ use crate::{
alien::Animations,
camera::{CameraArmRotation, CameraTarget},
cash::{Cash, CashCollectEvent},
control::{
Controls,
controller::{CharacterControllerBundle, MovementBundle, PlayerMovement},
},
control::controller_common::{CharacterControllerBundle, PlayerMovement},
global_observer,
head::ActiveHead,
heads::HeadChanged,
@@ -17,10 +14,7 @@ use crate::{
sounds::PlaySound,
tb_entities::SpawnPoint,
};
use avian3d::{
math::{Scalar, Vector},
prelude::*,
};
use avian3d::{math::Vector, prelude::*};
use bevy::{
input::common_conditions::input_just_pressed,
prelude::*,
@@ -55,11 +49,6 @@ pub fn plugin(app: &mut App) {
.run_if(in_state(GameState::Playing)),
);
app.add_systems(
Update,
(rotate_view_keyboard, rotate_view_gamepad).run_if(in_state(GameState::Playing)),
);
global_observer!(app, on_update_head);
}
@@ -80,9 +69,6 @@ fn spawn(
let gravity = Vector::NEG_Y * 40.0;
let collider = Collider::capsule(0.9, 1.2);
let acceleration = 30.0 * 60.;
let jump_impulse = 18.0;
let max_slope_angle = (60.0 as Scalar).to_radians();
commands
.spawn((
@@ -95,11 +81,7 @@ fn spawn(
Visibility::default(),
// LockedAxes::ROTATION_LOCKED, todo
CollisionLayers::new(LayerMask(GameLayer::Player.to_bits()), LayerMask::ALL),
CharacterControllerBundle::new(
collider,
gravity,
MovementBundle::new(acceleration, jump_impulse, max_slope_angle),
),
CharacterControllerBundle::new(collider, gravity),
))
.with_children(|parent| {
parent
@@ -127,38 +109,6 @@ fn spawn(
));
}
fn rotate_view_gamepad(
controls: Res<Controls>,
mut player: Query<&mut Transform, With<PlayerBodyMesh>>,
) {
let Some(gamepad) = controls.gamepad_state else {
return;
};
if gamepad.view_mode {
return;
}
for mut tr in &mut player {
tr.rotate_y(gamepad.look_dir.x * -0.001);
}
}
fn rotate_view_keyboard(
mut controls: ResMut<Controls>,
mut player: Query<&mut Transform, With<PlayerBodyMesh>>,
) {
if controls.keyboard_state.view_mode {
return;
}
for mut tr in &mut player {
tr.rotate_y(controls.keyboard_state.look_dir.x * -0.001);
}
controls.keyboard_state.look_dir = Vec2::ZERO;
}
fn cursor_recenter(mut q_windows: Query<&mut Window, With<PrimaryWindow>>) {
let mut primary_window = q_windows.single_mut();
let center = Vec2::new(primary_window.width() / 2.0, primary_window.height() / 2.0);