Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
physics [2020/05/24 13:27] – [Callbacks] adminphysics [2020/05/24 13:30] – [Example] admin
Line 131: Line 131:
 </file> </file>
 (available since v0.8.2.1600+) (available since v0.8.2.1600+)
-===== Example ===== 
-For a working physics system you need a TGorillaPhysicsSystem component on your form. 
- 
-<file pascal Form1.pas> 
-type 
-  TForm1 = class(TForm) 
-    GorillaViewport1: TGorillaViewport; 
-    Light1: TLight; 
-    Dummy1: TDummy; 
-    Camera1: TCamera; 
-    GorillaPhysicsSystem1: TGorillaPhysicsSystem; 
-    Plane1: TPlane; 
-    GorillaCube1: TGorillaCube; 
-    PhysicsTimer1: TTimer; 
-    GorillaSphere1: TGorillaSphere; 
-    LightMaterialSource1: TLightMaterialSource; 
-    LightMaterialSource2: TLightMaterialSource; 
-    procedure FormCreate(Sender: TObject); 
-    procedure PhysicsTimer1Timer(Sender: TObject); 
-  private 
-    { Private-Deklarationen } 
-  public 
-    { Public-Deklarationen } 
-  end; 
- 
-var 
-  Form1: TForm1; 
- 
-implementation 
- 
-{$R *.fmx} 
- 
-uses 
-  Gorilla.Physics, Gorilla.Physics.Q3.Body; 
-   
-procedure TForm1.FormCreate(Sender: TObject); 
-var LPrefab : TGorillaColliderSettings; 
-begin 
-  // the plane should be a static body, otherwise it will fall in to nothingness 
-  LPrefab := TGorillaColliderSettings.Create(TQ3BodyType.eStaticBody); 
-  GorillaPhysicsSystem1.AddBoxCollider(Plane1, LPrefab); 
- 
-  // the cube is a dynamic / moveable body which collides with the plane and sphere 
-  LPrefab := TGorillaColliderSettings.Create(TQ3BodyType.eDynamicBody); 
-  GorillaPhysicsSystem1.AddBoxCollider(GorillaCube1, LPrefab); 
- 
-  // the sphere is a dynamic / moveable body which collides with the plane and cube 
-  LPrefab := TGorillaColliderSettings.Create(TQ3BodyType.eDynamicBody); 
-  GorillaPhysicsSystem1.AddSphereCollider(GorillaSphere1, LPrefab); 
- 
-  // we activate the physics system 
-  GorillaPhysicsSystem1.Active := true; 
-   
-  // and we need to activate the physics timer for constant updates 
-  PhysicsTimer1.Enabled := true; 
-end; 
- 
-procedure TForm1.PhysicsTimer1Timer(Sender: TObject); 
-var LDelta : Single; 
-begin 
-  // get the delta time => time since the last step() was called 
-  LDelta := GorillaPhysicsSystem1.GetDeltaTime(); 
-  GorillaPhysicsSystem1.Step(LDelta); 
-  GorillaViewport1.Invalidate(); 
-end; 
-</file> 
  
 ===== Callbacks ===== ===== Callbacks =====
Line 237: Line 171:
   * RemoteBodyForce   * RemoteBodyForce
  
-By this methods you're able to set a position or rotation explicitly or to apply a force / impulse on a specific element.+<file pascal> 
 +// move cube upwards by impulse 
 +GorillaPhysicsSystem1.RemoteBodyImpulse(GorillaCube1, Point3D(0, -1, 0)); 
 +</file> 
 + 
 +By the methods above you're able to set a position and/or rotation explicitlyor to apply a force / impulse on a specific element.
  
 **__CAUTION:__ By this methods you can influence physical mechanics so heavily, that overstep bounds / limits, which may lead to unexpected behaviour.** **__CAUTION:__ By this methods you can influence physical mechanics so heavily, that overstep bounds / limits, which may lead to unexpected behaviour.**
  
 Next step: [[fmodaudio|FMOD Audio]] Next step: [[fmodaudio|FMOD Audio]]