aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Nils Ferner <contact@jnferner.com>2023-01-26 20:07:38 +0100
committerJan Nils Ferner <contact@jnferner.com>2023-01-26 20:07:38 +0100
commit848009e399fcbce963c86277dab869434d3bb6df (patch)
treefb9fbd58c33cbd46a84ce9c9746af9849ab5c5d7
parent075f45ca1ca80e3f1f0923c3bb00b92f29b8cb66 (diff)
downloadrapier-848009e399fcbce963c86277dab869434d3bb6df.tar.gz
rapier-848009e399fcbce963c86277dab869434d3bb6df.tar.bz2
rapier-848009e399fcbce963c86277dab869434d3bb6df.zip
Extract function
-rw-r--r--src/control/character_controller.rs33
1 files changed, 15 insertions, 18 deletions
diff --git a/src/control/character_controller.rs b/src/control/character_controller.rs
index 78c2403..0475a10 100644
--- a/src/control/character_controller.rs
+++ b/src/control/character_controller.rs
@@ -273,12 +273,6 @@ impl KinematicCharacterController {
);
if !stair_handled {
println!("[stair] translation_remaining: {translation_remaining:?}");
- // No slopes or stairs ahead; try to move along obstacles.
- let allowed_dist =
- (toi.toi - (-toi.normal1.dot(&translation_dir)) * offset).max(0.0);
- let allowed_translation = *translation_dir * allowed_dist;
- result.translation += allowed_translation;
- translation_remaining -= allowed_translation;
}
}
@@ -486,18 +480,9 @@ impl KinematicCharacterController {
hit: &TOI,
translation_remaining: &Vector<Real>,
) -> Option<Vector<Real>> {
- let vertical_translation_remaining = *self.up * (self.up.dot(translation_remaining));
- let horizontal_translation_remaining =
- *translation_remaining - vertical_translation_remaining;
-
- let horizontal_slope_translation =
- horizontal_translation_remaining
- - *hit.normal1 * (horizontal_translation_remaining).dot(&hit.normal1);
-
- let vertical_slope_translation =
- vertical_translation_remaining
- - *hit.normal1 * (vertical_translation_remaining).dot(&hit.normal1);
-
+ let [vertical_slope_translation, horizontal_slope_translation] =
+ self.split_into_components(translation_remaining)
+ .map(|remaining| subtract_hit(remaining, hit));
let slope_translation = horizontal_slope_translation + vertical_slope_translation;
// Check if there is a slope to climb.
@@ -514,6 +499,13 @@ impl KinematicCharacterController {
}
+ fn split_into_components(&self, translation: &Vector<Real>) -> [Vector<Real>; 2] {
+ let vertical_translation = *self.up * (self.up.dot(translation));
+ let horizontal_translation = *translation - vertical_translation;
+ [vertical_translation, horizontal_translation]
+ }
+
+
fn handle_stairs(
&self,
bodies: &RigidBodySet,
@@ -732,3 +724,8 @@ impl KinematicCharacterController {
}
}
}
+
+
+fn subtract_hit(translation: Vector<Real>, hit: &TOI) -> Vector<Real> {
+ translation - *hit.normal1 * (translation).dot(&hit.normal1)
+} \ No newline at end of file