swap heads on gamepad
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
use crate::{heads_ui::SwapHead, shooting::TriggerState};
|
||||||
use bevy::{
|
use bevy::{
|
||||||
input::{
|
input::{
|
||||||
ButtonState,
|
ButtonState,
|
||||||
@@ -7,8 +8,6 @@ use bevy::{
|
|||||||
prelude::*,
|
prelude::*,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::shooting::TriggerState;
|
|
||||||
|
|
||||||
#[derive(Resource, Debug, Clone, Copy, Default, PartialEq)]
|
#[derive(Resource, Debug, Clone, Copy, Default, PartialEq)]
|
||||||
pub struct ControlState {
|
pub struct ControlState {
|
||||||
pub move_dir: Vec2,
|
pub move_dir: Vec2,
|
||||||
@@ -77,15 +76,21 @@ fn gamepad_controls(
|
|||||||
move_dir: gamepad.left_stick(),
|
move_dir: gamepad.left_stick(),
|
||||||
look_dir,
|
look_dir,
|
||||||
jump: gamepad.pressed(GamepadButton::South),
|
jump: gamepad.pressed(GamepadButton::South),
|
||||||
view_mode: gamepad.pressed(GamepadButton::East),
|
view_mode: gamepad.pressed(GamepadButton::LeftTrigger2),
|
||||||
};
|
};
|
||||||
|
|
||||||
if gamepad.just_pressed(GamepadButton::North) {
|
if gamepad.just_pressed(GamepadButton::RightTrigger2) {
|
||||||
commands.trigger(TriggerState::Active);
|
commands.trigger(TriggerState::Active);
|
||||||
}
|
}
|
||||||
if gamepad.just_released(GamepadButton::North) {
|
if gamepad.just_released(GamepadButton::RightTrigger2) {
|
||||||
commands.trigger(TriggerState::Inactive);
|
commands.trigger(TriggerState::Inactive);
|
||||||
}
|
}
|
||||||
|
if gamepad.just_pressed(GamepadButton::LeftTrigger) {
|
||||||
|
commands.trigger(SwapHead::Left);
|
||||||
|
}
|
||||||
|
if gamepad.just_pressed(GamepadButton::RightTrigger) {
|
||||||
|
commands.trigger(SwapHead::Right);
|
||||||
|
}
|
||||||
|
|
||||||
if controls
|
if controls
|
||||||
.gamepad_state
|
.gamepad_state
|
||||||
@@ -104,7 +109,11 @@ fn mouse_rotate(mut mouse: EventReader<MouseMotion>, mut controls: ResMut<Contro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn keyboard_controls(keyboard: Res<ButtonInput<KeyCode>>, mut controls: ResMut<Controls>) {
|
fn keyboard_controls(
|
||||||
|
mut commands: Commands,
|
||||||
|
keyboard: Res<ButtonInput<KeyCode>>,
|
||||||
|
mut controls: ResMut<Controls>,
|
||||||
|
) {
|
||||||
let mut direction = Vec2::ZERO;
|
let mut direction = Vec2::ZERO;
|
||||||
|
|
||||||
if keyboard.pressed(KeyCode::KeyW) {
|
if keyboard.pressed(KeyCode::KeyW) {
|
||||||
@@ -120,6 +129,13 @@ fn keyboard_controls(keyboard: Res<ButtonInput<KeyCode>>, mut controls: ResMut<C
|
|||||||
direction += Vec2::X;
|
direction += Vec2::X;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if keyboard.just_pressed(KeyCode::KeyQ) {
|
||||||
|
commands.trigger(SwapHead::Left);
|
||||||
|
}
|
||||||
|
if keyboard.just_pressed(KeyCode::KeyE) {
|
||||||
|
commands.trigger(SwapHead::Right);
|
||||||
|
}
|
||||||
|
|
||||||
controls.keyboard_state.move_dir = direction;
|
controls.keyboard_state.move_dir = direction;
|
||||||
controls.keyboard_state.jump = keyboard.pressed(KeyCode::Space);
|
controls.keyboard_state.jump = keyboard.pressed(KeyCode::Space);
|
||||||
controls.keyboard_state.view_mode = keyboard.pressed(KeyCode::Tab);
|
controls.keyboard_state.view_mode = keyboard.pressed(KeyCode::Tab);
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
|
|
||||||
|
#[derive(Event, Reflect)]
|
||||||
|
pub enum SwapHead {
|
||||||
|
Left,
|
||||||
|
Right,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Component, Reflect, Default)]
|
#[derive(Component, Reflect, Default)]
|
||||||
#[reflect(Component)]
|
#[reflect(Component)]
|
||||||
struct HeadSelector(pub usize);
|
struct HeadSelector(pub usize);
|
||||||
@@ -29,7 +35,8 @@ pub struct HeadChanged(pub usize);
|
|||||||
pub fn plugin(app: &mut App) {
|
pub fn plugin(app: &mut App) {
|
||||||
app.register_type::<HeadDamage>();
|
app.register_type::<HeadDamage>();
|
||||||
app.add_systems(Startup, setup);
|
app.add_systems(Startup, setup);
|
||||||
app.add_systems(Update, (update, toggle_heads));
|
app.add_systems(Update, update);
|
||||||
|
app.add_observer(on_swap_head);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||||
@@ -181,22 +188,15 @@ fn update(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn toggle_heads(
|
fn on_swap_head(trigger: Trigger<SwapHead>, mut commands: Commands, mut res: ResMut<ActiveHeads>) {
|
||||||
mut commands: Commands,
|
match trigger.event() {
|
||||||
mut res: ResMut<ActiveHeads>,
|
SwapHead::Right => {
|
||||||
keys: Res<ButtonInput<KeyCode>>,
|
|
||||||
) {
|
|
||||||
let changed = if keys.just_pressed(KeyCode::KeyE) {
|
|
||||||
res.current_slot = (res.current_slot + 1) % 5;
|
res.current_slot = (res.current_slot + 1) % 5;
|
||||||
true
|
|
||||||
} else if keys.just_pressed(KeyCode::KeyQ) {
|
|
||||||
res.current_slot = (res.current_slot + 4) % 5;
|
|
||||||
true
|
|
||||||
} else {
|
|
||||||
false
|
|
||||||
};
|
|
||||||
|
|
||||||
if changed {
|
|
||||||
commands.trigger(HeadChanged(res.heads[res.current_slot].unwrap()));
|
|
||||||
}
|
}
|
||||||
|
SwapHead::Left => {
|
||||||
|
res.current_slot = (res.current_slot + 4) % 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
commands.trigger(HeadChanged(res.heads[res.current_slot].unwrap()));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user