Add initial prototype.
This commit is contained in:
207
3-mid/physics/interface/source/physics-space.ads
Normal file
207
3-mid/physics/interface/source/physics-space.ads
Normal file
@@ -0,0 +1,207 @@
|
||||
with
|
||||
physics.Model,
|
||||
physics.Shape,
|
||||
physics.Object,
|
||||
physics.Joint.DoF6,
|
||||
physics.Joint.hinge,
|
||||
physics.Joint.cone_twist,
|
||||
physics.Joint.slider,
|
||||
physics.Joint.ball;
|
||||
|
||||
package physics.Space
|
||||
--
|
||||
-- Models a static/dynamic physics space.
|
||||
--
|
||||
is
|
||||
type Item is limited interface;
|
||||
type View is access all Item'Class;
|
||||
|
||||
|
||||
---------
|
||||
--- Forge
|
||||
--
|
||||
|
||||
procedure free (Self : in out View);
|
||||
procedure destruct (Self : in out Item) is abstract;
|
||||
|
||||
|
||||
--------------
|
||||
--- Attributes
|
||||
--
|
||||
|
||||
procedure add (Self : in out Item; the_Object : in Object.view) is abstract;
|
||||
procedure rid (Self : in out Item; the_Object : in Object.view) is abstract;
|
||||
procedure evolve (Self : in out Item; By : in Duration) is abstract;
|
||||
|
||||
|
||||
type Real_view is access all Real;
|
||||
|
||||
|
||||
--- Contacts
|
||||
--
|
||||
|
||||
type a_Contact is
|
||||
record
|
||||
Site : Vector_3;
|
||||
end record;
|
||||
|
||||
type Contacts is array (Positive range 1 .. 4) of a_Contact;
|
||||
|
||||
|
||||
--- Manifolds
|
||||
--
|
||||
|
||||
type a_Manifold is
|
||||
record
|
||||
Objects : Object.views (1 .. 2);
|
||||
Contact : a_Contact;
|
||||
end record;
|
||||
|
||||
function manifold_Count (Self : in Item) return Natural is abstract;
|
||||
function Manifold (Self : access Item; Index : in Positive) return a_Manifold is abstract;
|
||||
|
||||
|
||||
--- Ray Casting
|
||||
--
|
||||
|
||||
type ray_Collision is
|
||||
record
|
||||
near_Object : Object.view;
|
||||
hit_Fraction : Real;
|
||||
Normal_world : Vector_3;
|
||||
Site_world : Vector_3;
|
||||
end record;
|
||||
|
||||
function cast_Ray (Self : access Item; From, To : in Vector_3) return ray_Collision is abstract;
|
||||
|
||||
|
||||
--- Bounds
|
||||
--
|
||||
|
||||
procedure update_Bounds (Self : in out Item; of_Obect : in Object.view) is abstract;
|
||||
|
||||
|
||||
-----------
|
||||
--- Factory
|
||||
--
|
||||
|
||||
unsupported_Shape : exception;
|
||||
|
||||
|
||||
--- Physical Objects
|
||||
--
|
||||
|
||||
function new_Object (Self : access Item; of_Shape : in Shape.view;
|
||||
of_Mass : in Real;
|
||||
Friction : in Real;
|
||||
Restitution : in Real;
|
||||
at_Site : in Vector_3;
|
||||
is_Kinematic : in Boolean) return Object.view is abstract;
|
||||
|
||||
function object_Count (Self : in Item) return Natural is abstract;
|
||||
|
||||
|
||||
--- 3D
|
||||
--
|
||||
|
||||
-- Shapes
|
||||
--
|
||||
|
||||
function new_Shape (Self : access Item; from_Model : in Model.view) return Shape.view is abstract;
|
||||
|
||||
function new_box_Shape (Self : access Item; half_Extents : in Vector_3 := [0.5, 0.5, 0.5]) return Shape.view is abstract;
|
||||
function new_sphere_Shape (Self : access Item; Radius : in Real := 0.5) return Shape.view is abstract;
|
||||
function new_capsule_Shape (Self : access Item; Radius : in Real := 0.5;
|
||||
Height : in Real) return Shape.view is abstract;
|
||||
function new_cone_Shape (Self : access Item; Radius : in Real := 0.5;
|
||||
Height : in Real := 1.0) return Shape.view is abstract;
|
||||
function new_cylinder_Shape (Self : access Item; half_Extents : in Vector_3 := [0.5, 0.5, 0.5]) return Shape.view is abstract;
|
||||
function new_heightfield_Shape (Self : access Item; Heightfield : in out physics.Heightfield;
|
||||
Scale : in Vector_3) return Shape.view is abstract;
|
||||
function new_multisphere_Shape (Self : access Item; Sites : in Vector_3_array;
|
||||
Radii : in Vector) return Shape.view is abstract;
|
||||
function new_plane_Shape (Self : access Item; Normal : in Vector_3 := [0.0, 1.0, 0.0];
|
||||
Offset : in Real := 0.0) return Shape.view is abstract;
|
||||
function new_convex_hull_Shape (Self : access Item; Points : in Vector_3_array) return Shape.view is abstract;
|
||||
function new_mesh_Shape (Self : access Item; Points : access Geometry_3D.a_Model) return Shape.view is abstract;
|
||||
|
||||
|
||||
-- Joints
|
||||
--
|
||||
|
||||
function new_hinge_Joint (Self : access Item; Object_A,
|
||||
Object_B : in Object.view;
|
||||
Anchor_in_A,
|
||||
Anchor_in_B : in Vector_3;
|
||||
pivot_Axis : in Vector_3;
|
||||
low_Limit,
|
||||
high_Limit : in Real;
|
||||
collide_Connected : in Boolean) return Joint.hinge.view is abstract;
|
||||
|
||||
function new_hinge_Joint (Self : access Item; Object_A,
|
||||
Object_B : in Object.view;
|
||||
Frame_A,
|
||||
Frame_B : in Matrix_4x4;
|
||||
low_Limit,
|
||||
high_Limit : in Real;
|
||||
collide_Connected : in Boolean) return Joint.hinge.view is abstract;
|
||||
|
||||
function new_hinge_Joint (Self : access Item; Object_A : in Object.view;
|
||||
Frame_A : in Matrix_4x4) return Joint.hinge.view is abstract;
|
||||
|
||||
function new_DoF6_Joint (Self : access Item; Object_A,
|
||||
Object_B : in Object.view;
|
||||
Frame_A,
|
||||
Frame_B : in Matrix_4x4) return Joint.DoF6.view is abstract;
|
||||
|
||||
function new_ball_Joint (Self : access Item; Object_A,
|
||||
Object_B : in Object.view;
|
||||
Pivot_in_A,
|
||||
Pivot_in_B : in Vector_3) return Joint.ball.view is abstract;
|
||||
|
||||
function new_slider_Joint (Self : access Item; Object_A,
|
||||
Object_B : in Object.view;
|
||||
Frame_A,
|
||||
Frame_B : in Matrix_4x4) return Joint.slider.view is abstract;
|
||||
|
||||
function new_cone_twist_Joint (Self : access Item; Object_A,
|
||||
Object_B : in Object.view;
|
||||
Frame_A,
|
||||
Frame_B : in Matrix_4x4) return Joint.cone_twist.view is abstract;
|
||||
type joint_Cursor is interface;
|
||||
|
||||
procedure next (Cursor : in out joint_Cursor) is abstract;
|
||||
function has_Element (Cursor : in joint_Cursor) return Boolean is abstract;
|
||||
function Element (Cursor : in joint_Cursor) return Joint.view is abstract;
|
||||
|
||||
function first_Joint (Self : in Item) return joint_Cursor'Class is abstract;
|
||||
|
||||
|
||||
--- 2D
|
||||
--
|
||||
|
||||
--- Shapes
|
||||
--
|
||||
|
||||
type polygon_Vertices is array (Positive range <>) of aliased Vector_2;
|
||||
|
||||
function new_circle_Shape (Self : access Item; Radius : in Real := 0.5) return Shape.view is abstract;
|
||||
function new_polygon_Shape (Self : access Item; Vertices : in polygon_Vertices) return Shape.view is abstract;
|
||||
|
||||
|
||||
------------
|
||||
-- Dynamics
|
||||
--
|
||||
|
||||
function Gravity (Self : in Item) return Vector_3 is abstract;
|
||||
procedure Gravity_is (Self : in out Item; Now : in Vector_3) is abstract;
|
||||
|
||||
procedure add (Self : in out Item; the_Joint : in Joint.view) is abstract;
|
||||
procedure rid (Self : in out Item; the_Joint : in Joint.view) is abstract;
|
||||
|
||||
procedure set_Joint_local_Anchor
|
||||
(Self : in out Item; the_Joint : in Joint.view;
|
||||
is_Anchor_A : in Boolean;
|
||||
local_Anchor : in Vector_3) is abstract;
|
||||
|
||||
end physics.Space;
|
||||
Reference in New Issue
Block a user