Skip to content

Commit

Permalink
feat(ragdoll): Add a new input for player ragdoll'ing self
Browse files Browse the repository at this point in the history
  • Loading branch information
MaxCWhitehead committed Mar 23, 2024
1 parent 10a49d5 commit 2f684e6
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 3 deletions.
3 changes: 3 additions & 0 deletions assets/game.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ default_settings:
shoot: !Button West
slide: !Button North
pause: !Button Start
ragdoll: !Button RightTrigger
menu_back: !Button East
menu_start: !Button Start
menu_confirm: !Button South
Expand All @@ -60,6 +61,7 @@ default_settings:
grab: !Keyboard V
shoot: !Keyboard C
slide: !Keyboard B
ragdoll: !Keyboard F
pause: !Keyboard Escape
menu_back: !Keyboard Escape
menu_start: !Keyboard Return
Expand All @@ -76,6 +78,7 @@ default_settings:
grab: !Keyboard ShiftRight
shoot: !Keyboard Period
slide: !Keyboard Slash
ragdoll: !Keyboard M
menu_confirm: !Keyboard Comma
menu_back: !Keyboard ShiftRight

Expand Down
1 change: 1 addition & 0 deletions assets/locales/en-US/controls.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ jump = Jump
grab-drop = Grab / Drop
shoot = Shoot
slide = Slide
ragdoll = Ragdoll
menu-confirm = Menu Confirm
menu-back = Menu Back
menu-start = Menu Start
21 changes: 18 additions & 3 deletions src/input.rs
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,9 @@ pub struct PlayerControl {

pub slide_pressed: bool,
pub slide_just_pressed: bool,

pub ragdoll_pressed: bool,
pub ragdoll_just_pressed: bool,
}

#[derive(HasSchema, Clone)]
Expand Down Expand Up @@ -246,6 +249,11 @@ impl<'a>
current.slide_pressed,
last.slide_pressed,
),
(
&mut current.ragdoll_just_pressed,
current.ragdoll_pressed,
last.ragdoll_pressed,
),
(
&mut current.menu_back_just_pressed,
current.menu_back_pressed,
Expand Down Expand Up @@ -349,6 +357,7 @@ impl<'a>
(&mut control.grab_pressed, &mapping.grab),
(&mut control.shoot_pressed, &mapping.shoot),
(&mut control.slide_pressed, &mapping.slide),
(&mut control.ragdoll_pressed, &mapping.ragdoll),
(&mut control.menu_back_pressed, &mapping.menu_back),
(&mut control.menu_confirm_pressed, &mapping.menu_confirm),
(&mut control.menu_start_pressed, &mapping.menu_start),
Expand Down Expand Up @@ -399,6 +408,7 @@ impl NetworkPlayerControl<DensePlayerControl> for PlayerControl {
dense_control.set_grab_pressed(self.grab_pressed);
dense_control.set_slide_pressed(self.slide_pressed);
dense_control.set_shoot_pressed(self.shoot_pressed);
dense_control.set_ragdoll_pressed(self.ragdoll_pressed);
dense_control.set_move_direction(proto::DenseMoveDirection(self.move_direction));
dense_control
}
Expand All @@ -416,6 +426,10 @@ impl NetworkPlayerControl<DensePlayerControl> for PlayerControl {
self.shoot_just_pressed = shoot_pressed && !self.shoot_pressed;
self.shoot_pressed = shoot_pressed;

let ragdoll_pressed = new_control.ragdoll_pressed();
self.ragdoll_just_pressed = ragdoll_pressed && !self.ragdoll_pressed;
self.ragdoll_pressed = ragdoll_pressed;

let was_moving = self.move_direction.length_squared() > f32::MIN_POSITIVE;
self.move_direction = new_control.move_direction().0;
let is_moving = self.move_direction.length_squared() > f32::MIN_POSITIVE;
Expand All @@ -425,18 +439,19 @@ impl NetworkPlayerControl<DensePlayerControl> for PlayerControl {

#[cfg(not(target_arch = "wasm32"))]
bitfield::bitfield! {
/// A player's controller inputs densely packed into a single u16.
/// A player's controller inputs densely packed into a single u32.
///
/// This is used when sending player inputs across the network.
#[derive(bytemuck::Pod, bytemuck::Zeroable, Copy, Clone, PartialEq, Eq)]//, Reflect)]
#[repr(transparent)]
pub struct DensePlayerControl(u16);
pub struct DensePlayerControl(u32);
impl Debug;
pub jump_pressed, set_jump_pressed: 0;
pub shoot_pressed, set_shoot_pressed: 1;
pub grab_pressed, set_grab_pressed: 2;
pub slide_pressed, set_slide_pressed: 3;
pub from into DenseMoveDirection, move_direction, set_move_direction: 15, 4;
pub ragdoll_pressed, set_ragdoll_pressed: 4;
pub from into DenseMoveDirection, move_direction, set_move_direction: 16, 5;
}

#[cfg(not(target_arch = "wasm32"))]
Expand Down
1 change: 1 addition & 0 deletions src/settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ pub struct PlayerControlSetting {
pub grab: InputKind,
pub shoot: InputKind,
pub slide: InputKind,
pub ragdoll: InputKind,
pub menu_back: InputKind,
pub menu_start: InputKind,
pub menu_confirm: InputKind,
Expand Down
8 changes: 8 additions & 0 deletions src/ui/main_menu/settings/controls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,14 @@ pub(super) fn widget(
&mut mapping.gamepad.slide,
],
),
(
localization.get("ragdoll"),
[
&mut mapping.keyboard1.ragdoll,
&mut mapping.keyboard2.ragdoll,
&mut mapping.gamepad.ragdoll,
],
),
(
localization.get("pause"),
[
Expand Down

0 comments on commit 2f684e6

Please sign in to comment.