diff --git a/src/heads_ui.rs b/src/heads_ui.rs index 34070f7..ff6096c 100644 --- a/src/heads_ui.rs +++ b/src/heads_ui.rs @@ -50,7 +50,7 @@ fn setup(mut commands: Commands, asset_server: Res) { let head_02 = asset_server.load("ui/heads/commando.png"); let head_03 = asset_server.load("ui/heads/goblin.png"); let head_04 = asset_server.load("ui/heads/highland hammer thrower.png"); - let head_05 = asset_server.load("ui/heads/legionaire.png"); + let head_05 = asset_server.load("ui/heads/legionnaire.png"); commands.insert_resource(HeadsImages { heads: vec![head_01, head_02, head_03, head_04, head_05], diff --git a/src/player.rs b/src/player.rs index c281480..90b0252 100644 --- a/src/player.rs +++ b/src/player.rs @@ -1,4 +1,4 @@ -use std::time::Duration; +use std::{f32::consts::PI, time::Duration}; use crate::{ DebugVisuals, @@ -27,6 +27,9 @@ struct PlayerAnimations; #[derive(Component, Default)] struct PlayerHead; +#[derive(Component, Default)] +struct PlayerRig; + #[derive(Resource, Default)] struct PlayerSpawned { spawned: bool, @@ -101,6 +104,7 @@ fn spawn( )) .with_child(( Name::from("body rig"), + PlayerRig, Transform::from_translation(Vec3::new(0., -3., 0.)) .with_rotation(Quat::from_rotation_y(std::f32::consts::PI)) .with_scale(Vec3::splat(1.5)), @@ -117,14 +121,13 @@ fn spawn( fn cursor_events( mut mouse: EventReader, - mut player: Query<&mut Transform, With>, + // todo: Put the player head as a child of the rig to avoid this mess: + mut player: Query<&mut Transform, Or<(With, With)>>, ) { - let Ok(mut player) = player.get_single_mut() else { - return; - }; - for ev in mouse.read() { - player.rotate_y(ev.delta.x * -0.001); + for mut tr in &mut player { + tr.rotate_y(ev.delta.x * -0.001); + } } } @@ -152,7 +155,7 @@ fn initial_grab_cursor(mut primary_window: Query<&mut Window, With>, mut query: Query<&mut TnuaController>, - player: Query<&Transform, With>, + player: Query<&Transform, With>, mut controls: ResMut, ) { let Ok(mut controller) = query.get_single_mut() else { @@ -166,16 +169,16 @@ fn apply_controls( let mut direction = Vec3::ZERO; if keyboard.pressed(KeyCode::KeyW) { - direction = player.forward().as_vec3(); - } - if keyboard.pressed(KeyCode::KeyS) { direction = player.forward().as_vec3() * -1.; } + if keyboard.pressed(KeyCode::KeyS) { + direction = player.forward().as_vec3(); + } if keyboard.pressed(KeyCode::KeyA) { - direction += player.left().as_vec3(); + direction += player.right().as_vec3(); } if keyboard.pressed(KeyCode::KeyD) { - direction += player.right().as_vec3(); + direction += player.left().as_vec3(); } if controls.any_direction != (direction != Vec3::ZERO) { @@ -206,7 +209,7 @@ fn apply_controls( } fn update_camera( - player: Query<&Transform, With>, + player: Query<&GlobalTransform, With>, mut rig: Single<&mut Rig>, res: Res, ) { @@ -218,8 +221,10 @@ fn update_camera( return; } - rig.driver_mut::() - .set_position_target(player.translation, player.rotation); + rig.driver_mut::().set_position_target( + player.translation(), + player.rotation() * Quat::from_rotation_y(PI), + ); } fn collect_cash(