Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
1.0.0:physics [2023/03/16 08:46] – [Colliders] admin | 1.0.0:physics [2023/03/16 09:00] – [Override Collider-Registration] admin | ||
---|---|---|---|
Line 213: | Line 213: | ||
* RemoteBodyImpulse | * RemoteBodyImpulse | ||
* RemoteBodyForce | * RemoteBodyForce | ||
+ | * RemoteBodyVelocity | ||
+ | * RemoteBodyAngularVelocity | ||
<file pascal> | <file pascal> | ||
Line 219: | Line 221: | ||
</ | </ | ||
- | By the methods above you're able to set a position and/or rotation explicitly, or to apply a force / impulse on a specific element. | + | By the methods above you're able to set a position and/or rotation explicitly, |
**__CAUTION: | **__CAUTION: | ||
+ | **__WARNING: | ||
===== Example ===== | ===== Example ===== | ||
+ | |||
+ | ==== Runtime Integration ==== | ||
+ | |||
For a working physics system you need a TGorillaPhysicsSystem component on your form. | For a working physics system you need a TGorillaPhysicsSystem component on your form. | ||
Line 293: | Line 299: | ||
end; | end; | ||
</ | </ | ||
+ | |||
+ | ==== Override Collider-Registration ==== | ||
+ | |||
+ | Default collider registration methods only support TControl3D objects. | ||
+ | But it is sometimes needed to register other types of objects for colliders, like a virtual instance of a mesh. | ||
+ | |||
+ | Writing a helper class gives you access to the protected internal registration methods which are unspecified by type: | ||
+ | ^Method ^ | ||
+ | |procedure DoAddBoxCollider(const AData : Pointer; const AType : PTypeInfo; const APrefab : TGorillaColliderSettings; | ||
+ | |procedure DoAddSphereCollider(const AData : Pointer; const AType : PTypeInfo; const APrefab : TGorillaColliderSettings; | ||
+ | |procedure DoAddCapsuleCollider(const AData : Pointer; const AType : PTypeInfo; const APrefab : TGorillaColliderSettings; | ||
+ | |procedure DoAddTerrainCollider(const AData : Pointer; const AType : PTypeInfo; const APrefab : TGorillaColliderSettings; | ||
+ | |procedure DoAddMeshCollider(const AData : Pointer; const AType : PTypeInfo; const APrefab : TGorillaColliderSettings; | ||
+ | |||
+ | <file pascal> | ||
+ | type | ||
+ | /// < | ||
+ | /// Create a helper class to access protected methods for adding colliders. | ||
+ | /// Default methods only handle TControl3D instances, but we | ||
+ | /// want to add colliders dynamically for our virtual instances (TGorillaMeshInstance). | ||
+ | /// </ | ||
+ | TGorillaPhysicsHelper = class helper for TGorillaPhysicsSystem | ||
+ | public | ||
+ | procedure AddInstanceCollider(const ATemplate : TMeshDef; | ||
+ | const AData: TGorillaMeshInstance; | ||
+ | const AAbsoluteMatrix: | ||
+ | out ABody: TQ3Body); | ||
+ | end; | ||
+ | |||
+ | { TGorillaPhysicsHelper } | ||
+ | |||
+ | procedure TGorillaPhysicsHelper.AddInstanceCollider(const ATemplate : TMeshDef; | ||
+ | const AData: TGorillaMeshInstance; | ||
+ | const AAbsoluteMatrix: | ||
+ | out ABody: TQ3Body); | ||
+ | var LTransform : TMatrix3D; | ||
+ | begin | ||
+ | // Get the translation from absolute instance matrix | ||
+ | LTransform := TMatrix3D.CreateTranslation( | ||
+ | TTransformationMatrixUtils.GetTranslationFromTransformationMatrix(AAbsoluteMatrix) | ||
+ | ); | ||
+ | |||
+ | // Add a sphere collider for each instance with the maximum size of a side as radius | ||
+ | // or use another internal registration method, like DoAddBoxCollider, | ||
+ | DoAddSphereCollider(AData, | ||
+ | LTransform, Max(ASize.X, | ||
+ | end; | ||
+ | </ | ||
+ | |||
+ | When you have declared this kind of helper class in your unit, the TGorillaPhysicsSystem component will then show you a new method to be callable " | ||
Next step: [[fmodaudio|FMOD Audio]] | Next step: [[fmodaudio|FMOD Audio]] |