124 lines
2.4 KiB
Ada
124 lines
2.4 KiB
Ada
with
|
|
gel.Sprite,
|
|
gel.World,
|
|
ada.unchecked_Deallocation;
|
|
|
|
package body gel.Joint
|
|
is
|
|
|
|
function to_GEL (the_Joint : standard.physics.Joint.view) return gel.Joint.view
|
|
is
|
|
begin
|
|
return gel.Joint.view (the_Joint.user_Data);
|
|
end to_GEL;
|
|
|
|
|
|
---------
|
|
--- Forge
|
|
--
|
|
|
|
procedure define (Self : access Item; Sprite_A, Sprite_B : access gel.Sprite.item'class)
|
|
is
|
|
begin
|
|
Self.Sprite_A := Sprite_A;
|
|
Self.Sprite_B := Sprite_B;
|
|
end define;
|
|
|
|
|
|
|
|
procedure free (Self : in out View)
|
|
is
|
|
procedure deallocate is new ada.unchecked_Deallocation (Joint.item'Class, Joint.view);
|
|
begin
|
|
if Self /= null then
|
|
Self.destroy;
|
|
end if;
|
|
|
|
deallocate (Self);
|
|
end free;
|
|
|
|
|
|
--------------
|
|
--- Attributes
|
|
--
|
|
|
|
function Sprite_A (Self : in Item'Class) return access gel.Sprite.item'class
|
|
is
|
|
begin
|
|
return Self.Sprite_A;
|
|
end Sprite_A;
|
|
|
|
|
|
|
|
function Sprite_B (Self : in Item'Class) return access gel.Sprite.item'class
|
|
is
|
|
begin
|
|
return Self.Sprite_B;
|
|
end Sprite_B;
|
|
|
|
|
|
----------
|
|
--- Hinges
|
|
--
|
|
|
|
function local_Anchor_on_A (Self : in Item) return Vector_3
|
|
is
|
|
begin
|
|
return Self.local_Anchor_on_A;
|
|
end local_Anchor_on_A;
|
|
|
|
|
|
|
|
function local_Anchor_on_B (Self : in Item) return Vector_3
|
|
is
|
|
begin
|
|
return Self.local_Anchor_on_B;
|
|
end local_Anchor_on_B;
|
|
|
|
|
|
|
|
procedure local_Anchor_on_A_is (Self : out Item; Now : in Vector_3)
|
|
is
|
|
begin
|
|
Self.local_Anchor_on_A := Now;
|
|
|
|
if Self.Sprite_A.World /= null
|
|
then
|
|
Self.Sprite_A.World.set_local_Anchor_on_A (for_Joint => Self'unchecked_Access,
|
|
To => Now);
|
|
end if;
|
|
end local_Anchor_on_A_is;
|
|
|
|
|
|
|
|
procedure local_Anchor_on_B_is (Self : out Item; Now : in Vector_3)
|
|
is
|
|
begin
|
|
Self.local_Anchor_on_B := Now;
|
|
|
|
if Self.Sprite_B.World /= null
|
|
then
|
|
Self.Sprite_B.World.set_local_Anchor_on_B (for_Joint => Self'unchecked_Access,
|
|
To => Now);
|
|
end if;
|
|
end local_Anchor_on_B_is;
|
|
|
|
|
|
|
|
function reaction_Force (Self : in Item'Class) return Vector_3
|
|
is
|
|
begin
|
|
return Self.Physics.reaction_Force;
|
|
end reaction_Force;
|
|
|
|
|
|
|
|
function reaction_Torque (Self : in Item'Class) return Real
|
|
is
|
|
begin
|
|
return Self.Physics.reaction_Torque;
|
|
end reaction_Torque;
|
|
|
|
|
|
end gel.Joint;
|