From fd44dce0b26278b0a6d713d5261ac73f4172b108 Mon Sep 17 00:00:00 2001 From: Rod Kay Date: Sun, 31 Dec 2023 21:26:20 +1100 Subject: [PATCH] physics.space: Add point casting. --- .../interface/source/physics-space.ads | 12 ++++++++++ .../private/box2d/box2d_physics-space.adb | 24 +++++++++++++++++++ .../private/box2d/box2d_physics-space.ads | 2 ++ .../private/bullet/bullet_physics-space.adb | 13 ++++++++++ .../private/bullet/bullet_physics-space.ads | 3 +++ 5 files changed, 54 insertions(+) diff --git a/3-mid/physics/interface/source/physics-space.ads b/3-mid/physics/interface/source/physics-space.ads index ed55c7d..664e4a1 100644 --- a/3-mid/physics/interface/source/physics-space.ads +++ b/3-mid/physics/interface/source/physics-space.ads @@ -75,6 +75,18 @@ is function cast_Ray (Self : access Item; From, To : in Vector_3) return ray_Collision is abstract; + --- Point Casting + -- + + type point_Collision is + record + near_Object : Object.view; + Site_world : Vector_3; + end record; + + function cast_Point (Self : access Item; Point : in Vector_3) return point_Collision is abstract; + + --- Bounds -- diff --git a/3-mid/physics/interface/source/private/box2d/box2d_physics-space.adb b/3-mid/physics/interface/source/private/box2d/box2d_physics-space.adb index 361b34b..7c03687 100644 --- a/3-mid/physics/interface/source/private/box2d/box2d_physics-space.adb +++ b/3-mid/physics/interface/source/private/box2d/box2d_physics-space.adb @@ -2,6 +2,7 @@ with box2d_c.Binding, box2d_c.b2d_Contact, box2d_c.b2d_ray_Collision, + box2d_c.b2d_point_Collision, box2d_physics.Shape, box2d_physics.Joint, @@ -452,6 +453,29 @@ is + overriding + function cast_Point (Self : access Item; Point : in Vector_3) return physics.Space.point_Collision + is + the_Collision : physics.Space.point_Collision; + c_Point : aliased c_math_c.Vector_3.item := +Point; + the_c_Collision : constant box2d_c.b2d_point_Collision.item := b2d_Space_cast_Point (Self.C, c_Point'unchecked_Access); + + begin + if the_c_Collision.near_Object /= null + then + new_Line; + Put_Line ("box2d_Physics.Space.cast_Point ~ the_c_Collision.near_Object = " & the_c_Collision.near_Object'Image); + the_Collision.near_Object := to_Object_view (b2d_Object_user_Data (the_c_Collision.near_Object)); + end if; + + the_Collision.Site_world := +the_c_Collision.Site_world; + + return the_Collision; + end cast_Point; + + + + overriding procedure evolve (Self : in out Item; By : in Duration) is diff --git a/3-mid/physics/interface/source/private/box2d/box2d_physics-space.ads b/3-mid/physics/interface/source/private/box2d/box2d_physics-space.ads index f901f60..e706acc 100644 --- a/3-mid/physics/interface/source/private/box2d/box2d_physics-space.ads +++ b/3-mid/physics/interface/source/private/box2d/box2d_physics-space.ads @@ -203,6 +203,8 @@ private overriding function cast_Ray (Self : access Item; From, To : in Vector_3) return physics.Space.ray_Collision; overriding + function cast_Point (Self : access Item; Point : in Vector_3) return physics.Space.point_Collision; + overriding procedure add (Self : in out Item; the_Joint : in physics.Joint.view); overriding procedure rid (Self : in out Item; the_Joint : in physics.Joint.view); diff --git a/3-mid/physics/interface/source/private/bullet/bullet_physics-space.adb b/3-mid/physics/interface/source/private/bullet/bullet_physics-space.adb index df691e7..f84d871 100644 --- a/3-mid/physics/interface/source/private/bullet/bullet_physics-space.adb +++ b/3-mid/physics/interface/source/private/bullet/bullet_physics-space.adb @@ -415,6 +415,19 @@ is + overriding + function cast_Point (Self : access Item; Point : in Vector_3) return physics.Space.point_Collision + is + Result : physics.Space.point_Collision; + begin + raise Program_Error with "TODO"; + return Result; + end cast_Point; + + + + + overriding procedure evolve (Self : in out Item; By : in Duration) is diff --git a/3-mid/physics/interface/source/private/bullet/bullet_physics-space.ads b/3-mid/physics/interface/source/private/bullet/bullet_physics-space.ads index 607bf5c..3280670 100644 --- a/3-mid/physics/interface/source/private/bullet/bullet_physics-space.ads +++ b/3-mid/physics/interface/source/private/bullet/bullet_physics-space.ads @@ -189,6 +189,9 @@ private overriding function cast_Ray (Self : access Item; From, To : in Vector_3) return physics.Space.ray_Collision; + overriding + function cast_Point (Self : access Item; Point : in Vector_3) return physics.Space.point_Collision; + overriding procedure evolve (Self : in out Item; By : in Duration);