fix look around with gamepad
This commit is contained in:
@@ -37,7 +37,7 @@ pub fn plugin(app: &mut App) {
|
|||||||
app.register_type::<CameraState>();
|
app.register_type::<CameraState>();
|
||||||
app.init_resource::<CameraState>();
|
app.init_resource::<CameraState>();
|
||||||
app.add_systems(Startup, startup);
|
app.add_systems(Startup, startup);
|
||||||
app.add_systems(Update, (update, rotate_view));
|
app.add_systems(Update, (update, rotate_view_keyboard, rotate_view_gamepad));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn startup(mut commands: Commands) {
|
fn startup(mut commands: Commands) {
|
||||||
@@ -92,7 +92,7 @@ fn update(
|
|||||||
*cam_transform = Transform::from_translation(cam_pos).looking_at(target, Vec3::Y);
|
*cam_transform = Transform::from_translation(cam_pos).looking_at(target, Vec3::Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn rotate_view(
|
fn rotate_view_keyboard(
|
||||||
mut controls: ResMut<Controls>,
|
mut controls: ResMut<Controls>,
|
||||||
mut cam: Query<&mut CameraRotation>,
|
mut cam: Query<&mut CameraRotation>,
|
||||||
movement: Res<PlayerMovement>,
|
movement: Res<PlayerMovement>,
|
||||||
@@ -105,6 +105,7 @@ fn rotate_view(
|
|||||||
if movement.any_direction {
|
if movement.any_direction {
|
||||||
cam.0 = 0.;
|
cam.0 = 0.;
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,3 +113,25 @@ fn rotate_view(
|
|||||||
|
|
||||||
controls.keyboard_state.look_dir = Vec2::ZERO;
|
controls.keyboard_state.look_dir = Vec2::ZERO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn rotate_view_gamepad(
|
||||||
|
controls: Res<Controls>,
|
||||||
|
mut cam: Query<&mut CameraRotation>,
|
||||||
|
movement: Res<PlayerMovement>,
|
||||||
|
) {
|
||||||
|
let Ok(mut cam) = cam.get_single_mut() else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
let Some(gamepad) = controls.gamepad_state else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
if !gamepad.view_mode {
|
||||||
|
if movement.any_direction {
|
||||||
|
cam.0 = 0.;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cam.0 += gamepad.look_dir.x * -0.001;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ fn main() {
|
|||||||
app.add_plugins(DefaultPlugins.set(WindowPlugin {
|
app.add_plugins(DefaultPlugins.set(WindowPlugin {
|
||||||
primary_window: Some(Window {
|
primary_window: Some(Window {
|
||||||
title: "HEDZ reloaded".into(),
|
title: "HEDZ reloaded".into(),
|
||||||
resolution: (1024., 768.).into(),
|
// resolution: (1024., 768.).into(),
|
||||||
..default()
|
..default()
|
||||||
}),
|
}),
|
||||||
..default()
|
..default()
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ pub fn plugin(app: &mut App) {
|
|||||||
apply_controls.in_set(TnuaUserControlsSystemSet),
|
apply_controls.in_set(TnuaUserControlsSystemSet),
|
||||||
);
|
);
|
||||||
|
|
||||||
app.add_systems(Update, rotate_view);
|
app.add_systems(Update, (rotate_view_keyboard, rotate_view_gamepad));
|
||||||
|
|
||||||
app.add_observer(update_head);
|
app.add_observer(update_head);
|
||||||
}
|
}
|
||||||
@@ -126,7 +126,25 @@ fn spawn(
|
|||||||
player_spawned.spawned = true;
|
player_spawned.spawned = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn rotate_view(
|
fn rotate_view_gamepad(
|
||||||
|
controls: Res<Controls>,
|
||||||
|
// todo: Put the player head as a child of the rig to avoid this mess:
|
||||||
|
mut player: Query<&mut Transform, With<PlayerRig>>,
|
||||||
|
) {
|
||||||
|
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 controls: ResMut<Controls>,
|
||||||
// todo: Put the player head as a child of the rig to avoid this mess:
|
// todo: Put the player head as a child of the rig to avoid this mess:
|
||||||
mut player: Query<&mut Transform, With<PlayerRig>>,
|
mut player: Query<&mut Transform, With<PlayerRig>>,
|
||||||
@@ -137,10 +155,6 @@ fn rotate_view(
|
|||||||
|
|
||||||
for mut tr in &mut player {
|
for mut tr in &mut player {
|
||||||
tr.rotate_y(controls.keyboard_state.look_dir.x * -0.001);
|
tr.rotate_y(controls.keyboard_state.look_dir.x * -0.001);
|
||||||
|
|
||||||
if let Some(gamepad) = controls.gamepad_state {
|
|
||||||
tr.rotate_y(gamepad.look_dir.x * -0.001);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
controls.keyboard_state.look_dir = Vec2::ZERO;
|
controls.keyboard_state.look_dir = Vec2::ZERO;
|
||||||
|
|||||||
Reference in New Issue
Block a user