use heads db to choose movement controls

This commit is contained in:
2025-04-12 17:25:29 +02:00
parent 9b3765c41d
commit 8bcc688fbb

View File

@@ -1,6 +1,10 @@
use bevy::prelude::*;
use crate::GameState;
use crate::{
GameState,
head::ActiveHead,
heads_database::{HeadControls, HeadsDatabase},
};
mod collisions;
pub mod controller_common;
@@ -48,10 +52,6 @@ pub fn plugin(app: &mut App) {
app.add_event::<ControllerSwitchEvent>();
app.add_systems(
Update,
switch_controller.before(ControllerSet::CollectInputs),
);
app.configure_sets(
Update,
(
@@ -66,20 +66,24 @@ pub fn plugin(app: &mut App) {
.chain()
.run_if(in_state(GameState::Playing)),
);
app.add_systems(Update, head_change.run_if(in_state(GameState::Playing)));
}
fn switch_controller(
fn head_change(
query: Query<&ActiveHead, Changed<ActiveHead>>,
heads_db: Res<HeadsDatabase>,
mut selected_controller: ResMut<SelectedController>,
keyboard: Res<ButtonInput<KeyCode>>,
mut event_controller_switch: EventWriter<ControllerSwitchEvent>,
) {
if keyboard.just_pressed(KeyCode::KeyF) {
event_controller_switch.send(ControllerSwitchEvent);
for head in query.iter() {
let stats = heads_db.head_stats(head.0);
let controller = match stats.controls {
HeadControls::Plane => ControllerSet::ApplyControlsFly,
HeadControls::Walk => ControllerSet::ApplyControlsRun,
};
if selected_controller.0 == ControllerSet::ApplyControlsFly {
selected_controller.0 = ControllerSet::ApplyControlsRun;
} else {
selected_controller.0 = ControllerSet::ApplyControlsFly;
if selected_controller.0 != controller {
selected_controller.0 = controller;
}
}
}