diff options
Diffstat (limited to 'servers')
-rw-r--r-- | servers/physics/physics_server_sw.h | 1 | ||||
-rw-r--r-- | servers/physics_server.h | 15 |
2 files changed, 16 insertions, 0 deletions
diff --git a/servers/physics/physics_server_sw.h b/servers/physics/physics_server_sw.h index 1c5754124d..2b3d2ae91f 100644 --- a/servers/physics/physics_server_sw.h +++ b/servers/physics/physics_server_sw.h @@ -231,6 +231,7 @@ public: virtual bool body_is_ray_pickable(RID p_body) const; virtual bool body_test_motion(RID p_body, const Transform &p_from, const Vector3 &p_motion, bool p_infinite_inertia, MotionResult *r_result = NULL); + virtual int body_test_ray_separation(RID p_body, const Transform &p_transform, bool p_infinite_inertia, Vector3 &r_recover_motion, SeparationResult *r_results, int p_result_max, float p_margin = 0.001) { return 0; } // this function only works on physics process, errors and returns null otherwise virtual PhysicsDirectBodyState *body_get_direct_state(RID p_body); diff --git a/servers/physics_server.h b/servers/physics_server.h index 948aec1a2d..982fcd68e3 100644 --- a/servers/physics_server.h +++ b/servers/physics_server.h @@ -484,6 +484,21 @@ public: virtual bool body_test_motion(RID p_body, const Transform &p_from, const Vector3 &p_motion, bool p_infinite_inertia, MotionResult *r_result = NULL) = 0; + struct SeparationResult { + + float collision_depth; + Vector3 collision_point; + Vector3 collision_normal; + Vector3 collider_velocity; + int collision_local_shape; + ObjectID collider_id; + RID collider; + int collider_shape; + Variant collider_metadata; + }; + + virtual int body_test_ray_separation(RID p_body, const Transform &p_transform, bool p_infinite_inertia, Vector3 &r_recover_motion, SeparationResult *r_results, int p_result_max, float p_margin = 0.001) = 0; + /* SOFT BODY */ virtual RID soft_body_create(bool p_init_sleeping = false) = 0; |