Class TCastleBehavior
Unit
Declaration
type TCastleBehavior = class(TCastleComponent)
Description
Behaviors can be attached to TCastleTransform to perform specific logic, for example implement creature movement. This implements a simple component-system for TCastleTransform. Using behaviors allows to attach independent functionality like TCastleBillboard, TCastleSoundSource, creature AI and more. CGE provides implementation for some behaviors, and you can create your own too.
You implemement a descendant of TCastleBehavior
, typically overriding its Update method, and add it to TCastleTransform by TCastleTransform.AddBehavior. Inside TCastleBehavior
, access the TCastleTransform instances by Parent.
The API of TCastleBehavior
is deliberately a subset of the TCastleTransform API, for example both have Update method. Using TCastleBehavior
is just simpler and more efficient, as TCastleBehavior
doesn't have own transformation, children and it cannot render something. If this is too limiting, remember you can always implement more powerful behaviors by creating TCastleTransform descendants instead of TCastleBehavior
descendants, and accessing the TCastleTransform.Parent from a child.
Hierarchy
- TObject
- TPersistent
- TComponent
- TCastleComponent
- TCastleBehavior
Overview
Methods
procedure Update(const SecondsPassed: Single; var RemoveMe: TRemoveType); virtual; |
|
procedure BeforeRender( const CameraView: TViewVectors; const ParentParentWorldTransformation: TTransformation); virtual; |
|
procedure ParentChanged; virtual; deprecated 'Use ParentAfterAttach / ParentBeforeDetach or WorldAfterAttach / WorldBeforeDetach'; |
|
procedure ParentAfterAttach; virtual; |
|
procedure ParentBeforeDetach; virtual; |
|
procedure WorldAfterAttach; virtual; |
|
procedure WorldBeforeDetach; virtual; |
|
function CanAttachToParent(const NewParent: TCastleTransform; out ReasonWhyCannot: String): Boolean; virtual; |
|
procedure BeforeDestruction; override; |
|
function World: TCastleAbstractRootTransform; |
Properties
property Parent: TCastleTransform read FParent; |
|
property ListenWorldChange: Boolean
read FListenWorldChange write SetListenWorldChange; |
Description
Methods
procedure Update(const SecondsPassed: Single; var RemoveMe: TRemoveType); virtual; |
|
Continuously occuring event, for various tasks. Parameters
|
procedure BeforeRender( const CameraView: TViewVectors; const ParentParentWorldTransformation: TTransformation); virtual; |
|
Event called right before rendering the parent TCastleTransform. Override this if you have to adjust the parent transformation strictly before the rendering. Compared to adjusting the parent transformation in e.g. Update, adjusting the parent transformation here has advantages:
For example, adjusting the TCastleTransform done by the TCastleBillboard is done using this method. The transformation in this case is determined by the camera and parent's parent transformation. The transformation has to be applied without any delay (even a 1-frame delay would be visible, as artifacts caused by billboard not perfectly aligned with the camera would be visible – blending sort along camera direction in sort3D is not perfect if billboard doesn't exactly match camera direction). And the transformation with billboard may be present in multiple viewports and/or multiple times in the same viewport tree.
Parameters
|
procedure ParentChanged; virtual; deprecated 'Use ParentAfterAttach / ParentBeforeDetach or WorldAfterAttach / WorldBeforeDetach'; |
|
Warning: this symbol is deprecated: Use ParentAfterAttach / ParentBeforeDetach or WorldAfterAttach / WorldBeforeDetach Called after Parent changed, at the end of TCastleTransform.AddBehavior, TCastleTransform.RemoveBehavior. |
procedure ParentAfterAttach; virtual; |
|
Called after Parent changed, e.g. at the end of TCastleTransform.AddBehavior. |
procedure ParentBeforeDetach; virtual; |
|
Called before Parent changed, e.g. at the beginning of TCastleTransform.RemoveBehavior. This is also called at the destruction of behavior (more precisely from BeforeDestruction now). Even in this case, we guarantee that Parent is still valid during this call, and not in half-destroyed state. Before the actual destructor of TCastleBehavior we do BeforeParentDetach and BeforeWorldDetach and set Parent to |
procedure WorldAfterAttach; virtual; |
|
Called after Parent became part of World. Called only if ListenWorldChange is |
procedure WorldBeforeDetach; virtual; |
|
Called before Parent stops being part of World. Called only if ListenWorldChange is This is also called at the destruction of behavior (more precisely from BeforeDestruction now). Even in this case, we guarantee that Parent is still valid during this call, and not in half-destroyed state. Before the actual destructor of TCastleBehavior we do BeforeParentDetach and BeforeWorldDetach and set Parent to |
function CanAttachToParent(const NewParent: TCastleTransform; out ReasonWhyCannot: String): Boolean; virtual; |
|
Check can this behavior be added to NewParent. When this returns function TCastleBillboard.CanAttachToParent(const NewParent: TCastleTransform; out ReasonWhyCannot: String): Boolean; begin Result := inherited; if not Result then Exit; if NewParent.FindBehavior(TCastleBillboard) <> nil then begin ReasonWhyCannot := 'Only one TCastleBillboard behavior can be added to a given TCastleTransform'; Result := false; end; end; |
procedure BeforeDestruction; override; |
|
This item has no description. |
function World: TCastleAbstractRootTransform; |
|
Reference to the root transformation (typically matching the TCastleViewport.Items value) corresponding to the parent of this behavior. May be |
Properties
property Parent: TCastleTransform read FParent; |
|
Parent TCastleTransform of this behavior. Change it by doing TCastleTransform.AddBehavior, TCastleTransform.RemoveBehavior.
|
property ListenWorldChange: Boolean
read FListenWorldChange write SetListenWorldChange; |
|
Set this to |
Generated by PasDoc 0.16.0-snapshot.