You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-12 13:20:55 +00:00
Fix move_and_collide causing sliding on slopes
Make sure the direction of the motion is preserved, unless the depth is higher than the margin, which means the body needs depenetration in any direction. Also changed move_and_slide to avoid sliding on the first motion, in order to avoid issues with unstable position on ground when jumping. Co-authored-by: fabriceci <fabricecipolla@gmail.com>
This commit is contained in:
@@ -392,6 +392,18 @@ int PhysicsTestMotionResult::get_collider_shape() const {
|
||||
return result.collider_shape;
|
||||
}
|
||||
|
||||
real_t PhysicsTestMotionResult::get_collision_depth() const {
|
||||
return result.collision_depth;
|
||||
}
|
||||
|
||||
real_t PhysicsTestMotionResult::get_collision_safe_fraction() const {
|
||||
return result.collision_safe_fraction;
|
||||
}
|
||||
|
||||
real_t PhysicsTestMotionResult::get_collision_unsafe_fraction() const {
|
||||
return result.collision_unsafe_fraction;
|
||||
}
|
||||
|
||||
void PhysicsTestMotionResult::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_motion"), &PhysicsTestMotionResult::get_motion);
|
||||
ClassDB::bind_method(D_METHOD("get_motion_remainder"), &PhysicsTestMotionResult::get_motion_remainder);
|
||||
@@ -402,6 +414,9 @@ void PhysicsTestMotionResult::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_collider_rid"), &PhysicsTestMotionResult::get_collider_rid);
|
||||
ClassDB::bind_method(D_METHOD("get_collider"), &PhysicsTestMotionResult::get_collider);
|
||||
ClassDB::bind_method(D_METHOD("get_collider_shape"), &PhysicsTestMotionResult::get_collider_shape);
|
||||
ClassDB::bind_method(D_METHOD("get_collision_depth"), &PhysicsTestMotionResult::get_collision_depth);
|
||||
ClassDB::bind_method(D_METHOD("get_collision_safe_fraction"), &PhysicsTestMotionResult::get_collision_safe_fraction);
|
||||
ClassDB::bind_method(D_METHOD("get_collision_unsafe_fraction"), &PhysicsTestMotionResult::get_collision_unsafe_fraction);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "motion"), "", "get_motion");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "motion_remainder"), "", "get_motion_remainder");
|
||||
@@ -412,6 +427,9 @@ void PhysicsTestMotionResult::_bind_methods() {
|
||||
ADD_PROPERTY(PropertyInfo(Variant::_RID, "collider_rid"), "", "get_collider_rid");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "collider"), "", "get_collider");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "collider_shape"), "", "get_collider_shape");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "collision_depth"), "", "get_collision_depth");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "collision_safe_fraction"), "", "get_collision_safe_fraction");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "collision_unsafe_fraction"), "", "get_collision_unsafe_fraction");
|
||||
}
|
||||
|
||||
///////////////////////////////////////
|
||||
|
||||
Reference in New Issue
Block a user