From fac561c902ec3d004d3f95df137beb3450231bc6 Mon Sep 17 00:00:00 2001 From: Jan Hohenheim Date: Sun, 5 Feb 2023 02:18:43 +0100 Subject: Fix erroneous sliding --- src/control/character_controller.rs | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'src/control') diff --git a/src/control/character_controller.rs b/src/control/character_controller.rs index 7ae0d5f..f7f7e2c 100644 --- a/src/control/character_controller.rs +++ b/src/control/character_controller.rs @@ -499,16 +499,20 @@ impl KinematicCharacterController { let angle_with_floor = self.up.angle(&hit.normal1); let climbing = self.up.dot(&slope_translation) >= 0.0; - if climbing { - // Are we allowed to climb? - (angle_with_floor <= self.max_slope_climb_angle).then_some(slope_translation) - } - // Are we forced to slide? - else if angle_with_floor >= self.min_slope_slide_angle { - slope_translation.into() - } else { - horizontal_translation.into() - } + climbing + .then(|| { + (angle_with_floor <= self.max_slope_climb_angle) // Are we allowed to climb? + .then_some(horizontal_translation) + }) + .unwrap_or_else(|| { + // Are we allowed to slide? + if angle_with_floor >= self.min_slope_slide_angle { + slope_translation + } else { + horizontal_translation + } + .into() + }) } fn split_into_components(&self, translation: &Vector) -> [Vector; 2] { -- cgit