Class TCastleWalkNavigation

Unit

Declaration

type TCastleWalkNavigation = class(TCastleMouseLookNavigation)

Description

Navigation by walking or flying (classic first-person shooter navigation) in a 3D scene. User can rotate and move camera using various keys, like arrows or AWSD. Mouse dragging and mouse look are also supported.

Source: transform/castlecameras.pas (line 722).

Hierarchy

Show Additional Members:

Overview

Constants

Public DefaultWidth = 100.0;
Public DefaultHeight = 100.0;
Public DefaultRadius = 0.25;
Public DefaultPreferredHeight = 1.6;
Public DefaultInput = [niNormal, niMouseDragging, ni3dMouse, niGesture];
Public DefaultHeadBobbingTime = 0.5;
Public DefaultHeadBobbing = 0.02;
Public DefaultCrouchHeight = 0.5;
Public DefaultMouseLookHorizontalSensitivity = Pi * 0.1 / 180;
Public DefaultMouseLookVerticalSensitivity = Pi * 0.1 / 180;
Public DefaultFallSpeedStart = 0.5;
Public DefaultGrowSpeed = 1.0;
Public DefaultJumpMaxHeight = 1.0;
Public DefaultMinAngleFromGravityUp = Pi * 10 / 180;
Public DefaultRotationHorizontalSpeed = Pi * 150 / 180;
Public DefaultRotationVerticalSpeed = Pi * 100 / 180;
Public DefaultFallSpeedIncrease = 13/12;
Public DefaultJumpHorizontalSpeedMultiply = 2.0;
Public DefaultJumpTime = 1.0 / 8.0;
Public DefaultMouseDraggingHorizontalRotationSpeed = Pi * 0.1 / 180;
Public DefaultMouseDraggingVerticalRotationSpeed = Pi * 0.1 / 180;
Public DefaultMouseDraggingMoveSpeed = 0.01;
Public DefaultMoveSpeedMin = 0.01;
Public DefaultMoveSpeedMax = 10000.0;
Public DefaultRunMultiplier = 2.0;

Fields

Protected MouseDraggingStarted: Integer;
Protected MouseDraggingStart: TVector2;

Methods

Protected function GetInternalText: String; virtual;
Protected procedure SetInternalText(const Value: String); virtual;
Protected procedure SetName(const Value: TComponentName); override;
Protected procedure TranslateProperties(const TranslatePropertyEvent: TTranslatePropertyEvent); virtual;
Public procedure SetTransient;
Public procedure AddNonVisualComponent(const NonVisualComponent: TComponent);
Public procedure InsertNonVisualComponent(const Index: Integer; const NonVisualComponent: TComponent);
Public procedure RemoveNonVisualComponent(const NonVisualComponent: TComponent);
Public function NonVisualComponentsIndexOf(const NonVisualComponent: TComponent): Integer;
Public function NonVisualComponentsCount: Integer;
Public function NonVisualComponentsEnumerate: TNonVisualComponentsEnumerator;
Public function ValueIsStreamed: Boolean; virtual;
Protected procedure Loaded; override;
Protected function ContainerWidth: Cardinal; virtual; deprecated 'arrange UI using anchors, FullSize and friends; if you really need container size, use "Container.UnscaledWidth" or "Container.PixelsWidth" after checking "Container <> nil"';
Protected function ContainerHeight: Cardinal; virtual; deprecated 'arrange UI using anchors, FullSize and friends; if you really need container size, use "Container.UnscaledHeight" or "Container.PixelsHeight" after checking "Container <> nil"';
Protected function ContainerRect: TRectangle; virtual; deprecated 'arrange UI using anchors, FullSize and friends; if you really need container size, use "Container.UnscaledRect" or "Container.PixelsRect" after checking "Container <> nil"';
Protected function ContainerSizeKnown: boolean; virtual; deprecated 'arrange UI using anchors, FullSize and friends; if you really need container size, use "Container.UnscaledWidth/Height" or "Container.PixelsWidth/Height" after checking "Container <> nil"';
Protected procedure DoCursorChange; virtual; deprecated 'better override VisibleChange and watch for chCursor in Changes';
Protected procedure DefineProperties(Filer: TFiler); override;
Protected procedure UIScaleChanged; virtual;
Protected procedure PreferredSize(var PreferredWidth, PreferredHeight: Single); virtual;
Protected procedure BeforeSizing; virtual;
Protected procedure DoInternalMouseEnter; virtual;
Protected procedure DoInternalMouseLeave; virtual;
Protected function Theme: TCastleTheme;
Public procedure CustomSerialization(const SerializationProcess: TSerializationProcess); override;
Public procedure DesignerInfo(const SList: TStrings); override;
Public procedure DesignerWarnings(const SList: TStrings); override;
Public function GetEnumerator: TEnumerator;
Public procedure InternalSetContainer(const Value: TCastleContainer); virtual;
Public function PreviewPress(const Event: TInputPressRelease): boolean; virtual;
Public function PreviewRelease(const Event: TInputPressRelease): boolean; virtual;
Public procedure VisibleChange(const Changes: TCastleUserInterfaceChanges; const ChangeInitiatedByChildren: boolean = false); overload; virtual;
Public procedure Resize; virtual;
Public function ControlsCount: Integer;
Public procedure InsertFront(const NewItem: TCastleUserInterface); overload;
Public procedure InsertFrontIfNotExists(const NewItem: TCastleUserInterface);
Public procedure InsertFront(const NewItems: TCastleUserInterfaceList); overload;
Public procedure InsertBack(const NewItem: TCastleUserInterface); overload;
Public procedure InsertBackIfNotExists(const NewItem: TCastleUserInterface);
Public procedure InsertBack(const NewItems: TCastleUserInterfaceList); overload;
Public procedure InsertControl(const Index: Integer; const NewItem: TCastleUserInterface);
Public procedure RemoveControl(const Item: TCastleUserInterface);
Public function IndexOfControl(const Item: TCastleUserInterface): Integer;
Public procedure ClearControls;
Public procedure MoveToFront;
Public function CapturesEventsAtPosition(const Position: TVector2): boolean; virtual;
Public procedure BeforeRender; virtual;
Public procedure Render; virtual;
Public procedure RenderOverChildren; virtual;
Public function TooltipExists: Boolean; virtual; deprecated 'use TooltipControl to customize tooltip look';
Public procedure TooltipRender(const TooltipPosition: TVector2); virtual; deprecated 'use TooltipControl to customize tooltip look';
Public procedure GLContextOpen; virtual;
Public procedure GLContextClose; virtual;
Public procedure SetFocused(const Value: boolean); virtual;
Public function EffectiveRect: TFloatRectangle;
Public function EffectiveWidth: Single;
Public function EffectiveHeight: Single;
Public function EffectiveWidthForChildren: Single;
Public function EffectiveHeightForChildren: Single;
Public function CalculatedWidth: Cardinal; deprecated 'use EffectiveWidth';
Public function CalculatedHeight: Cardinal; deprecated 'use EffectiveHeight';
Public function CalculatedRect: TRectangle; deprecated 'use EffectiveRect';
Public function RenderRect: TFloatRectangle;
Public function RenderRectWithBorder: TFloatRectangle;
Public function ScreenRect: TRectangle; deprecated 'use RenderRect';
Public function ContainerToLocalPosition(ContainerPosition: TVector2; const ContainerPositionScaled: Boolean = true): TVector2;
Public function LocalToContainerPosition(const LocalPosition: TVector2; const ContainerPositionScaled: Boolean = true): TVector2;
Public function ParentRect: TFloatRectangle;
Public procedure Anchor(const AHorizontalAnchor: THorizontalPosition; const TranslationX: Single = 0); overload;
Public procedure Anchor( const AHorizontalAnchorSelf, AHorizontalAnchorParent: THorizontalPosition; const TranslationX: Single = 0); overload;
Public procedure Anchor(const AVerticalAnchor: TVerticalPosition; const TranslationY: Single = 0); overload;
Public procedure Anchor( const AVerticalAnchorSelf, AVerticalAnchorParent: TVerticalPosition; const TranslationY: Single = 0); overload;
Public procedure AlignHorizontal( const ControlPosition: TPositionRelative = prMiddle; const ContainerPosition: TPositionRelative = prMiddle; const X: Single = 0); deprecated 'use Anchor';
Public procedure Align( const ControlPosition: THorizontalPosition; const ContainerPosition: THorizontalPosition; const X: Single = 0); overload; deprecated 'use Anchor';
Public procedure AlignVertical( const ControlPosition: TPositionRelative = prMiddle; const ContainerPosition: TPositionRelative = prMiddle; const Y: Single = 0); deprecated 'use Anchor';
Public procedure Align( const ControlPosition: TVerticalPosition; const ContainerPosition: TVerticalPosition; const Y: Single = 0); overload; deprecated 'use Anchor';
Public procedure Center; deprecated 'use Anchor(hpMiddle); Anchor(vpMiddle); to reliably center the control';
Public function UIScale: Single; virtual;
Public procedure EditorAllowResize(out ResizeWidth, ResizeHeight: Boolean; out Reason: String); virtual;
Public function EffectiveFullSize: Boolean;
Protected function GoodModelBox: TBox3D;
Protected function InternalViewport: TCastleUserInterface;
Protected function Valid: Boolean;
Protected function UsingInput: TNavigationInputs;
Protected procedure Height(const APosition: TVector3; out AIsAbove: Boolean; out AnAboveHeight: Single; out AnAboveGround: PTriangle);
Protected function MoveTo(const LocalProposedNewPos: TVector3; const BecauseOfGravity, CheckClimbHeight: boolean): boolean;
Protected function Move(const MoveVector: TVector3; const BecauseOfGravity, CheckClimbHeight: boolean): boolean;
Protected function Zoom(const Factor: Single): Boolean; virtual;
Public procedure Assign(Source: TPersistent); override;
Public function Camera: TCastleCamera;
Public function Release(const Event: TInputPressRelease): boolean; override;
Public procedure AnimateTo(const OtherCamera: TCastleCamera; const Time: TFloatTime); overload; deprecated 'use Viewport.Camera.AnimateTo';
Public procedure AnimateTo(const OtherNavigation: TCastleNavigation; const Time: TFloatTime); overload; deprecated 'use AnimateTo with TCastleCamera, not TCastleNavigation';
Public procedure AnimateTo(const APos, ADir, AUp: TVector3; const Time: TFloatTime); overload; deprecated 'use Viewport.Camera.AnimateTo';
Public function Animation: boolean; deprecated 'use Viewport.Camera.Animation';
Public function InternalUsingMouseLook: Boolean;
Protected function ReallyEnableMouseDragging: boolean; override;
Protected procedure ProcessMouseLookDelta(const Delta: TVector2); override;
Protected function MoveAllowed( const OldPos: TVector3; ProposedNewPos: TVector3; out NewPos: TVector3; const BecauseOfGravity, CheckClimbHeight: Boolean): Boolean; override;
Public constructor Create(AOwner: TComponent); override;
Public destructor Destroy; override;
Public function PropertySections(const PropertyName: String): TPropertySections; override;
Public procedure Update(const SecondsPassed: Single; var HandleInput: boolean); override;
Public function AllowSuspendForInput: boolean; override;
Public function Press(const Event: TInputPressRelease): boolean; override;
Public function SensorTranslation(const X, Y, Z, Length: Double; const SecondsPassed: Single): boolean; override;
Public function SensorRotation(const X, Y, Z, Angle: Double; const SecondsPassed: Single): boolean; override;
Public procedure Init(const AInitialPosition, AInitialDirection, AInitialUp: TVector3; const AGravityUp: TVector3; const APreferredHeight: Single; const ARadius: Single); overload; deprecated 'use Viewport.Camera.SetWorldView, and set GravityUp, PreferredHeight, Radius and call CorrectPreferredHeight manually';
Public procedure Init(const box: TBox3D; const ARadius: Single); overload; deprecated 'use Viewport.Camera.SetWorldView, and set GravityUp, PreferredHeight, Radius and call CorrectPreferredHeight manually';
Public function DirectionInGravityPlane: TVector3; deprecated 'avoid using it, as it inherently has difficult cases: it is in TCastleCamera local coordinate space, it cannot be correct when Direction is parallel to gravity';
Public function Motion(const Event: TInputMotion): boolean; override;
Public procedure CancelFalling;
Public function MaxJumpDistance: Single;
Public function RealPreferredHeight: Single;
Public procedure FallOnTheGround;
Public procedure UpPrefer(const AUp: TVector3); deprecated 'use Viewport.Camera.UpPrefer';
Public procedure CorrectPreferredHeight;
Public procedure UseGameController(const ControllerIndex: Integer = -1);

Properties

Public property NonVisualComponents [const Index: Integer]: TComponent read GetNonVisualComponents;
Public property IsLoading: Boolean read FIsLoading;
Public property OnVisibleChange: TCastleUserInterfaceChangeEvent read FOnVisibleChange write FOnVisibleChange;
Public property Container: TCastleContainer read FContainer;
Public property OnCursorChange: TNotifyEvent read FOnCursorChange write FOnCursorChange; deprecated 'use OnVisibleChange (or override VisibleChange) and watch for Changes that include chCursor';
Public property ExclusiveEvents: boolean read FExclusiveEvents write FExclusiveEvents default true; deprecated 'do not use this; supporting this property was complicated and had no real benefit; everything now works as if ExclusiveEvents=true, always';
Public property Controls [const Index: Integer]: TCastleUserInterface read GetControls write SetControls;
Public property GetExists: Boolean read FExists; deprecated 'use Exists';
Public property GLInitialized: boolean read FGLInitialized default false;
Public property Focused: boolean read FFocused write SetFocused;
Public property Parent: TCastleUserInterface read FParent ;
Public property FloatWidth: Single read FWidth write SetWidth stored false; deprecated 'use Width';
Public property FloatHeight: Single read FHeight write SetHeight stored false; deprecated 'use Height';
Public property AnchorDelta: TVector2 read FTranslation write SetTranslation; deprecated 'use Translation';
Public property Translation: TVector2 read FTranslation write SetTranslation;
Public property KeepInFront: boolean read FKeepInFront write FKeepInFront default false;
Public property BorderColor: TCastleColor read FBorderColor write SetBorderColor;
Public property HasHorizontalAnchor: boolean read FHasHorizontalAnchor write FHasHorizontalAnchor stored false; deprecated 'this property does not do anything anymore, anchors are always active';
Public property HasVerticalAnchor: boolean read FHasVerticalAnchor write FHasVerticalAnchor stored false; deprecated 'this property does not do anything anymore, anchors are always active';
Public property HorizontalAnchorDelta: Single read GetHorizontalAnchorDelta write SetHorizontalAnchorDelta default 0; deprecated 'use Translation.X';
Public property VerticalAnchorDelta: Single read GetVerticalAnchorDelta write SetVerticalAnchorDelta default 0; deprecated 'use Translation.Y';
Public property Visible: Boolean read FVisible;
Public property EnableUIScaling: boolean read FEnableUIScaling write SetEnableUIScaling default true;
Public property CapturesEvents: boolean read FCapturesEvents write FCapturesEvents default true;
Public property OnInternalMouseEnter: TUiNotifyEvent read FOnInternalMouseEnter write FOnInternalMouseEnter;
Public property OnInternalMouseLeave: TUiNotifyEvent read FOnInternalMouseLeave write FOnInternalMouseLeave;
Published property Cursor: TMouseCursor read FCursor write SetCursor default mcDefault;
Published property OnUpdate: TUiUpdateEvent read FOnUpdate write FOnUpdate;
Published property OnPress: TUiPressReleaseEvent read FOnPress write FOnPress;
Published property OnRelease: TUiPressReleaseEvent read FOnRelease write FOnRelease;
Published property OnMotion: TUiMotionEvent read FOnMotion write FOnMotion;
Published property OnRender: TUiNotifyEvent read FOnRender write FOnRender;
Published property Exists: boolean read FExists write SetExists default true;
Published property Left: Single read FLeft write SetLeft stored false default 0; deprecated 'use Translation.X';
Published property Bottom: Single read FBottom write SetBottom default 0; deprecated 'use Translation.Y';
Published property Width: Single read FWidth write SetWidth default DefaultWidth;
Published property Height: Single read FHeight write SetHeight default DefaultHeight;
Published property WidthFraction: Single read FWidthFraction write SetWidthFraction default 0.0;
Published property HeightFraction: Single read FHeightFraction write SetHeightFraction default 0.0;
Published property AutoSizeToChildren: Boolean read FAutoSizeToChildren write SetAutoSizeToChildren default false;
Published property AutoSizeToChildrenPaddingRight: Single read FAutoSizeToChildrenPaddingRight write SetAutoSizeToChildrenPaddingRight default 0;
Published property AutoSizeToChildrenPaddingTop: Single read FAutoSizeToChildrenPaddingTop write SetAutoSizeToChildrenPaddingTop default 0;
Published property HorizontalAnchorSelf: THorizontalPosition read FHorizontalAnchorSelf write SetHorizontalAnchorSelf default hpLeft;
Published property HorizontalAnchorParent: THorizontalPosition read FHorizontalAnchorParent write SetHorizontalAnchorParent default hpLeft;
Published property VerticalAnchorSelf: TVerticalPosition read FVerticalAnchorSelf write SetVerticalAnchorSelf default vpBottom;
Published property VerticalAnchorParent: TVerticalPosition read FVerticalAnchorParent write SetVerticalAnchorParent default vpBottom;
Published property Culling: Boolean read FCulling write SetCulling default false;
Published property ClipChildren: Boolean read FClipChildren write SetClipChildren default false;
Published property Border: TBorder read FBorder;
Published property CustomTheme: TCastleTheme read FCustomTheme write SetCustomTheme;
Published property TooltipControl: TCastleUserInterface read FTooltipControl write SetTooltipControl;
Published property BorderColorPersistent: TCastleColorPersistent read FBorderColorPersistent ;
Published property TranslationPersistent: TCastleVector2Persistent read FTranslationPersistent ;
Public property OnMoveAllowed: TMoveAllowedFunc read FOnMoveAllowed write FOnMoveAllowed;
Public property OnFall: TFallNotifyFunc read FOnFall write FOnFall;
Public property IgnoreAllInputs: boolean read GetIgnoreAllInputs write SetIgnoreAllInputs default false; deprecated;
Public property ModelBox: TBox3D read FModelBox write FModelBox;
Public property Input: TNavigationInputs read FInput write FInput default DefaultInput;
Public property Input_ZoomIn: TInputShortcut read FInput_ZoomIn;
Public property Input_ZoomOut: TInputShortcut read FInput_ZoomOut;
Published property FullSize default true;
Published property EditorSelectOnHover default false;
Published property ZoomEnabled: Boolean read FZoomEnabled write FZoomEnabled default false;
Published property CheckCollisions: Boolean read FCheckCollisions write FCheckCollisions default true;
Public property PreferGravityUpForRotations: boolean read FPreferGravityUpForRotations write FPreferGravityUpForRotations default true;
Public property PreferGravityUpForMoving: boolean read FPreferGravityUpForMoving write FPreferGravityUpForMoving default true;
Public property MinAngleFromGravityUp: Single read FMinAngleFromGravityUp write FMinAngleFromGravityUp default DefaultMinAngleFromGravityUp;
Public property FallSpeedStart: Single read FFallSpeedStart write FFallSpeedStart default DefaultFallSpeedStart;
Public property FallSpeedIncrease: Single read FFallSpeedIncrease write FFallSpeedIncrease default DefaultFallSpeedIncrease;
Public property Falling: boolean read FFalling write FFalling;
Public property FallingEffect: boolean read FFallingEffect write FFallingEffect default true;
Public property IsJumping: boolean read FIsJumping;
Public property IsCrouching: boolean read FIsCrouching;
Public property FallingOnTheGround: boolean read FFallingOnTheGround;
Public property IsOnTheGround: boolean read FIsOnTheGround;
Public property IsWalkingOnTheGround: boolean read FIsWalkingOnTheGround;
Public property IsAbove: boolean read FIsAbove;
Public property AboveHeight: Single read FAboveHeight;
Public property AboveGround: PTriangle read FAboveGround write FAboveGround;
Public property Input_Forward: TInputShortcut read FInput_Forward;
Public property Input_Backward: TInputShortcut read FInput_Backward;
Public property Input_LeftRotate: TInputShortcut read FInput_LeftRotate;
Public property Input_RightRotate: TInputShortcut read FInput_RightRotate;
Public property Input_LeftRot: TInputShortcut read FInput_LeftRotate; deprecated 'use Input_LeftRotate';
Public property Input_RightRot: TInputShortcut read FInput_RightRotate; deprecated 'use Input_RightRotate';
Public property Input_LeftStrafe: TInputShortcut read FInput_LeftStrafe;
Public property Input_RightStrafe: TInputShortcut read FInput_RightStrafe;
Public property Input_UpRotate: TInputShortcut read FInput_UpRotate;
Public property Input_DownRotate: TInputShortcut read FInput_DownRotate;
Public property Input_IncreasePreferredHeight: TInputShortcut read FInput_IncreasePreferredHeight;
Public property Input_DecreasePreferredHeight: TInputShortcut read FInput_DecreasePreferredHeight;
Public property Input_GravityUp: TInputShortcut read FInput_GravityUp;
Public property Input_Run: TInputShortcut read FInput_Run;
Public property Input_MoveSpeedInc: TInputShortcut read FInput_MoveSpeedInc;
Public property Input_MoveSpeedDec: TInputShortcut read FInput_MoveSpeedDec;
Public property Input_Jump: TInputShortcut read FInput_Jump;
Public property Input_Crouch: TInputShortcut read FInput_Crouch;
Public property MoveForward: boolean read FMoveForward write FMoveForward;
Public property MoveBackward: boolean read FMoveBackward write FMoveBackward;
Public property RotationHorizontalPivot: Single read FRotationHorizontalPivot write FRotationHorizontalPivot default 0; deprecated 'use TCastleThirdPersonNavigation for real 3rd-person navigation';
Published property MouseLook;
Published property MouseLookHorizontalSensitivity;
Published property MouseLookVerticalSensitivity;
Published property InvertVerticalMouseLook;
Published property Radius;
Published property RotationHorizontalSpeed: Single read FRotationHorizontalSpeed write FRotationHorizontalSpeed default DefaultRotationHorizontalSpeed;
Published property RotationVerticalSpeed: Single read FRotationVerticalSpeed write FRotationVerticalSpeed default DefaultRotationVerticalSpeed;
Published property MoveHorizontalSpeed: Single read FMoveHorizontalSpeed write FMoveHorizontalSpeed default 1.0;
Published property MoveVerticalSpeed: Single read FMoveVerticalSpeed write FMoveVerticalSpeed default 1.0;
Published property MoveSpeed: Single read FMoveSpeed write FMoveSpeed default 1.0;
Published property MoveSpeedMin: Single read FMoveSpeedMin write FMoveSpeedMin default DefaultMoveSpeedMin;
Published property MoveSpeedMax: Single read FMoveSpeedMax write FMoveSpeedMax default DefaultMoveSpeedMax;
Published property MouseDraggingHorizontalRotationSpeed: Single read FMouseDraggingHorizontalRotationSpeed write FMouseDraggingHorizontalRotationSpeed default DefaultMouseDraggingHorizontalRotationSpeed;
Published property MouseDraggingVerticalRotationSpeed: Single read FMouseDraggingVerticalRotationSpeed write FMouseDraggingVerticalRotationSpeed default DefaultMouseDraggingVerticalRotationSpeed;
Published property MouseDraggingMoveSpeed: Single read FMouseDraggingMoveSpeed write FMouseDraggingMoveSpeed default DefaultMouseDraggingMoveSpeed;
Published property MouseDragMode: TMouseDragMode read FMouseDragMode write FMouseDragMode default mdWalkRotate;
Published property Gravity: boolean read FGravity write FGravity default true;
Published property PreferredHeight: Single read FPreferredHeight write FPreferredHeight default DefaultPreferredHeight;
Published property CrouchHeight: Single read FCrouchHeight write FCrouchHeight default DefaultCrouchHeight;
Published property GrowSpeed: Single read FGrowSpeed write FGrowSpeed default DefaultGrowSpeed;
Published property JumpMaxHeight: Single read FJumpMaxHeight write FJumpMaxHeight default DefaultJumpMaxHeight;
Published property JumpHorizontalSpeedMultiply: Single read FJumpHorizontalSpeedMultiply write FJumpHorizontalSpeedMultiply default DefaultJumpHorizontalSpeedMultiply;
Published property JumpTime: Single read FJumpTime write FJumpTime default DefaultJumpTime;
Published property RunMultiplier: Single read FRunMultiplier write FRunMultiplier default DefaultRunMultiplier;
Published property AllowSlowerRotations: boolean read FAllowSlowerRotations write FAllowSlowerRotations default true;
Published property CheckModsDown: boolean read FCheckModsDown write FCheckModsDown default true;
Published property HeadBobbing: Single read FHeadBobbing write FHeadBobbing default DefaultHeadBobbing;
Published property HeadBobbingTime: Single read FHeadBobbingTime write FHeadBobbingTime default DefaultHeadBobbingTime;
Published property ClimbHeight: Single read FClimbHeight write FClimbHeight;

Description

Constants

Public DefaultWidth = 100.0;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 310).

Public DefaultHeight = 100.0;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 311).

Public DefaultRadius = 0.25;

This item is declared in ancestor TCastleNavigation.

Default value for TCastleNavigation.Radius. Matches the default VRML/X3D NavigationInfo.avatarSize[0].

Source: transform/castlecameras.pas (line 221).

Public DefaultPreferredHeight = 1.6;

This item is declared in ancestor TCastleNavigation.

Default value for TCastleNavigation.PreferredHeight. Matches the default VRML/X3D NavigationInfo.avatarSize[1].

Source: transform/castlecameras.pas (line 224).

Public DefaultInput = [niNormal, niMouseDragging, ni3dMouse, niGesture];

This item is declared in ancestor TCastleNavigation.

This item has no description.

Source: transform/castlecameras.pas (line 225).

Public DefaultHeadBobbingTime = 0.5;

This item is declared in ancestor TCastleNavigation.

This item has no description.

Source: transform/castlecameras.pas (line 226).

Public DefaultHeadBobbing = 0.02;

This item is declared in ancestor TCastleNavigation.

This item has no description.

Source: transform/castlecameras.pas (line 227).

Public DefaultCrouchHeight = 0.5;

This item is declared in ancestor TCastleNavigation.

This item has no description.

Source: transform/castlecameras.pas (line 228).

Public DefaultMouseLookHorizontalSensitivity = Pi * 0.1 / 180;

This item is declared in ancestor TCastleMouseLookNavigation.

This item has no description.

Source: transform/castlecameras.pas (line 677).

Public DefaultMouseLookVerticalSensitivity = Pi * 0.1 / 180;

This item is declared in ancestor TCastleMouseLookNavigation.

This item has no description.

Source: transform/castlecameras.pas (line 678).

Public DefaultFallSpeedStart = 0.5;

This item has no description.

Source: transform/castlecameras.pas (line 880).

Public DefaultGrowSpeed = 1.0;

This item has no description.

Source: transform/castlecameras.pas (line 881).

Public DefaultJumpMaxHeight = 1.0;

This item has no description.

Source: transform/castlecameras.pas (line 882).

Public DefaultMinAngleFromGravityUp = Pi * 10 / 180;

This item has no description.

Source: transform/castlecameras.pas (line 883).

Public DefaultRotationHorizontalSpeed = Pi * 150 / 180;

This item has no description.

Source: transform/castlecameras.pas (line 884).

Public DefaultRotationVerticalSpeed = Pi * 100 / 180;

This item has no description.

Source: transform/castlecameras.pas (line 885).

Public DefaultFallSpeedIncrease = 13/12;

This item has no description.

Source: transform/castlecameras.pas (line 886).

Public DefaultJumpHorizontalSpeedMultiply = 2.0;

This item has no description.

Source: transform/castlecameras.pas (line 887).

Public DefaultJumpTime = 1.0 / 8.0;

This item has no description.

Source: transform/castlecameras.pas (line 888).

Public DefaultMouseDraggingHorizontalRotationSpeed = Pi * 0.1 / 180;

This item has no description.

Source: transform/castlecameras.pas (line 889).

Public DefaultMouseDraggingVerticalRotationSpeed = Pi * 0.1 / 180;

This item has no description.

Source: transform/castlecameras.pas (line 890).

Public DefaultMouseDraggingMoveSpeed = 0.01;

This item has no description.

Source: transform/castlecameras.pas (line 891).

Public DefaultMoveSpeedMin = 0.01;

This item has no description.

Source: transform/castlecameras.pas (line 892).

Public DefaultMoveSpeedMax = 10000.0;

This item has no description.

Source: transform/castlecameras.pas (line 893).

Public DefaultRunMultiplier = 2.0;

This item has no description.

Source: transform/castlecameras.pas (line 894).

Fields

Protected MouseDraggingStarted: Integer;

This item is declared in ancestor TCastleNavigation.

Needed for niMouseDragging navigation. Checking MouseDraggingStarted means that we handle only dragging that was initialized on viewport (since the viewport passed events to navigation). MouseDraggingStarted -1 means none, otherwise it's the finder index (to support multitouch).

Source: transform/castlecameras.pas (line 124).

Protected MouseDraggingStart: TVector2;

This item is declared in ancestor TCastleNavigation.

This item has no description.

Source: transform/castlecameras.pas (line 125).

Methods

Protected function GetInternalText: String; virtual;

This item is declared in ancestor TCastleComponent.

This item has no description.

Source: base/castleclassutils.pas (line 575).

Protected procedure SetInternalText(const Value: String); virtual;

This item is declared in ancestor TCastleComponent.

This item has no description.

Source: base/castleclassutils.pas (line 576).

Protected procedure SetName(const Value: TComponentName); override;

This item is declared in ancestor TCastleComponent.

This item has no description.

Source: base/castleclassutils.pas (line 577).

Protected procedure TranslateProperties(const TranslatePropertyEvent: TTranslatePropertyEvent); virtual;

This item is declared in ancestor TCastleComponent.

Enumerate all properties that are possible to translate in this component. E.g. in TCastleLabel it will return TCastleLabel.Caption, in TCastleEdit it will return TCastleEdit.Text and TCastleEdit.Placeholder.

Returns only non-empty properties, thus assuming that if current (by convention, English) text is empty, then there is no point in translating it. Moreover descendants may define boolean properties to exclude particular text from translating, e.g. TCastleLabel.CaptionTranslate, TCastleEdit.TextTranslate, TCastleEdit.PlaceholderTranslate.

It is not recursive (it doesn't enumerate children properties). Use global TranslateProperties procedure to call this on a hierarchy of TComponent.

You usually don't want to call this method (it is called by other engine routines). But you may find it useful to override this, if you define new component.

Source: base/castleclassutils.pas (line 598).

Public procedure SetTransient;

This item is declared in ancestor TCastleComponent.

Ignore this component when serializing parent's TCastleUserInterface.Controls list or TCastleTransform.List, and do not show this component in CGE editor. This simply sets csTransient flag in ComponentStyle.

This is useful for children that are automatically managed by the parent, and should not be modified by user code. For example, TCastleCheckbox is internally composed from TCastleImageControl and TCastleLabel children, but we don't want to serialize or even show these children to user.

Note that if you want to prevent this component from serializing as part of TCastleUserInterface.Controls list or TCastleTransform.List, but you still want it to be visible in CGE editor, then make it a "subcomponent" instead, by SetSubComponent(true).

Note that both csSubComponent and csTransient only disable the component serialization as part of parent's lists enumerated by CustomSerialization (see internal TCastleUserInterface.SerializeChildrenEnumerate , TCastleTransform.SerializeChildrenEnumerate, TCastleTransform.SerializeBehaviorsEnumerate).

If you will make the component published in its own property (which is normal for "subcomponents") then it will be serialized anyway, just as part of it's own property (like TCastleScrollView.ScrollArea). So to really avoid serializing a children component make it csSubComponent and/or csTransient, and do not publish it.

Source: base/castleclassutils.pas (line 663).

Public procedure AddNonVisualComponent(const NonVisualComponent: TComponent);

This item is declared in ancestor TCastleComponent.

Add non-visual component to this component. This is used to organize non-visual components in a tree hierarchy, in CGE designs and editor.

See also
NonVisualComponentsCount
Count of components added by AddNonVisualComponent.
NonVisualComponents
Components added by AddNonVisualComponent.
NonVisualComponentsEnumerate
You can enumerate current non-visual components using loop like for C in MyComponent.NonVisualComponentsEnumerate do ....

Source: base/castleclassutils.pas (line 672).

Public procedure InsertNonVisualComponent(const Index: Integer; const NonVisualComponent: TComponent);

This item is declared in ancestor TCastleComponent.

Insert non-visual component to this component. This is used to organize non-visual components in a tree hierarchy, in CGE designs and editor.

See also
NonVisualComponentsCount
Count of components added by AddNonVisualComponent.
NonVisualComponents
Components added by AddNonVisualComponent.
NonVisualComponentsEnumerate
You can enumerate current non-visual components using loop like for C in MyComponent.NonVisualComponentsEnumerate do ....

Source: base/castleclassutils.pas (line 681).

Public procedure RemoveNonVisualComponent(const NonVisualComponent: TComponent);

This item is declared in ancestor TCastleComponent.

Removes the component previously added by AddNonVisualComponent.

Source: base/castleclassutils.pas (line 684).

Public function NonVisualComponentsIndexOf(const NonVisualComponent: TComponent): Integer;

This item is declared in ancestor TCastleComponent.

Index of the previously added non-visual component. Returns -1 if the component was not found.

Source: base/castleclassutils.pas (line 688).

Public function NonVisualComponentsCount: Integer;

This item is declared in ancestor TCastleComponent.

Count of components added by AddNonVisualComponent.

See also
AddNonVisualComponent
Add non-visual component to this component.
NonVisualComponents
Components added by AddNonVisualComponent.
NonVisualComponentsEnumerate
You can enumerate current non-visual components using loop like for C in MyComponent.NonVisualComponentsEnumerate do ....

Source: base/castleclassutils.pas (line 695).

Public function NonVisualComponentsEnumerate: TNonVisualComponentsEnumerator;

This item is declared in ancestor TCastleComponent.

You can enumerate current non-visual components using loop like for C in MyComponent.NonVisualComponentsEnumerate do .... Do not call this method in other contexts, it is only useful for "for..in" construction.

See also
AddNonVisualComponent
Add non-visual component to this component.

Source: base/castleclassutils.pas (line 705).

Public function ValueIsStreamed: Boolean; virtual;

This item is declared in ancestor TCastleComponent.

Whether the current value of this object should be written to the stream. This should be True if anything inside this object should be serialized (which means it has non-default value or "stored" specifier indicates that it should be serialized).

This is used by CastleComponentSerialize, which is used in Castle Game Engine for all serialization.

In simple cases, this just says whether the current value of this object equals to some default value.

The default implementation of this class returns True (so always write).

Descendants that override this to sometimes return False (so no need to write) must be very careful: any addition of a new field requires extending this method, otherwise new field may not be saved sometimes (when all other fields are default). Descentants of such classes must also be aware of it. This check must include everything that is inside this object in JSON, including subcomponents and children objects (as done e.g. by TSerializationProcess.ReadWriteList). In practice, overriding this method is only reasonable for simple classes that will not change much in the future, like TCastleVector3Persistent.

The name of this method is consistent with TPropertyEditor.ValueIsStreamed in LCL.

Source: base/castleclassutils.pas (line 739).

Protected procedure Loaded; override;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 249).

Protected function ContainerWidth: Cardinal; virtual; deprecated 'arrange UI using anchors, FullSize and friends; if you really need container size, use "Container.UnscaledWidth" or "Container.PixelsWidth" after checking "Container <> nil"';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: arrange UI using anchors, FullSize and friends; if you really need container size, use "Container.UnscaledWidth" or "Container.PixelsWidth" after checking "Container <> nil"

Container sizes.

Source: ui/castleuicontrols_userinterface.inc (line 261).

Protected function ContainerHeight: Cardinal; virtual; deprecated 'arrange UI using anchors, FullSize and friends; if you really need container size, use "Container.UnscaledHeight" or "Container.PixelsHeight" after checking "Container <> nil"';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: arrange UI using anchors, FullSize and friends; if you really need container size, use "Container.UnscaledHeight" or "Container.PixelsHeight" after checking "Container <> nil"

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 262).

Protected function ContainerRect: TRectangle; virtual; deprecated 'arrange UI using anchors, FullSize and friends; if you really need container size, use "Container.UnscaledRect" or "Container.PixelsRect" after checking "Container <> nil"';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: arrange UI using anchors, FullSize and friends; if you really need container size, use "Container.UnscaledRect" or "Container.PixelsRect" after checking "Container <> nil"

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 263).

Protected function ContainerSizeKnown: boolean; virtual; deprecated 'arrange UI using anchors, FullSize and friends; if you really need container size, use "Container.UnscaledWidth/Height" or "Container.PixelsWidth/Height" after checking "Container <> nil"';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: arrange UI using anchors, FullSize and friends; if you really need container size, use "Container.UnscaledWidth/Height" or "Container.PixelsWidth/Height" after checking "Container <> nil"

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 264).

Protected procedure DoCursorChange; virtual; deprecated 'better override VisibleChange and watch for chCursor in Changes';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: better override VisibleChange and watch for chCursor in Changes

Called when Cursor changed. In TCastleUserInterface class, just calls OnCursorChange.

Source: ui/castleuicontrols_userinterface.inc (line 270).

Protected procedure DefineProperties(Filer: TFiler); override;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 274).

Protected procedure UIScaleChanged; virtual;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 276).

Protected procedure PreferredSize(var PreferredWidth, PreferredHeight: Single); virtual;

This item is declared in ancestor TCastleUserInterface.

Controls that have a preferred size should override this. By default this contains values derived from Width, WidthFraction, Height, HeightFraction, with Border subtracted.

Note that the arguments should be already scaled, i.e. multiplied by UIScale, i.e. expressed in final device pixels.

Note that the returned PreferredWidth and PreferredHeight must not include the space for Border. Border size will be added later.

Source: ui/castleuicontrols_userinterface.inc (line 291).

Protected procedure BeforeSizing; virtual;

This item is declared in ancestor TCastleUserInterface.

Called right before calculating size. This is your only chance to adjust e.g. children size, if you need them to be synchronized with something, and you may use AutoSizeToChildren.

In most use-cases, you rather adjust preferred size by overriding PreferredSize.

Source: ui/castleuicontrols_userinterface.inc (line 300).

Protected procedure DoInternalMouseEnter; virtual;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 302).

Protected procedure DoInternalMouseLeave; virtual;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 303).

Protected function Theme: TCastleTheme;

This item is declared in ancestor TCastleUserInterface.

Theme that should be used by this control. Either CustomTheme or global Theme.

Source: ui/castleuicontrols_userinterface.inc (line 307).

Public procedure CustomSerialization(const SerializationProcess: TSerializationProcess); override;

This item is declared in ancestor TCastleUserInterface.

This item has no description. Showing description inherited from TCastleComponent.CustomSerialization.

Override this method to call various methods of SerializationProcess, which in turn allows to serialize/deserialize things that are not published. This allows to serialize/deserialize with more freedom, e.g. to serialize/deserialize some private field.

Source: ui/castleuicontrols_userinterface.inc (line 315).

Public procedure DesignerInfo(const SList: TStrings); override;

This item is declared in ancestor TCastleUserInterface.

This item has no description. Showing description inherited from TCastleComponent.DesignerInfo.

Override to add information that should be visible at design-time. Call SList.Add for each new line of information.

Source: ui/castleuicontrols_userinterface.inc (line 317).

Public procedure DesignerWarnings(const SList: TStrings); override;

This item is declared in ancestor TCastleUserInterface.

This item has no description. Showing description inherited from TCastleComponent.DesignerWarnings.

Override to add warnings that should be visible at design-time. Call SList.Add for each new warning.

Source: ui/castleuicontrols_userinterface.inc (line 318).

Public function GetEnumerator: TEnumerator;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 319).

Public procedure InternalSetContainer(const Value: TCastleContainer); virtual;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 320).

Public function PreviewPress(const Event: TInputPressRelease): boolean; virtual;

This item is declared in ancestor TCastleUserInterface.

Similar to Press but allows the parent control to preview the event before it is passed to children UI controls.

See also
Press
Override this method to react to user pressing a key, mouse button or mouse wheel.

Source: ui/castleuicontrols_userinterface.inc (line 397).

Public function PreviewRelease(const Event: TInputPressRelease): boolean; virtual;

This item is declared in ancestor TCastleUserInterface.

Similar to Release but allows the parent control to preview the event before it is passed to children UI controls.

See also
Press
Override this method to react to user pressing a key, mouse button or mouse wheel.

Source: ui/castleuicontrols_userinterface.inc (line 403).

Public procedure VisibleChange(const Changes: TCastleUserInterfaceChanges; const ChangeInitiatedByChildren: boolean = false); overload; virtual;

This item is declared in ancestor TCastleUserInterface.

Called always when something important inside this control (or it's children) changed. To be more precise, this is called when something mentioned among the TCastleUserInterfaceChange enumerated items changed.

This is always called with Changes <> [] (non-empty set).

Source: ui/castleuicontrols_userinterface.inc (line 512).

Public procedure Resize; virtual;

This item is declared in ancestor TCastleUserInterface.

Event called when the container (component or window with OpenGL context) size changes.

You can resize/reposition your component here to react to parent size changes. This is called only when the rendering context of the container is initialized, so you can be sure that this is called only between GLContextOpen and GLContextClose.

We also call this once when inserting into the controls list (like TCastleWindow.Controls or TCastleControl.Controls or inside parent TCastleUserInterface), if inserting into the container/parent with already initialized OpenGL context. If inserting into the container/parent without OpenGL context initialized, it will be called later, when OpenGL context will get initialized, right after GLContextOpen.

In other words, this is always called to let the control know the size of the container, if and only if the OpenGL context is initialized.

Source: ui/castleuicontrols_userinterface.inc (line 556).

Public function ControlsCount: Integer;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 587).

Public procedure InsertFront(const NewItem: TCastleUserInterface); overload;

This item is declared in ancestor TCastleUserInterface.

Add child control, at the front of other children.

Source: ui/castleuicontrols_userinterface.inc (line 590).

Public procedure InsertFrontIfNotExists(const NewItem: TCastleUserInterface);

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 591).

Public procedure InsertFront(const NewItems: TCastleUserInterfaceList); overload;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 592).

Public procedure InsertBack(const NewItem: TCastleUserInterface); overload;

This item is declared in ancestor TCastleUserInterface.

Add child control, at the back of other children.

Source: ui/castleuicontrols_userinterface.inc (line 595).

Public procedure InsertBackIfNotExists(const NewItem: TCastleUserInterface);

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 596).

Public procedure InsertBack(const NewItems: TCastleUserInterfaceList); overload;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 597).

Public procedure InsertControl(const Index: Integer; const NewItem: TCastleUserInterface);

This item is declared in ancestor TCastleUserInterface.

Add child control at specified position. It is usually easier to use InsertFront or InsertBack, if possible.

Source: ui/castleuicontrols_userinterface.inc (line 602).

Public procedure RemoveControl(const Item: TCastleUserInterface);

This item is declared in ancestor TCastleUserInterface.

Remove control added by InsertFront or InsertBack.

Note that this method does not free the Item instance. This method merely removes Item from our controls, so that Item is no longer rendered as part of this parent. It is still the caller's responsibility to make sure the Item is freed at some point.

See https://castle-engine.io/modern_pascal#_freeing_classes for description how to free instances in Pascal. As TCastleUserInterface descends from TComponent, a simple and proper solution is often just to create it with some "owner" (like TCastleView.FreeAtStop or Application) that will take care of freeing it.

Source: ui/castleuicontrols_userinterface.inc (line 617).

Public function IndexOfControl(const Item: TCastleUserInterface): Integer;

This item is declared in ancestor TCastleUserInterface.

Index of child control, or -1 if not present.

Source: ui/castleuicontrols_userinterface.inc (line 620).

Public procedure ClearControls;

This item is declared in ancestor TCastleUserInterface.

Remove all child controls added by InsertFront or InsertBack.

Note that, just like RemoveControl, this method does not free the children controls. This method merely removes children controls, so they are no longer rendered as part of the parent. It is still the caller's responsibility to make sure the children controls are freed at some point.

See https://castle-engine.io/modern_pascal#_freeing_classes for description how to free instances in Pascal. As TCastleUserInterface descends from TComponent, a simple and proper solution is often just to create it with some "owner" (like TCastleView.FreeAtStop or Application) that will take care of freeing it.

Source: ui/castleuicontrols_userinterface.inc (line 635).

Public procedure MoveToFront;

This item is declared in ancestor TCastleUserInterface.

Move to become the front-most control within the parent.

This works when this control is a child of another control (has Parent assigned) or when it's a direct child of the container (in which case Parent is not assigned by Container is, which means the control is directly on TCastleContainer.Controls list).

This is ignored if this control is not within any container (so, also not within any parent).

Source: ui/castleuicontrols_userinterface.inc (line 646).

Public function CapturesEventsAtPosition(const Position: TVector2): boolean; virtual;

This item is declared in ancestor TCastleUserInterface.

Does this control capture events under this container position. The default implementation simply checks whether Position is inside RenderRect. It also checks whether CapturesEvents is True.

Always treated like False when Exists returns False, so the implementation of this method only needs to make checks assuming that Exists = True.

Source: ui/castleuicontrols_userinterface.inc (line 660).

Public procedure BeforeRender; virtual;

This item is declared in ancestor TCastleUserInterface.

Prepare your resources, right before drawing. Called only when Exists and GLInitialized.

Do not explicitly call this method. Instead, render controls by adding them to the TCastleContainer.Controls list, or render them explicitly (for off-screen rendering) by TCastleContainer.RenderControl.

Source: ui/castleuicontrols_userinterface.inc (line 670).

Public procedure Render; virtual;

This item is declared in ancestor TCastleUserInterface.

Render a control. Called only when Exists and render context is initialized.

Do not call this method. It will be automatically called by the engine when needed. It will be called when UI is part of TCastleContainer.Controls list or rendered (e.g. for off-screen rendering) by TCastleContainer.RenderControl.

You should only override this method.

See https://castle-engine.io/manual_2d_ui_custom_drawn.php for examples what you can put here.

You can depend on some OpenGL state being set before calling this method. You can depend on it being set, and you can carelessly change it. This state we set:

  • Viewport is set to include whole container.

  • Depth test is off.

  • For ancient fixed-function pipeline (see TGLFeatures.RequestCapabilities):

    • The 2D orthographic projection is always set at the beginning. Useful for 2D controls.

    • The modelview matrix is set to identity. The matrix mode is always modelview.

    • The raster position is set to (0,0). The (deprecated) WindowPos is also set to (0,0).

    • Texturing, lighting, fog is off.

Beware that GLSL RenderContext.CurrentProgram has undefined value when this is called. You should always set it, before making direct OpenGL drawing calls (all the engine drawing routines do it already, this is only a concern if you make direct OpenGL / OpenGLES calls).

Source: ui/castleuicontrols_userinterface.inc (line 714).

Public procedure RenderOverChildren; virtual;

This item is declared in ancestor TCastleUserInterface.

Render a control contents over the children controls. This is analogous to Render, but it executes after children are drawn. You should usually prefer to override Render instead of this method, as the convention is that the parent is underneath children.

You should only override this method (do not call it, it will be called by the engine).

See https://castle-engine.io/manual_2d_ui_custom_drawn.php for examples what you can put here.

Source: ui/castleuicontrols_userinterface.inc (line 725).

Public function TooltipExists: Boolean; virtual; deprecated 'use TooltipControl to customize tooltip look';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use TooltipControl to customize tooltip look

Render a tooltip of this control. If you want to have tooltip for this control detected, you have to override TooltipExists. Then the TooltipRender will be called.

TooltipRender is called in the same way as Render. TooltipRender is always called as a last (front-most) control. Argument TooltipPosition is the left-bottom (in screen space, regardless of UIScaling) suggested position of the tooltip.

It is simplest to descend from TCastleUserInterfaceFont, that implements simple TCastleUserInterfaceFont.Tooltip property and overrides these two methods as necessary.

Source: ui/castleuicontrols_userinterface.inc (line 741).

Public procedure TooltipRender(const TooltipPosition: TVector2); virtual; deprecated 'use TooltipControl to customize tooltip look';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use TooltipControl to customize tooltip look

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 742).

Public procedure GLContextOpen; virtual;

This item is declared in ancestor TCastleUserInterface.

Initialize your OpenGL resources.

This is called when OpenGL context of the container is created, or when the control is added to the already existing context. In other words, this is the moment when you can initialize OpenGL resources, like display lists, VBOs, OpenGL texture names, etc.

As an exception, this is called regardless of the Exists value. This way a control can prepare it's resources, regardless if it exists now.

Source: ui/castleuicontrols_userinterface.inc (line 754).

Public procedure GLContextClose; virtual;

This item is declared in ancestor TCastleUserInterface.

Destroy your OpenGL resources.

Called when OpenGL context of the container is destroyed. Also called when controls is removed from the container Controls list. Also called from the destructor.

You should release here any resources that are tied to the OpenGL context. In particular, the ones created in GLContextOpen.

As an exception, this is called regardless of the Exists value. This way a control can release it's resources, regardless if it exists now.

Source: ui/castleuicontrols_userinterface.inc (line 767).

Public procedure SetFocused(const Value: boolean); virtual;

This item is declared in ancestor TCastleUserInterface.

Called when this control becomes or stops being focused, that is: under the mouse cursor and will receive events.

This updates Focused property. This also calls OnInternalMouseEnter / OnInternalMouseLeave.

Source: ui/castleuicontrols_userinterface.inc (line 813).

Public function EffectiveRect: TFloatRectangle;

This item is declared in ancestor TCastleUserInterface.

Control position and size. Use this to base other controls size/position on this control's calculated size/position.

The algorithm that determines control position and size is like this:

The above describes the size of the content and border, summed. The content itself may be a little smaller, when the Border is used. The size of the "content itself" is returned only by RenderRect (in already-scaled coordinates, i.e. using final device pixels).

The anchors (see Anchor) also affect the final position of the control.

Note that some descendants do auto-sizing by default. This means that some of these properties may be ignored, and instead the calculated size (EffectiveWidth, EffectiveHeight) depends on some core values of the control.

For example:

Consult the documentation of each descendant for the exact specification of the size behavior.

This method returns the rectangle in local coordinates (relative to the parent 2D control). The returned rectangle size includes the border size. The returned rectangle size uses "unscaled" coordinates, which means that they correspond to the sizes you set e.g. in TCastleUserInterface.Width, TCastleUserInterface.Height, and translation units you use with e.g. TCastleUserInterface.Anchor.

If you're looking for a way to query the size of the control in final scaled coordinates (in real device pixels), and not relative to the parent position, use RenderRect or RenderRectWithBorder instead.

This method ignores the current value of the Exists method and Exists property, that is: the result of this function assumes that control does exist.

See also
TCastleUserInterface.EffectiveWidth
Calculated width of the control, without UI scaling.
TCastleUserInterface.EffectiveHeight
Calculated height of the control, without UI scaling.

Source: ui/castleuicontrols_userinterface.inc (line 927).

Public function EffectiveWidth: Single;

This item is declared in ancestor TCastleUserInterface.

Calculated width of the control, without UI scaling. Useful if you want to base other controls size/position on this control calculated size.

Unlike the Width property, this is the effective size, not the desired size. So this is already processed by any auto-sizing mechanism (e.g. TCastleImageControl may adjust it's own size to the underlying image, depending on settings), it is changed by FullSize and so on.

It is always equal to just EffectiveRect.Width. It is 0 when EffectiveRect is empty.

See also
EffectiveRect
Control position and size.

Source: ui/castleuicontrols_userinterface.inc (line 943).

Public function EffectiveHeight: Single;

This item is declared in ancestor TCastleUserInterface.

Calculated height of the control, without UI scaling. Useful if you want to base other controls size/position on this control calculated size.

Unlike the Height property, this is the effective size, not the desired size. So this is already processed by any auto-sizing mechanism (e.g. TCastleImageControl may adjust it's own size to the underlying image, depending on settings), it is changed by FullSize and so on.

It is always equal to just EffectiveRect.Height. It is 0 when EffectiveRect is empty.

See also
EffectiveRect
Control position and size.

Source: ui/castleuicontrols_userinterface.inc (line 959).

Public function EffectiveWidthForChildren: Single;

This item is declared in ancestor TCastleUserInterface.

EffectiveWidth without Border size.

Source: ui/castleuicontrols_userinterface.inc (line 962).

Public function EffectiveHeightForChildren: Single;

This item is declared in ancestor TCastleUserInterface.

EffectiveHeight without Border size.

Source: ui/castleuicontrols_userinterface.inc (line 964).

Public function CalculatedWidth: Cardinal; deprecated 'use EffectiveWidth';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use EffectiveWidth

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 966).

Public function CalculatedHeight: Cardinal; deprecated 'use EffectiveHeight';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use EffectiveHeight

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 967).

Public function CalculatedRect: TRectangle; deprecated 'use EffectiveRect';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use EffectiveRect

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 968).

Public function RenderRect: TFloatRectangle;

This item is declared in ancestor TCastleUserInterface.

Position and size of this control, assuming it exists, in container coordinates (in final device pixels). The primary use of this is inside Render. A proper UI control should adjust to draw precisely in this rectangle.

Source: ui/castleuicontrols_userinterface.inc (line 974).

Public function RenderRectWithBorder: TFloatRectangle;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 975).

Public function ScreenRect: TRectangle; deprecated 'use RenderRect';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use RenderRect

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 977).

Public function ContainerToLocalPosition(ContainerPosition: TVector2; const ContainerPositionScaled: Boolean = true): TVector2;

This item is declared in ancestor TCastleUserInterface.

Convert position relative to container (in final device coordinates, without UI scaling, by default) into position relative to this UI control (in coordinates with UI scaling). Useful e.g. to convert mouse/touch position from TInputPressRelease.Position into position useful for children of this UI control.

The exact definition is that using the result of this to set our child Translation, assuming the child is anchored to the left-bottom (the default state) and child has Left = Bottom = 0, sets child position exactly to the indicated point on the container.

Parameters
ContainerPositionScaled
If True (default) then the container position (the ContainerPosition parameter) is assumed to be in final device pixels, i.e. the window area in X is from 0 to TCastleContainer.Width, in Y from 0 and TCastleContainer.Height. This is useful when the parameter comes e.g. from TInputPressRelease.Position.

If False then the container position (the ContainerPosition parameter) is assumed to be in unscaled device pixels, i.e. the window area in X is from 0 to TCastleContainer.UnscaledWidth, in Y from 0 and TCastleContainer.UnscaledHeight.

Source: ui/castleuicontrols_userinterface.inc (line 1003).

Public function LocalToContainerPosition(const LocalPosition: TVector2; const ContainerPositionScaled: Boolean = true): TVector2;

This item is declared in ancestor TCastleUserInterface.

Convert position relative to this UI control (in coordinates with UI scaling) into relative to container (in final device coordinates, without UI scaling, by default). Reverses ContainerToLocalPosition.

Parameters
ContainerPositionScaled
If True (default) then the container position (the result of this method) is assumed to be in final device pixels, i.e. the window area in X is from 0 to TCastleContainer.Width, in Y from 0 and TCastleContainer.Height.

If False then the container position (the result of this method) is assumed to be in unscaled device pixels, i.e. the window area in X is from 0 to TCastleContainer.UnscaledWidth, in Y from 0 and TCastleContainer.UnscaledHeight.

Source: ui/castleuicontrols_userinterface.inc (line 1022).

Public function ParentRect: TFloatRectangle;

This item is declared in ancestor TCastleUserInterface.

Rectangle filling the parent control (or container), in local coordinates. Since this is in local coordinates, the returned rectangle Left and Bottom are always zero, unless parent has Border (the returned rectangle is shrunk by Parent.Border). This is already scaled by UI scaling.

Source: ui/castleuicontrols_userinterface.inc (line 1030).

Public procedure Anchor(const AHorizontalAnchor: THorizontalPosition; const TranslationX: Single = 0); overload;

This item is declared in ancestor TCastleUserInterface.

Adjust position to align us with the parent horizontally. The resulting EffectiveRect and RenderRect and RenderRectWithBorder will immediately reflect the new position.

Note that position set here (anchors, Translation) are ignored when FullSize is set to true. In case of FullSize, the control fills the parent perfectly.

This utility method sets HorizontalAnchorSelf, HorizontalAnchorParent, Translation.X.

Source: ui/castleuicontrols_userinterface.inc (line 1042).

Public procedure Anchor( const AHorizontalAnchorSelf, AHorizontalAnchorParent: THorizontalPosition; const TranslationX: Single = 0); overload;

This item is declared in ancestor TCastleUserInterface.

Adjust position to align us with the parent horizontally. The resulting EffectiveRect and RenderRect and RenderRectWithBorder will immediately reflect the new position.

Note that position set here (anchors, Translation) are ignored when FullSize is set to true. In case of FullSize, the control fills the parent perfectly.

This utility method sets HorizontalAnchorSelf, HorizontalAnchorParent, Translation.X.

Source: ui/castleuicontrols_userinterface.inc (line 1055).

Public procedure Anchor(const AVerticalAnchor: TVerticalPosition; const TranslationY: Single = 0); overload;

This item is declared in ancestor TCastleUserInterface.

Adjust position to align us to the parent vertically. The resulting EffectiveRect and RenderRect and RenderRectWithBorder will immediately reflect the new position.

Note that position set here (anchors, Translation) are ignored when FullSize is set to true. In case of FullSize, the control fills the parent perfectly.

This utility method sets VerticalAnchorSelf, VerticalAnchorParent, Translation.Y.

Source: ui/castleuicontrols_userinterface.inc (line 1069).

Public procedure Anchor( const AVerticalAnchorSelf, AVerticalAnchorParent: TVerticalPosition; const TranslationY: Single = 0); overload;

This item is declared in ancestor TCastleUserInterface.

Adjust position to align us to the parent vertically. The resulting EffectiveRect and RenderRect and RenderRectWithBorder will immediately reflect the new position.

Note that position set here (anchors, Translation) are ignored when FullSize is set to true. In case of FullSize, the control fills the parent perfectly.

This utility method sets VerticalAnchorSelf, VerticalAnchorParent, Translation.Y.

Source: ui/castleuicontrols_userinterface.inc (line 1082).

Public procedure AlignHorizontal( const ControlPosition: TPositionRelative = prMiddle; const ContainerPosition: TPositionRelative = prMiddle; const X: Single = 0); deprecated 'use Anchor';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use Anchor

Immediately position the control with respect to the parent by adjusting Left. Deprecated, use Align with THorizontalPosition.

Source: ui/castleuicontrols_userinterface.inc (line 1091).

Public procedure Align( const ControlPosition: THorizontalPosition; const ContainerPosition: THorizontalPosition; const X: Single = 0); overload; deprecated 'use Anchor';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use Anchor

Immediately position the control with respect to the parent by adjusting Left.

Note that using Anchor is often more comfortable than this method, since you only need to set anchor once (for example, right after creating the control). In contrast, adjusting position using this method will typically need to be repeated at each window on resize, like in TCastleUserInterface.Resize.

Source: ui/castleuicontrols_userinterface.inc (line 1104).

Public procedure AlignVertical( const ControlPosition: TPositionRelative = prMiddle; const ContainerPosition: TPositionRelative = prMiddle; const Y: Single = 0); deprecated 'use Anchor';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use Anchor

Immediately position the control with respect to the parent by adjusting Bottom. Deprecated, use Align with TVerticalPosition.

Source: ui/castleuicontrols_userinterface.inc (line 1112).

Public procedure Align( const ControlPosition: TVerticalPosition; const ContainerPosition: TVerticalPosition; const Y: Single = 0); overload; deprecated 'use Anchor';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use Anchor

Immediately position the control with respect to the parent by adjusting Bottom.

Note that using Anchor is often more comfortable than this method, since you only need to set anchor once (for example, right after creating the control). In contrast, adjusting position using this method will typically need to be repeated at each window on resize, like in TCastleUserInterface.Resize.

Source: ui/castleuicontrols_userinterface.inc (line 1125).

Public procedure Center; deprecated 'use Anchor(hpMiddle); Anchor(vpMiddle); to reliably center the control';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use Anchor(hpMiddle); Anchor(vpMiddle); to reliably center the control

Immediately center the control within the parent, both horizontally and vertically.

Note that using Anchor is often more comfortable than this method, since you only need to set anchor once. For example, right after creating the control call Anchor(hpMiddle); Anchor(vpMiddle);. In contrast, adjusting position using this method will typically need to be repeated at each window on resize, like in TCastleUserInterface.Resize.

Source: ui/castleuicontrols_userinterface.inc (line 1141).

Public function UIScale: Single; virtual;

This item is declared in ancestor TCastleUserInterface.

UI scale of this control, derived from container (see TCastleContainer.UIScaling and EnableUIScaling).

Source: ui/castleuicontrols_userinterface.inc (line 1145).

Public procedure EditorAllowResize(out ResizeWidth, ResizeHeight: Boolean; out Reason: String); virtual;

This item is declared in ancestor TCastleUserInterface.

Override this to prevent resizing some dimension in CGE editor.

Source: ui/castleuicontrols_userinterface.inc (line 1148).

Public function EffectiveFullSize: Boolean;

This item is declared in ancestor TCastleUserInterface.

Is the FullSize actually active. Checks FullSize and not AutoSizeToChildren, i.e. it accounts that AutoSizeToChildren overrides FullSize (since they cannot both work at the same time).

Source: ui/castleuicontrols_userinterface.inc (line 1254).

Protected function GoodModelBox: TBox3D;

This item is declared in ancestor TCastleNavigation.

Box around which the Examine navigation should work. Note that calling this has sometimes non-trivial cost, needs to iterate over items, so save the result to a variable if you need to use it multiple times.

Source: transform/castlecameras.pas (line 131).

Protected function InternalViewport: TCastleUserInterface;

This item is declared in ancestor TCastleNavigation.

Viewport we should manipulate. This is Nil, or TCastleViewport instance, but it cannot be declared as TCastleViewport due to unit dependencies.

Source: transform/castlecameras.pas (line 136).

Protected function Valid: Boolean;

This item is declared in ancestor TCastleNavigation.

If this is True, then Camera is non-nil, InternalViewport is non-nil, and navigation should function as usual.

Source: transform/castlecameras.pas (line 140).

Protected function UsingInput: TNavigationInputs;

This item is declared in ancestor TCastleNavigation.

Behave as if Input is like this. This allows to disable input when not Valid.

Source: transform/castlecameras.pas (line 144).

Protected procedure Height(const APosition: TVector3; out AIsAbove: Boolean; out AnAboveHeight: Single; out AnAboveGround: PTriangle);

This item is declared in ancestor TCastleNavigation.

Check collisions to determine how high above ground is given point (in world coordinates). Checks collisions through parent TCastleViewport, if CheckCollisions.

Source: transform/castlecameras.pas (line 151).

Protected function MoveTo(const LocalProposedNewPos: TVector3; const BecauseOfGravity, CheckClimbHeight: boolean): boolean;

This item is declared in ancestor TCastleNavigation.

Like Move, but you pass here final ProposedNewPos.

LocalProposedNewPos is given in TCastleCamera parent coordinates, so it works naturally in the same space as TCastleCamera.Translation, Direction, Up. You can think "I want to move to Translation + MoveVector".

Source: transform/castlecameras.pas (line 190).

Protected function Move(const MoveVector: TVector3; const BecauseOfGravity, CheckClimbHeight: boolean): boolean;

This item is declared in ancestor TCastleNavigation.

Try to move from current Translation to Translation + MoveVector. Checks MoveAllowed, also (if CheckClimbHeight is True) checks the ClimbHeight limit.

MoveVector is given in TCastleCamera parent coordinates, so it works naturally in the same space as TCastleCamera.Translation, Direction, Up. You can think "I want to move TCastleCamera to Translation + MoveVector".

Returns False if move was not possible and Position didn't change. Returns True is some move occured (but don't assume too much: possibly we didn't move to exactly Position + MoveVector because of wall sliding).

Source: transform/castlecameras.pas (line 205).

Protected function Zoom(const Factor: Single): Boolean; virtual;

This item is declared in ancestor TCastleNavigation.

Zoom in / out. Negative Factor makes "zoom out", positive makes "zoom in" (zero makes nothing).

Called only if ZoomEnabled, so no need to check it within implementation.

Factor values correspond to TInputPressRelease.MouseWheelScroll values, so 1.0 should be treated like a "one operation" and some systems only generate values -1 or +1 (and never fractions).

Source: transform/castlecameras.pas (line 216).

Public procedure Assign(Source: TPersistent); override;

This item is declared in ancestor TCastleNavigation.

This item has no description.

Source: transform/castlecameras.pas (line 231).

Public function Camera: TCastleCamera;

This item is declared in ancestor TCastleNavigation.

Associated TCastleCamera of the viewport. May return Nil if the viewport camera is not assigned.

Exceptions raised
EViewportNotAssigned
If Viewport not assigned yet.

Source: transform/castlecameras.pas (line 251).

Public function Release(const Event: TInputPressRelease): boolean; override;

This item is declared in ancestor TCastleNavigation.

This item has no description. Showing description inherited from TCastleUserInterface.Release.

Override this method to react to user releasing a key, mouse button. Return True if the event was handled, which prevents from passing this event to other UI controls.

This is counterpart to Press method. See Press for more details.

Note: We'd like this method to also be called when user releases a mouse wheel. But currently releasing of the mouse wheel is not reported now by any backend. Only releasing of keys and mouse buttons is reported.

Source: transform/castlecameras.pas (line 283).

Public procedure AnimateTo(const OtherCamera: TCastleCamera; const Time: TFloatTime); overload; deprecated 'use Viewport.Camera.AnimateTo';

This item is declared in ancestor TCastleNavigation.

Warning: this symbol is deprecated: use Viewport.Camera.AnimateTo

This item has no description.

Source: transform/castlecameras.pas (line 285).

Public procedure AnimateTo(const OtherNavigation: TCastleNavigation; const Time: TFloatTime); overload; deprecated 'use AnimateTo with TCastleCamera, not TCastleNavigation';

This item is declared in ancestor TCastleNavigation.

Warning: this symbol is deprecated: use AnimateTo with TCastleCamera, not TCastleNavigation

This item has no description.

Source: transform/castlecameras.pas (line 286).

Public procedure AnimateTo(const APos, ADir, AUp: TVector3; const Time: TFloatTime); overload; deprecated 'use Viewport.Camera.AnimateTo';

This item is declared in ancestor TCastleNavigation.

Warning: this symbol is deprecated: use Viewport.Camera.AnimateTo

This item has no description.

Source: transform/castlecameras.pas (line 287).

Public function Animation: boolean; deprecated 'use Viewport.Camera.Animation';

This item is declared in ancestor TCastleNavigation.

Warning: this symbol is deprecated: use Viewport.Camera.Animation

This item has no description.

Source: transform/castlecameras.pas (line 288).

Public function InternalUsingMouseLook: Boolean;

This item is declared in ancestor TCastleMouseLookNavigation.

This item has no description.

Source: transform/castlecameras.pas (line 686).

Protected function ReallyEnableMouseDragging: boolean; override;

This item has no description. Showing description inherited from TCastleNavigation.ReallyEnableMouseDragging.

Can we use mouse dragging. Checks UsingInput and so Valid already.

Source: transform/castlecameras.pas (line 873).

Protected procedure ProcessMouseLookDelta(const Delta: TVector2); override;

This item has no description.

Source: transform/castlecameras.pas (line 874).

Protected function MoveAllowed( const OldPos: TVector3; ProposedNewPos: TVector3; out NewPos: TVector3; const BecauseOfGravity, CheckClimbHeight: Boolean): Boolean; override;

This item has no description. Showing description inherited from TCastleNavigation.MoveAllowed.

Check collisions to determine can the object move. Object wants to move from OldPos to ProposedNewPos (in world coordinates).

Returns False if no move is allowed. Otherwise returns True and sets NewPos to the position where user should be moved.

If you're doing a simple check for collisions, you will always want to set NewPos to ProposedNewPos when returning True.

But you can also do more sophisticated calculations and sometimes not allow user to move to ProposedNewPos, but allow him to move instead to some other close position. For example when doing "wall sliding" (common in FPS games): when you're trying to walk "into the wall", you move along the wall instead.

It's allowed to modify NewPos when returning False. It makes no effect.

BecauseOfGravity says whether this move is caused by gravity dragging the player down. You can use BecauseOfGravity e.g. to implement TCastleViewport.PreventInfiniteFallingDown.

Implementation calls OnMoveAllowed and checks collisions through parent TCastleViewport, if CheckCollisions.

Source: transform/castlecameras.pas (line 875).

Public constructor Create(AOwner: TComponent); override;

This item has no description.

Source: transform/castlecameras.pas (line 896).

Public destructor Destroy; override;

This item has no description.

Source: transform/castlecameras.pas (line 897).

Public function PropertySections(const PropertyName: String): TPropertySections; override;

This item has no description. Showing description inherited from TCastleComponent.PropertySections.

Section where to show property in the editor.

Source: transform/castlecameras.pas (line 898).

Public procedure Update(const SecondsPassed: Single; var HandleInput: boolean); override;

This item has no description. Showing description inherited from TCastleUserInterface.Update.

Control may do here anything that must be continuously repeated. E.g. camera handles here falling down due to gravity, rotating model in Examine mode, and many more.

This method may be used, among many other things, to continuously react to the fact that user pressed some key (or mouse button). For example, if holding some key should move some 3D object, you should do something like:

if HandleInput then
begin
  if Container.Pressed[keyArrowRight] then
  begin
    Transform.Position := Transform.Position + Vector3(SecondsPassed * 10, 0, 0);
    HandleInput := false;
  end;
end;

Instead of directly using a key code, consider also using TInputShortcut that makes the input key nicely configurable. See engine tutorial about handling inputs.

Multiplying movement by SecondsPassed makes your operation frame-rate independent. Object will move by 10 units in a second, regardless of how many FPS your game has.

The code related to HandleInput is important if you write a generally-useful control that should nicely cooperate with all other controls, even when placed on top of them or under them. The correct approach is to only look at pressed keys/mouse buttons if HandleInput is True. Moreover, if you did check that HandleInput is True, and you did actually handle some keys, then you have to set HandleInput := false. This will prevent the other controls (behind the current control) from handling the keys (they will get HandleInput = False). And this is important to avoid doubly-processing the same key press, e.g. if two controls react to the same key, only the one on top should process it.

Note that to handle a single press / release (like "switch light on when pressing a key") you should rather use Press and Release methods. Use this method only for continuous handling (like "holding this key makes the light brighter and brighter").

To understand why such HandleInput approach is needed, realize that the "Update" events are called differently than simple mouse and key events like "Press" and "Release". "Press" and "Release" events return whether the event was somehow "handled", and the container passes them only to the controls under the mouse (decided by TCastleUserInterface.CapturesEventsAtPosition). And as soon as some control says it "handled" the event, other controls (even if under the mouse) will not receive the event.

This approach is not suitable for Update events. Some controls need to do the Update job all the time, regardless of whether the control is under the mouse and regardless of what other controls already did. So all controls (well, all controls that exist, in case of TCastleUserInterface, see TCastleUserInterface.Exists) receive Update calls.

So the "handled" status is passed through HandleInput. If a control is not under the mouse, it will receive HandleInput = False. If a control is under the mouse, it will receive HandleInput = True as long as no other control on top of it didn't already change it to False.

Source: transform/castlecameras.pas (line 899).

Public function AllowSuspendForInput: boolean; override;

This item has no description. Showing description inherited from TCastleUserInterface.AllowSuspendForInput.

Allow window containing this control to suspend waiting for user input. Typically you want to override this to return False when you do something in the overridden Update method.

In this class, this simply returns always True.

Source: transform/castlecameras.pas (line 901).

Public function Press(const Event: TInputPressRelease): boolean; override;

This item has no description. Showing description inherited from TCastleUserInterface.Press.

Override this method to react to user pressing a key, mouse button or mouse wheel. Return True if the event was handled, which prevents from passing this event to other UI controls.

When implementing in descendants it is best to override it like this:

function TMyControl.Press(const Event: TInputPressRelease): boolean;
begin
  Result := inherited;
  if Result then Exit; // exit if ancestor already handled this event

  if Event.IsKey(keyEnter) then
  begin
    // do something in reaction to Enter key
    ...
    // let engine know that this input event was handled
    Exit(true);
  end;

  if Event.IsMouseButton(buttonLeft) then
  begin
    // do something in reaction to left mouse button press
    ...
    // let engine know that this input event was handled
    Exit(true);
  end;
end;

These events are generated for all UI controls, whether they are considered "interactive" or not. These events are generated for non-interactive controls like TCastleRectangleControl or TCastleLabel as well. For example, these events ignore the TCastleButton.Enabled state, they are generated always (see https://github.com/castle-engine/castle-engine/issues/413 ). Use instead TCastleButton.OnClick to detect clicks on a button in a way that honors the TCastleButton.Enabled state.

When a control returns True from Press, it means it starts to "capture" subsequent mouse events: subsequent mouse moves and release will be send to this control even if mouse will move outside of this control.

The events Press and Release are passed to the parent only after the children had a chance to process this event. Overriding them makes sense if you draw something that "looks clickable" in TCastleUserInterface.Render, which is the standard place you should draw stuff. For example our TCastleButton draws there.

In contrast, the events PreviewPress and PreviewRelease are passed first to the parent control, before children have a chance to process this event. In partcular, overriding them makes sense if you draw something that "looks clickable" in TCastleUserInterface.RenderOverChildren.

Source: transform/castlecameras.pas (line 902).

Public function SensorTranslation(const X, Y, Z, Length: Double; const SecondsPassed: Single): boolean; override;

This item has no description. Showing description inherited from TCastleUserInterface.SensorTranslation.

Translation detected by 3D sensor. Used for example by 3Dconnexion devices.

Source: transform/castlecameras.pas (line 903).

Public function SensorRotation(const X, Y, Z, Angle: Double; const SecondsPassed: Single): boolean; override;

This item has no description. Showing description inherited from TCastleUserInterface.SensorRotation.

Rotation detected by 3D sensor. Used for example by 3Dconnexion devices.

Source: transform/castlecameras.pas (line 904).

Public procedure Init(const AInitialPosition, AInitialDirection, AInitialUp: TVector3; const AGravityUp: TVector3; const APreferredHeight: Single; const ARadius: Single); overload; deprecated 'use Viewport.Camera.SetWorldView, and set GravityUp, PreferredHeight, Radius and call CorrectPreferredHeight manually';

Warning: this symbol is deprecated: use Viewport.Camera.SetWorldView, and set GravityUp, PreferredHeight, Radius and call CorrectPreferredHeight manually

Set the most important properties of this navigation, in one call. Sets camera properties (Translation, Direction, Up).

Given here AInitialDirection, AInitialUp, AGravityUp will be normalized, and AInitialUp will be adjusted to be orthogonal to AInitialDirection (see Camera.SetWorldView).

Sets also PreferredHeight and Radius. PreferredHeight may be adjusted to be sensible (by calling CorrectPreferredHeight(ARadius)). You can pass ARadius = 0.0 if you really don't want this PreferredHeight adjustment.

Source: transform/castlecameras.pas (line 993).

Public procedure Init(const box: TBox3D; const ARadius: Single); overload; deprecated 'use Viewport.Camera.SetWorldView, and set GravityUp, PreferredHeight, Radius and call CorrectPreferredHeight manually';

Warning: this symbol is deprecated: use Viewport.Camera.SetWorldView, and set GravityUp, PreferredHeight, Radius and call CorrectPreferredHeight manually

Alternative Init that sets camera properties such that an object inside Box is more or less "visible good". Sets InitialCameraXxx properties to make it look right, sets current CameraXxx properties to InitialCameraXxx. Sets GravityUp to the same thing as InitialUp. Sets also PreferredHeight to make it behave "sensibly".

Source: transform/castlecameras.pas (line 1006).

Public function DirectionInGravityPlane: TVector3; deprecated 'avoid using it, as it inherently has difficult cases: it is in TCastleCamera local coordinate space, it cannot be correct when Direction is parallel to gravity';

Warning: this symbol is deprecated: avoid using it, as it inherently has difficult cases: it is in TCastleCamera local coordinate space, it cannot be correct when Direction is parallel to gravity

This item has no description.

Source: transform/castlecameras.pas (line 1026).

Public function Motion(const Event: TInputMotion): boolean; override;

This item has no description. Showing description inherited from TCastleUserInterface.Motion.

Motion of mouse or touch.

Source: transform/castlecameras.pas (line 1028).

Public procedure CancelFalling;

If Falling, then this will force Falling to false without calling OnFallenDown. It's much like forcing the opinion that "camera is not falling down right now".

Note that if we will find out (e.g. in nearest Update) that camera is still too high above the ground, then we will start falling down again, setting Falling back to true. (but then we will start falling down from the beginning with initial falling down speed).

This is useful to call if you just changed Camera.Translation because e.g. the player teleported somewhere (or e.g. game levels changed). In this case you just want to forget the fact that camera was falling down — no consequences (like lowering player's health, fadeout etc.).

Source: transform/castlecameras.pas (line 1075).

Public function MaxJumpDistance: Single;

Returns just JumpMaxHeight * PreferredHeight, see JumpMaxHeight for explanation.

Source: transform/castlecameras.pas (line 1091).

Public function RealPreferredHeight: Single;

The PreferredHeight slightly modified by head bobbing and crouch. It can be useful for collision detection between camera and something.

Source: transform/castlecameras.pas (line 1102).

Public procedure FallOnTheGround;

This makes a visual effect of camera falling down horizontally on the ground. Nice to use when player died, and you want to show that it's body falled on the ground. This works by gradually changing Camera.Up such that it gets orthogonal to GravityUp.

Source: transform/castlecameras.pas (line 1109).

Public procedure UpPrefer(const AUp: TVector3); deprecated 'use Viewport.Camera.UpPrefer';

Warning: this symbol is deprecated: use Viewport.Camera.UpPrefer

Change up vector, keeping the direction unchanged. If necessary, the up vector provided here will be fixed to be orthogonal to direction. See TCastleTransform.UpPrefer for detailed documentation what this does.

Source: transform/castlecameras.pas (line 1137).

Public procedure CorrectPreferredHeight;

Correct PreferredHeight based on Radius and on current HeadBobbing.

Exactly what and why is done: if you do any kind of collision detection with some Radius, then you should make sure that RealPreferredHeight is always >= of your Radius, otherwise strange effects may happen when crouching or when head bobbing forces camera to go down.

Exactly, the required equation is

MinimumRealPreferredHeight :=
  PreferredHeight * CrouchHeight * (1 - HeadBobbing);

and always must be

MinimumRealPreferredHeight >= RealPreferredHeight

Reasoning: otherwise this class would "want camera to fall down" (because we will always be higher than RealPreferredHeight) but your OnMoveAllowed would not allow it (because Radius would not allow it).

This method will make sure that this condition holds by eventually adjusting (making larger) PreferredHeight. Note that for Radius = 0.0 this will always leave PreferredHeight as it is.

Source: transform/castlecameras.pas (line 1237).

Public procedure UseGameController(const ControllerIndex: Integer = -1);

Accept game controller (joystick, gamepad) events to control this navigation. This enhances TInputShortcut.Bindings of some inputs, to react to game controller events. The layout follows typical game controller layout for 3D games:

  • Left Stick: move forward/backward, strafe left/right

  • Left Stick Click: Run

  • Right Stick: rotate camera horizontally/vertically

  • A: jump

  • B: crouch

Note: Calling this many times on the same navigation is not recommended, as we don't clear previous bindings. If you need to adjust the bindings, we recommend you just look at the simple implementation of this method, copy it to your code, and adjust to your needs.

Parameters
ControllerIndex
Which controller to configure. Leave at -1 (default) to accept input from any controller.

Source: transform/castlecameras.pas (line 1260).

Properties

Public property NonVisualComponents [const Index: Integer]: TComponent read GetNonVisualComponents;

This item is declared in ancestor TCastleComponent.

Components added by AddNonVisualComponent.

Source: base/castleclassutils.pas (line 698).

Public property IsLoading: Boolean read FIsLoading;

This item is declared in ancestor TCastleComponent.

Is the component during deserialization now.

Note: We can't use csLoading in ComponentState because in Delphi it is not possible to control it from CastleComponentSerialize.

Source: base/castleclassutils.pas (line 711).

Public property OnVisibleChange: TCastleUserInterfaceChangeEvent read FOnVisibleChange write FOnVisibleChange;

This item is declared in ancestor TCastleUserInterface.

Called always when something important inside this control (or it's children) changed. See VisibleChange for details about when and how this is called.

Be careful when handling this event. Various changes may cause this, so be prepared to handle it at any moment, even in the middle when UI control is changing. It may also occur very often. It's usually safest to only set a boolean flag like "something should be recalculated" when this event happens, and do the actual recalculation later.

Source: ui/castleuicontrols_userinterface.inc (line 524).

Public property Container: TCastleContainer read FContainer;

This item is declared in ancestor TCastleUserInterface.

Container of this control. When adding control to container's Controls list (like TCastleWindow.Controls) container will automatically set itself here, and when removing from container this will be changed back to Nil.

May be Nil if this control is not yet inserted into any container.

Source: ui/castleuicontrols_userinterface.inc (line 564).

Public property OnCursorChange: TNotifyEvent read FOnCursorChange write FOnCursorChange; deprecated 'use OnVisibleChange (or override VisibleChange) and watch for Changes that include chCursor';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use OnVisibleChange (or override VisibleChange) and watch for Changes that include chCursor

Event called when the Cursor property changes. This event is, in normal circumstances, used by the Container, so you should not use it in your own programs.

Source: ui/castleuicontrols_userinterface.inc (line 570).

Public property ExclusiveEvents: boolean read FExclusiveEvents write FExclusiveEvents default true; deprecated 'do not use this; supporting this property was complicated and had no real benefit; everything now works as if ExclusiveEvents=true, always';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: do not use this; supporting this property was complicated and had no real benefit; everything now works as if ExclusiveEvents=true, always

Should we disable further mouse / keys handling for events that we already handled in this control. If True, then our events will return True for mouse and key events handled.

This means that events will not be simultaneously handled by both this control and some other (or camera or normal window callbacks), which is usually more sensible, but sometimes somewhat limiting.

Source: ui/castleuicontrols_userinterface.inc (line 582).

Public property Controls [const Index: Integer]: TCastleUserInterface read GetControls write SetControls;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 586).

Public property GetExists: Boolean read FExists; deprecated 'use Exists';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use Exists

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 649).

Public property GLInitialized: boolean read FGLInitialized default false;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 769).

Public property Focused: boolean read FFocused write SetFocused;

This item is declared in ancestor TCastleUserInterface.

See SetFocused.

Source: ui/castleuicontrols_userinterface.inc (line 816).

Public property Parent: TCastleUserInterface read FParent ;

This item is declared in ancestor TCastleUserInterface.

Visual parent control. This control is rendered within the parent, and it's anchors and coordinates are relative to the parent. Parent may be Nil, which means that the Container (if set) is our direct parent.

Note that this property doesn't have a setter, as it could be confusing: the order in which children are inserted into parent sometimes matters, for back-and-front order. If you want to change the parent, you can use code like this:

if Control.Parent <> nil then
  Control.Parent.RemoveControl(Control);
if NewParent <> nil then
  NewParent.InsertFront(Control); // or InsertBack, as InsertControl...

Source: ui/castleuicontrols_userinterface.inc (line 834).

Public property FloatWidth: Single read FWidth write SetWidth stored false; deprecated 'use Width';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use Width

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 1152).

Public property FloatHeight: Single read FHeight write SetHeight stored false; deprecated 'use Height';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use Height

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 1154).

Public property AnchorDelta: TVector2 read FTranslation write SetTranslation; deprecated 'use Translation';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use Translation

Position of the control, relative to the anchor at parent (by default, relative to left-bottom corner of the parent).

Source: ui/castleuicontrols_userinterface.inc (line 1160).

Public property Translation: TVector2 read FTranslation write SetTranslation;

This item is declared in ancestor TCastleUserInterface.

Position of the control, relative to the anchor at parent (by default, relative to left-bottom corner of the parent).

Source: ui/castleuicontrols_userinterface.inc (line 1165).

Public property KeepInFront: boolean read FKeepInFront write FKeepInFront default false;

This item is declared in ancestor TCastleUserInterface.

Keep the control in front of other controls (with KeepInFront=False) when inserting.

TODO: Do not change this property while the control is already a child of something.

Source: ui/castleuicontrols_userinterface.inc (line 1172).

Public property BorderColor: TCastleColor read FBorderColor write SetBorderColor;

This item is declared in ancestor TCastleUserInterface.

Color of the Border, by default completely transparent black.

Source: ui/castleuicontrols_userinterface.inc (line 1176).

Public property HasHorizontalAnchor: boolean read FHasHorizontalAnchor write FHasHorizontalAnchor stored false; deprecated 'this property does not do anything anymore, anchors are always active';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: this property does not do anything anymore, anchors are always active

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 1179).

Public property HasVerticalAnchor: boolean read FHasVerticalAnchor write FHasVerticalAnchor stored false; deprecated 'this property does not do anything anymore, anchors are always active';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: this property does not do anything anymore, anchors are always active

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 1182).

Public property HorizontalAnchorDelta: Single read GetHorizontalAnchorDelta write SetHorizontalAnchorDelta default 0; deprecated 'use Translation.X';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use Translation.X

Delta between our border and parent.

See also
Anchor
Adjust position to align us to the parent vertically.

Source: ui/castleuicontrols_userinterface.inc (line 1189).

Public property VerticalAnchorDelta: Single read GetVerticalAnchorDelta write SetVerticalAnchorDelta default 0; deprecated 'use Translation.Y';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use Translation.Y

Delta between our border and parent.

See also
Anchor
Adjust position to align us to the parent vertically.

Source: ui/castleuicontrols_userinterface.inc (line 1194).

Public property Visible: Boolean read FVisible;

This item is declared in ancestor TCastleUserInterface.

Is the control possibly visible. This is always True when Culling is False (the default).

Source: ui/castleuicontrols_userinterface.inc (line 1200).

Public property EnableUIScaling: boolean read FEnableUIScaling write SetEnableUIScaling default true;

This item is declared in ancestor TCastleUserInterface.

Enable or disable UI scaling for this particular control. See more about UI scaling on TCastleContainer.UIScaling and TCastleUserInterface.UIScale. Setting this to False forces TCastleUserInterface.UIScale to always return 1.0.

Note that this does not work recursively, i.e. it does not affect the children of this control. Setting this to False does not prevent UI scaling on children (you have to turn it off explicitly for children too, if you need to disable UI scaling recursively).

The use-cases for changing this property to "false" are very rare. Usually you should use UI scaling for 100% of your UI.

Source: ui/castleuicontrols_userinterface.inc (line 1214).

Public property CapturesEvents: boolean read FCapturesEvents write FCapturesEvents default true;

This item is declared in ancestor TCastleUserInterface.

Capture input events (keyboard, mouse, joystick). If False, then the methods like Press and Release will never be called, and Update will always be called with HandleInput = False. The control will never behave like focused.

The only exception is when this control is set as TCastleContainer.ForceCaptureInput. In this case, the control will receive inputs. In other words, TCastleContainer.ForceCaptureInput overrides the intent of this property.

This property may be replaced by something like "CaptureInput" or just universal "Enabled" in the future.

Source: ui/castleuicontrols_userinterface.inc (line 1229).

Public property OnInternalMouseEnter: TUiNotifyEvent read FOnInternalMouseEnter write FOnInternalMouseEnter;

This item is declared in ancestor TCastleUserInterface.

Called when control starts being under the mouse cursor and will receive events. See SetFocused, this is called when Focused changes from False to True.

This is called "Internal" now, because we do not guarantee it's 100% always paired with OnInternalMouseLeave. A different approach to this may be done in the future releases.

Source: ui/castleuicontrols_userinterface.inc (line 1238).

Public property OnInternalMouseLeave: TUiNotifyEvent read FOnInternalMouseLeave write FOnInternalMouseLeave;

This item is declared in ancestor TCastleUserInterface.

Called when control stops being under the mouse cursor and will receive events. See SetFocused, this is called when Focused changes from True to False.

This is called "Internal" now, because we do not guarantee it's 100% always paired with OnInternalMouseEnter. A different approach to this may be done in the future releases.

Source: ui/castleuicontrols_userinterface.inc (line 1247).

Published property Cursor: TMouseCursor read FCursor write SetCursor default mcDefault;

This item is declared in ancestor TCastleUserInterface.

Mouse cursor over this control. When user moves mouse over the Container, the currently focused (topmost under the cursor) control determines the mouse cursor look.

Source: ui/castleuicontrols_userinterface.inc (line 1263).

Published property OnUpdate: TUiUpdateEvent read FOnUpdate write FOnUpdate;

This item is declared in ancestor TCastleUserInterface.

Event that occurs continuously on each control. See Update for details.

Source: ui/castleuicontrols_userinterface.inc (line 1267).

Published property OnPress: TUiPressReleaseEvent read FOnPress write FOnPress;

This item is declared in ancestor TCastleUserInterface.

An input (key, mouse button, mouse wheel) was pressed. See Press for details.

Source: ui/castleuicontrols_userinterface.inc (line 1271).

Published property OnRelease: TUiPressReleaseEvent read FOnRelease write FOnRelease;

This item is declared in ancestor TCastleUserInterface.

An input (key, mouse button, mouse wheel) was released. See Release for details.

Source: ui/castleuicontrols_userinterface.inc (line 1275).

Published property OnMotion: TUiMotionEvent read FOnMotion write FOnMotion;

This item is declared in ancestor TCastleUserInterface.

Pointer (mouse or finger) moved. See Motion for details.

Source: ui/castleuicontrols_userinterface.inc (line 1279).

Published property OnRender: TUiNotifyEvent read FOnRender write FOnRender;

This item is declared in ancestor TCastleUserInterface.

Control is being displayed. See Render for details. This event it called after the Render method of this control finished but before we started rendering children.

Source: ui/castleuicontrols_userinterface.inc (line 1285).

Published property Exists: boolean read FExists write SetExists default true;

This item is declared in ancestor TCastleUserInterface.

Not existing control is not visible, it doesn't receive input and generally doesn't exist from the point of view of user. This is mostly equivalent to just removing this control from parent list.

Non-existing controls still receive GLContextOpen, GLContextClose, Resize events.

Source: ui/castleuicontrols_userinterface.inc (line 1293).

Published property Left: Single read FLeft write SetLeft stored false default 0; deprecated 'use Translation.X';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use Translation.X

Position from the left side of the parent control.

It's usually better to use anchors instead of this property. For example, instead of setting Control.Left := 10, you can call Control.Anchor(hpLeft, 10), or just change Translation.X.

Note that the effects of this property and Translation.X are summed, if you set both. We advise to leave Left as zero and just use anchors in new code.

Source: ui/castleuicontrols_userinterface.inc (line 1305).

Published property Bottom: Single read FBottom write SetBottom default 0; deprecated 'use Translation.Y';

This item is declared in ancestor TCastleUserInterface.

Warning: this symbol is deprecated: use Translation.Y

Position from the bottom side of the parent control.

It's usually better to use anchors instead of this property. For example, instead of setting Control.Bottom := 10, you can call Control.Anchor(vpBottom, 10), or just change Translation.Y.

Note that the effects of this property and Translation.Y are summed, if you set both. We advise to leave Bottom as zero and just use anchors in new code.

Source: ui/castleuicontrols_userinterface.inc (line 1318).

Published property Width: Single read FWidth write SetWidth default DefaultWidth;

This item is declared in ancestor TCastleUserInterface.

These properties determine the control size. See the EffectiveRect documentation for details how the size is calculated.

See also
TCastleUserInterface.EffectiveRect
Control position and size.
TCastleUserInterface.EffectiveWidth
Calculated width of the control, without UI scaling.
TCastleUserInterface.EffectiveHeight
Calculated height of the control, without UI scaling.

Source: ui/castleuicontrols_userinterface.inc (line 1335).

Published property Height: Single read FHeight write SetHeight default DefaultHeight;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 1336).

Published property WidthFraction: Single read FWidthFraction write SetWidthFraction default 0.0;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 1337).

Published property HeightFraction: Single read FHeightFraction write SetHeightFraction default 0.0;

This item is declared in ancestor TCastleUserInterface.

This item has no description.

Source: ui/castleuicontrols_userinterface.inc (line 1338).

Published property AutoSizeToChildren: Boolean read FAutoSizeToChildren write SetAutoSizeToChildren default false;

This item is declared in ancestor TCastleUserInterface.

Adjust size to encompass all the children. The properties FullSize, Width, Height are ignored in this case. Our Left and Bottom still matter.

Our size is adjusted to all existing children sizes and positions.

We add AutoSizeToChildrenPaddingTop to the resulting height, and AutoSizeToChildrenPaddingRight to the resulting width.

Source: ui/castleuicontrols_userinterface.inc (line 1351).

Published property AutoSizeToChildrenPaddingRight: Single read FAutoSizeToChildrenPaddingRight write SetAutoSizeToChildrenPaddingRight default 0;

This item is declared in ancestor TCastleUserInterface.

Padding added when AutoSizeToChildren is used. TODO: Should be AutoSizeToChildrenPaddingHorizontal, there's nothing that makes it specific to "right" or "left" side now.

Source: ui/castleuicontrols_userinterface.inc (line 1357).

Published property AutoSizeToChildrenPaddingTop: Single read FAutoSizeToChildrenPaddingTop write SetAutoSizeToChildrenPaddingTop default 0;

This item is declared in ancestor TCastleUserInterface.

Padding added when AutoSizeToChildren is used. TODO: Should be AutoSizeToChildrenPaddingVertical, there's nothing that makes it specific to "top" or "bottom" side now.

Source: ui/castleuicontrols_userinterface.inc (line 1363).

Published property HorizontalAnchorSelf: THorizontalPosition read FHorizontalAnchorSelf write SetHorizontalAnchorSelf default hpLeft;

This item is declared in ancestor TCastleUserInterface.

Which our border to align with parent.

See also
Anchor
Adjust position to align us to the parent vertically.

Source: ui/castleuicontrols_userinterface.inc (line 1369).

Published property HorizontalAnchorParent: THorizontalPosition read FHorizontalAnchorParent write SetHorizontalAnchorParent default hpLeft;

This item is declared in ancestor TCastleUserInterface.

Which parent border is aligned to our HorizontalAnchorSelf border.

See also
Anchor
Adjust position to align us to the parent vertically.

Source: ui/castleuicontrols_userinterface.inc (line 1373).

Published property VerticalAnchorSelf: TVerticalPosition read FVerticalAnchorSelf write SetVerticalAnchorSelf default vpBottom;

This item is declared in ancestor TCastleUserInterface.

Which our border to align with parent.

See also
Anchor
Adjust position to align us to the parent vertically.

Source: ui/castleuicontrols_userinterface.inc (line 1378).

Published property VerticalAnchorParent: TVerticalPosition read FVerticalAnchorParent write SetVerticalAnchorParent default vpBottom;

This item is declared in ancestor TCastleUserInterface.

Which parent border is aligned to our VerticalAnchorSelf border.

See also
Anchor
Adjust position to align us to the parent vertically.

Source: ui/castleuicontrols_userinterface.inc (line 1382).

Published property Culling: Boolean read FCulling write SetCulling default false;

This item is declared in ancestor TCastleUserInterface.

Optimize rendering and event processing by checking whether the control can be visible. The visibility is checked by looking at container rectangle, and all possible clipping parents (set by TCastleScrollView, or any other control with ClipChildren).

This is useful for UI controls that have expensive rendering or other events (e.g. they do something non-trivial in Render or RenderOverChildren, or they include a lot of children controls). And they may be placed off-screen, or they may be outside of a parent with clipping, which is often the case when the parent is TCastleScrollView.

Source: ui/castleuicontrols_userinterface.inc (line 1398).

Published property ClipChildren: Boolean read FClipChildren write SetClipChildren default false;

This item is declared in ancestor TCastleUserInterface.

Clip the rendering of children.

By default this is False and so the control can draw outside of it's designated rectangle (RenderRect). Although all the standard UI controls are carefully implemented such that their Render and RenderOverChildren draw only within their RenderRect. But it is easy to place children controls outside of this rectangle.

When this property is True, the rendering is clipped, so the "overflowing" parts are never visible. This affects both Render and RenderOverChildren of this control, as well as all children rendering.

Source: ui/castleuicontrols_userinterface.inc (line 1413).

Published property Border: TBorder read FBorder;

This item is declared in ancestor TCastleUserInterface.

Border (by default transparent) of the control. Border adds a space from the control content (drawn within RenderRect) to the control rectangle (returned by RenderRectWithBorder) (scaled), or EffectiveRect (unscaled) and friends).

It is transparent by default, but you can change it by BorderColor.

Border works always, regardless of FullSize or AutoSizeToChildren.

One obvious use-case is to use this for visual space (empty space or a colorful frame, separating this control from the rest).

Another use-case is to reserve a predictable space for as additional (sibling) control within the same parent. E.g. you can set FullSize=true and Border.Top=100, and this way there is always a strip with Height=100 at the top of the parent, where you can insert another control (with Height=100, anchored to the top).

Source: ui/castleuicontrols_userinterface.inc (line 1434).

Published property CustomTheme: TCastleTheme read FCustomTheme write SetCustomTheme;

This item is declared in ancestor TCastleUserInterface.

Use a custom instance of TCastleTheme to determine the look of this control.

Source: ui/castleuicontrols_userinterface.inc (line 1437).

Published property TooltipControl: TCastleUserInterface read FTooltipControl write SetTooltipControl;

This item is declared in ancestor TCastleUserInterface.

If set, the indicated control will act as a tooltip: we will make it existing when we should show the tooltip for this control, we will make it no longer existing when the tooltip for this should be hidden. Initially the TooltipControl should usually have Exists=false, because you usually do not want to show it until we start showing it as a tooltip.

If TooltipControl is assigned then TCastleUserInterfaceFont no longer does tooltip rendering. The TCastleUserInterfaceFont.Tooltip text is ignored.

The visual parent of TooltipControl can be whatever is comfortable. That is, it is OK to make TooltipControl parent of this control, and it is OK not to: you can as well place TooltipControl as e.g. parent of container or design root.

Source: ui/castleuicontrols_userinterface.inc (line 1453).

Published property BorderColorPersistent: TCastleColorPersistent read FBorderColorPersistent ;

This item is declared in ancestor TCastleUserInterface.

BorderColor that can be visually edited in Castle Game Engine Editor, Lazarus and Delphi. Normal user code does not need to deal with this, instead read or write BorderColor directly.

See also
BorderColor
Color of the Border, by default completely transparent black.

Source: ui/auto_generated_persistent_vectors/tcastleuserinterface_persistent_vectors.inc (line 37).

Published property TranslationPersistent: TCastleVector2Persistent read FTranslationPersistent ;

This item is declared in ancestor TCastleUserInterface.

Translation that can be visually edited in Castle Game Engine Editor, Lazarus and Delphi. Normal user code does not need to deal with this, instead read or write Translation directly.

See also
Translation
Position of the control, relative to the anchor at parent (by default, relative to left-bottom corner of the parent).

Source: ui/auto_generated_persistent_vectors/tcastleuserinterface_persistent_vectors.inc (line 105).

Public property OnMoveAllowed: TMoveAllowedFunc read FOnMoveAllowed write FOnMoveAllowed;

This item is declared in ancestor TCastleNavigation.

Used by MoveAllowed, see there for description. You can assign this property.

Source: transform/castlecameras.pas (line 236).

Public property OnFall: TFallNotifyFunc read FOnFall write FOnFall;

This item is declared in ancestor TCastleNavigation.

Notification that we have been falling down for some time due to gravity, and suddenly stopped (which means we "hit the ground").

This event can be useful in games, for example to lower player's health, and/or make a visual effect (like a "red out" indicating pain) and/or make a sound effect ("Ouch!" or "Thud!" or such sounds). You can look at FallHeight parameter, given to the callback, e.g. to gauge how much health decreases.

Source: transform/castlecameras.pas (line 246).

Public property IgnoreAllInputs: boolean read GetIgnoreAllInputs write SetIgnoreAllInputs default false; deprecated;

This item is declared in ancestor TCastleNavigation.

Warning: this symbol is deprecated.

Deprecated, use more flexible Input instead. IgnoreAllInputs := true is equivalent to Input := [], IgnoreAllInputs := false is equivalent to Input := DefaultInput.

Source: transform/castlecameras.pas (line 258).

Public property ModelBox: TBox3D read FModelBox write FModelBox;

This item is declared in ancestor TCastleNavigation.

Approximate size of the world that is viewed. Determines the speed of zooming and (in case of TCastleExamineNavigation) of many other operations too. Initially this is an empty box. Internally we will use the Viewport.Items.BoundingBox if this is empty.

Source: transform/castlecameras.pas (line 294).

Public property Input: TNavigationInputs read FInput write FInput default DefaultInput;

This item is declared in ancestor TCastleNavigation.

Input methods available to user. See documentation of TNavigationInput type for possible values and their meaning.

To disable any user interaction with this navigation you can simply set this to empty.

Source: transform/castlecameras.pas (line 301).

Public property Input_ZoomIn: TInputShortcut read FInput_ZoomIn;

This item is declared in ancestor TCastleNavigation.

Bring camera closer to the model. Works only if ZoomEnabled. By deafult mwUp (mouse wheel up).

Source: transform/castlecameras.pas (line 305).

Public property Input_ZoomOut: TInputShortcut read FInput_ZoomOut;

This item is declared in ancestor TCastleNavigation.

Bring camera further from the model. Works only if ZoomEnabled. By deafult mwDown (mouse wheel down).

Source: transform/castlecameras.pas (line 309).

Published property FullSize default true;

This item is declared in ancestor TCastleNavigation.

By default this captures events from whole parent, which should be whole Viewport.

Source: transform/castlecameras.pas (line 312).

Published property EditorSelectOnHover default false;

This item is declared in ancestor TCastleNavigation.

By default false, as this is invisible and would obscure viewport.

Source: transform/castlecameras.pas (line 315).

Published property ZoomEnabled: Boolean read FZoomEnabled write FZoomEnabled default false;

This item is declared in ancestor TCastleNavigation.

Enable zooming in / out. Depending on the projection, zooming either moves camera or scales the projection size. When False, no keys / mouse dragging / 3d mouse etc. can make a zoom. If True, at least mouse wheel makes a zoom (som,e navigation methods may have additional ways to make zoom, they will all honor this property.)

Source: transform/castlecameras.pas (line 323).

Published property CheckCollisions: Boolean read FCheckCollisions write FCheckCollisions default true;

This item is declared in ancestor TCastleNavigation.

Check collisions when moving with the environment.

Note: some descendants may ignore it for some operations. Right now, TCastleWalkNavigation checks is always, but TCastleExamineNavigation checks it only at zooming. But future engine versions may harden the collision checks (to make them always), so be sure to set CheckCollisions appropriately.

Source: transform/castlecameras.pas (line 332).

Public property PreferGravityUpForRotations: boolean read FPreferGravityUpForRotations write FPreferGravityUpForRotations default true;

If PreferGravityUpForRotations or PreferGravityUpForMoving then various operations are done with respect to GravityUp, otherwise they are done with respect to current Camera.Up.

With PreferGravityUpForRotations, this affects rotations: horizontal rotations (Input_LeftRotate and Input_RightRotate) and rotations caused by MouseLook. Also vertical rotations are bounded by MinAngleFromGravityUp when PreferGravityUpForRotations.

Note that you can change it freely at runtime, and when you set PreferGravityUpForRotations from False to True then in nearest Update the Camera.Up will be gradually fixed, so that Camera.Direction and Camera.Up and GravityUp are on the same plane. Also Camera.Direction may be adjusted to honour MinAngleFromGravityUp.

With PreferGravityUpForMoving, this affects moving: horizontal moving (forward, backward, strafe), and vertical moving (Input_Jump and Input_Crouch when Gravity is False). E.g. when PreferGravityUpForMoving then forward/backward keys are tied to horizontal plane defined by GravityUp. When not PreferGravityUpForMoving then forward/backward try to move you just in the Camera.Direction. Which is usually more handy when e.g. simulating flying.

  • When there is no "natural" up-or-down feeling in the scene, e.g. outer space environment without any gravity, then you may set PreferGravityUpForRotations as False and you should leave PreferGravityUpForMoving and Gravity to False.

  • With PreferGravityUpForRotations the "feeling" of GravityUp is stronger. Raising/bowing the head doesn't mess with "the general sense that there's some vertical axis independent of my movement, that doesn't change, and affects how I move".

    Without PreferGravityUpForRotations, we quickly start to do rotations in an awkward way — once you do some vertical rotation, you changed Camera.Up, and next horizontal rotation will be done versus new Camera.Up.

    If your GravityUp is good, then you generally should leave PreferGravityUpForRotations to True. Unless you really want the player to feel movements as "awkward", e.g. when you want to simulate this "outer space without any gravity" feeling.

  • If your GravityUp is good, then you generally should set PreferGravityUpForMoving just like Gravity.

    E.g. when the player is flying / swimming etc. he will probably prefer PreferGravityUpForMoving = False, because this way he will not have to press Input_Jump and Input_Crouch. Simply pressing Input_Forward and Input_Backward and doing rotations will be enough to move freely in 3D space.

    When gravity works, PreferGravityUpForMoving = True is better, otherwise player would unnecessarily try to jump when looking up.

Source: transform/castlecameras.pas (line 974).

Public property PreferGravityUpForMoving: boolean read FPreferGravityUpForMoving write FPreferGravityUpForMoving default true;

This item has no description.

Source: transform/castlecameras.pas (line 977).

Public property MinAngleFromGravityUp: Single read FMinAngleFromGravityUp write FMinAngleFromGravityUp default DefaultMinAngleFromGravityUp;

This sets the minimal angle (in radians) between GravityUp and Camera.Direction, and also between -GravityUp and Camera.Direction. This way vertical rotations (like Input_UpRotate, Input_DownRotate) are "bounded" to not allow player to do something strange, i.e. bow your head too much and raise your head too much.

This is used only when PreferGravityUpForRotations is True and when it's <> 0.0.

This must be always between 0 and Pi/2. Value of Pi/2 will effectively disallow vertical rotations (although you should rather do this in a "cleaner way" by calling MakeClear on Input_UpRotate and Input_DownRotate).

Source: transform/castlecameras.pas (line 1022).

Public property FallSpeedStart: Single read FFallSpeedStart write FFallSpeedStart default DefaultFallSpeedStart;

Initial speed of falling down. Of course this is used only when Gravity is true.

Note that while falling down, the camera will actually fall with greater and greated speed (this adds more realism to the gravity effect...). Note that this is always relative to Camera.Direction length. Camera.Direction determines moving speed — and so it determines also falling speed. The default DefaultFallSpeedStart is chosen to be something sensible, to usually get nice effect of falling.

You can change it at any time, but note that if you change this while Falling is True, then you will not change the "current falling down speed". You will change only the falling down speed used the next time.

Source: transform/castlecameras.pas (line 1046).

Public property FallSpeedIncrease: Single read FFallSpeedIncrease write FFallSpeedIncrease default DefaultFallSpeedIncrease;

When falling down, the speed increases. Set this to 1.0 to fall down with constant speed (taken from FallSpeedStart).

Source: transform/castlecameras.pas (line 1053).

Public property Falling: boolean read FFalling write FFalling;

Are we currently falling down because of gravity.

Source: transform/castlecameras.pas (line 1058).

Public property FallingEffect: boolean read FFallingEffect write FFallingEffect default true;

Make a nice dizzying camera effect when falling down. This adds temporary camera rotations simulating that you rotate randomly and helplessly when falling down.

Of course this is meaningfull only when Gravity works.

Note that changing it from True to False doesn't immediately "cancel out" this effect if it's currently in progress. It only prevents this effect from starting again.

Source: transform/castlecameras.pas (line 1086).

Public property IsJumping: boolean read FIsJumping;

We are in the middle of a "jump" move right now.

Source: transform/castlecameras.pas (line 1094).

Public property IsCrouching: boolean read FIsCrouching;

Is player crouching right now.

Source: transform/castlecameras.pas (line 1097).

Public property FallingOnTheGround: boolean read FFallingOnTheGround;

True when the effect caused by FallOnTheGround is stil in motion.

Source: transform/castlecameras.pas (line 1112).

Public property IsOnTheGround: boolean read FIsOnTheGround;

This is True when gravity works (that is Gravity is True), and player is standing stable on the ground. This is set in every Update.

You can use this e.g. to make some effects when player is on some special ground (standing or walking), e.g. hurt player when he's standing on some toxical ground.

See also
IsWalkingOnTheGround
This is True when gravity works (that is Gravity is True), and player is standing stable on the ground, and player is moving horizontally.

Source: transform/castlecameras.pas (line 1122).

Public property IsWalkingOnTheGround: boolean read FIsWalkingOnTheGround;

This is True when gravity works (that is Gravity is True), and player is standing stable on the ground, and player is moving horizontally. In other words, this is like "IsOnTheGround and (s)he's walking". This is set in every Update.

The intention is that you can use this to make some "footsteps" sound for the player.

Source: transform/castlecameras.pas (line 1131).

Public property IsAbove: boolean read FIsAbove;

Last known information about whether camera is over the ground.

These are updated continuously only when Gravity is True.

We do not (and, currently, cannot) track here if AboveGround pointer will be eventually released (which may happen if you release your 3D scene, or rebuild scene causing octree rebuild). This is not a problem for navigation class, since we do not use this pointer for anything. But if you use this pointer, then you may want to take care to eventually set it to Nil when your octree or such is released.

AboveHeight is in world coordinates (not camera coordinates).

Source: transform/castlecameras.pas (line 1154).

Public property AboveHeight: Single read FAboveHeight;

This item has no description.

Source: transform/castlecameras.pas (line 1155).

Public property AboveGround: PTriangle read FAboveGround write FAboveGround;

This item has no description.

Source: transform/castlecameras.pas (line 1156).

Public property Input_Forward: TInputShortcut read FInput_Forward;

This item has no description.

Source: transform/castlecameras.pas (line 1162).

Public property Input_Backward: TInputShortcut read FInput_Backward;

This item has no description.

Source: transform/castlecameras.pas (line 1163).

Public property Input_LeftRotate: TInputShortcut read FInput_LeftRotate;

This item has no description.

Source: transform/castlecameras.pas (line 1164).

Public property Input_RightRotate: TInputShortcut read FInput_RightRotate;

This item has no description.

Source: transform/castlecameras.pas (line 1165).

Public property Input_LeftRot: TInputShortcut read FInput_LeftRotate; deprecated 'use Input_LeftRotate';

Warning: this symbol is deprecated: use Input_LeftRotate

This item has no description.

Source: transform/castlecameras.pas (line 1167).

Public property Input_RightRot: TInputShortcut read FInput_RightRotate; deprecated 'use Input_RightRotate';

Warning: this symbol is deprecated: use Input_RightRotate

This item has no description.

Source: transform/castlecameras.pas (line 1168).

Public property Input_LeftStrafe: TInputShortcut read FInput_LeftStrafe;

This item has no description.

Source: transform/castlecameras.pas (line 1170).

Public property Input_RightStrafe: TInputShortcut read FInput_RightStrafe;

This item has no description.

Source: transform/castlecameras.pas (line 1171).

Public property Input_UpRotate: TInputShortcut read FInput_UpRotate;

This item has no description.

Source: transform/castlecameras.pas (line 1172).

Public property Input_DownRotate: TInputShortcut read FInput_DownRotate;

This item has no description.

Source: transform/castlecameras.pas (line 1173).

Public property Input_IncreasePreferredHeight: TInputShortcut read FInput_IncreasePreferredHeight;

This item has no description.

Source: transform/castlecameras.pas (line 1174).

Public property Input_DecreasePreferredHeight: TInputShortcut read FInput_DecreasePreferredHeight;

This item has no description.

Source: transform/castlecameras.pas (line 1175).

Public property Input_GravityUp: TInputShortcut read FInput_GravityUp;

This item has no description.

Source: transform/castlecameras.pas (line 1176).

Public property Input_Run: TInputShortcut read FInput_Run;

This item has no description.

Source: transform/castlecameras.pas (line 1177).

Public property Input_MoveSpeedInc: TInputShortcut read FInput_MoveSpeedInc;

Change the MoveSpeed.

Source: transform/castlecameras.pas (line 1181).

Public property Input_MoveSpeedDec: TInputShortcut read FInput_MoveSpeedDec;

This item has no description.

Source: transform/castlecameras.pas (line 1182).

Public property Input_Jump: TInputShortcut read FInput_Jump;

Jumping and crouching (when Gravity = True) or flying up / down (when Gravity = False).

Source: transform/castlecameras.pas (line 1188).

Public property Input_Crouch: TInputShortcut read FInput_Crouch;

This item has no description.

Source: transform/castlecameras.pas (line 1189).

Public property MoveForward: boolean read FMoveForward write FMoveForward;

Move forward, just like Input_Forward would be pressed.

Source: transform/castlecameras.pas (line 1193).

Public property MoveBackward: boolean read FMoveBackward write FMoveBackward;

Move backward, just like Input_Backward would be pressed.

Source: transform/castlecameras.pas (line 1195).

Public property RotationHorizontalPivot: Single read FRotationHorizontalPivot write FRotationHorizontalPivot default 0; deprecated 'use TCastleThirdPersonNavigation for real 3rd-person navigation';

Warning: this symbol is deprecated: use TCastleThirdPersonNavigation for real 3rd-person navigation

Horizontal rotation can rotate around a vector that is RotationHorizontalPivot units forward before the camera. This is a poor-mans way to implement some 3rd camera game. Note that when non-zero this may (for now) move the camera without actually checking OnMoveAllowed.

Source: transform/castlecameras.pas (line 1201).

Published property MouseLook;

This item has no description. Showing description inherited from TCastleMouseLookNavigation.MouseLook.

Use mouse look to navigate (rotate the camera).

This also makes mouse cursor of Container hidden, and forces mouse position to the middle of the window (to avoid the situation when mouse movement is blocked by screen borders).

Setting this property at design-time (in CGE editor) does not activate the mouse look in CGE editor. It only controls the mouse look once the application is running.

Source: transform/castlecameras.pas (line 1262).

Published property MouseLookHorizontalSensitivity;

This item has no description. Showing description inherited from TCastleMouseLookNavigation.MouseLookHorizontalSensitivity.

Mouse look sensitivity, if MouseLook is working. These properties specify how much angle change is produced by moving mouse by 1 pixel.

Source: transform/castlecameras.pas (line 1263).

Published property MouseLookVerticalSensitivity;

This item has no description.

Source: transform/castlecameras.pas (line 1264).

Published property InvertVerticalMouseLook;

This item has no description. Showing description inherited from TCastleMouseLookNavigation.InvertVerticalMouseLook.

If this is True and MouseLook works, then the meaning of vertical mouse movement is inverted: when user moves mouse up, he looks down. Some players are more comfortable with such configuration.

Source: transform/castlecameras.pas (line 1265).

Published property Radius;

This item has no description. Showing description inherited from TCastleNavigation.Radius.

The radius of a sphere around the camera that makes collisions with the world.

  • Collision detection routines use this.

  • It determines the projection near plane (that must be slightly smaller than this radius), see also TCastleCamera.ProjectionNear.

  • Walk navigation uses this for automatically correcting PreferredHeight, otherwise weird things could happen if your avatar height is too small compared to the camera radius. See CorrectPreferredHeight.

    Especially useful if you let user change PreferredHeight at runtime by Input_IncreasePreferredHeight, Input_DecreasePreferredHeight.

Source: transform/castlecameras.pas (line 1266).

Published property RotationHorizontalSpeed: Single read FRotationHorizontalSpeed write FRotationHorizontalSpeed default DefaultRotationHorizontalSpeed;

Rotation keys speed, in radians per second.

Source: transform/castlecameras.pas (line 1270).

Published property RotationVerticalSpeed: Single read FRotationVerticalSpeed write FRotationVerticalSpeed default DefaultRotationVerticalSpeed;

This item has no description.

Source: transform/castlecameras.pas (line 1274).

Published property MoveHorizontalSpeed: Single read FMoveHorizontalSpeed write FMoveHorizontalSpeed default 1.0;

Moving speeds. MoveHorizontalSpeed is only for horizontal movement, MoveVerticalSpeed is only for vertical, and MoveSpeed simply affects both types of movement. Effectively, we always scale the speed of movement by either MoveHorizontalSpeed * MoveSpeed or MoveVerticalSpeed * MoveSpeed.

We move by distance MoveSpeed * MoveHorizontalSpeed (or MoveVerticalSpeed) during one second. So if you leave MoveHorizontalSpeed = MoveVerticalSpeed = 1 (as default), MoveSpeed expresses the speed in nice units / per second.

Default values for all these speed properties is 1.0, so you simply move by 1 unit per second.

Source: transform/castlecameras.pas (line 1295).

Published property MoveVerticalSpeed: Single read FMoveVerticalSpeed write FMoveVerticalSpeed default 1.0;

This item has no description.

Source: transform/castlecameras.pas (line 1297).

Published property MoveSpeed: Single read FMoveSpeed write FMoveSpeed default 1.0;

This item has no description.

Source: transform/castlecameras.pas (line 1299).

Published property MoveSpeedMin: Single read FMoveSpeedMin write FMoveSpeedMin default DefaultMoveSpeedMin;

Minimum and maximum values for possible MoveSpeed that user can make, using Input_MoveSpeedInc, Input_MoveSpeedInc. Note that code can still set MoveSpeed to any value, however small or large, these limits only apply to user changing speed by Input_MoveSpeedInc, Input_MoveSpeedInc.

Source: transform/castlecameras.pas (line 1307).

Published property MoveSpeedMax: Single read FMoveSpeedMax write FMoveSpeedMax default DefaultMoveSpeedMax;

This item has no description.

Source: transform/castlecameras.pas (line 1308).

Published property MouseDraggingHorizontalRotationSpeed: Single read FMouseDraggingHorizontalRotationSpeed write FMouseDraggingHorizontalRotationSpeed default DefaultMouseDraggingHorizontalRotationSpeed;

Speed (radians per pixel delta) of rotations by mouse dragging. Relevant only if niMouseDragging in Input and MouseDragMode is mdRotate or mdWalkRotate. Separate for horizontal and vertical, this way you can e.g. limit (or disable) vertical rotations, useful for games where you mostly look horizontally and accidentally looking up/down is more confusing than useful.

Source: transform/castlecameras.pas (line 1319).

Published property MouseDraggingVerticalRotationSpeed: Single read FMouseDraggingVerticalRotationSpeed write FMouseDraggingVerticalRotationSpeed default DefaultMouseDraggingVerticalRotationSpeed;

This item has no description.

Source: transform/castlecameras.pas (line 1322).

Published property MouseDraggingMoveSpeed: Single read FMouseDraggingMoveSpeed write FMouseDraggingMoveSpeed default DefaultMouseDraggingMoveSpeed;

Moving speed when mouse dragging. Relevant only when (MouseDragMode is mdWalkRotate) and (niMouseDragging in UsingInput).

Source: transform/castlecameras.pas (line 1330).

Published property MouseDragMode: TMouseDragMode read FMouseDragMode write FMouseDragMode default mdWalkRotate;

What mouse dragging does. Used only when niMouseDragging in Input.

Source: transform/castlecameras.pas (line 1335).

Published property Gravity: boolean read FGravity write FGravity default true;

This unlocks a couple of features and automatic behaviors related to gravity. Gravity always drags the camera down to -GravityUp.

Summary of things done by gravity:

While there are many properties allowing you to control gravity behavior, most of them have initial values that should be sensible in all cases. The most important property you need to set yourself is PreferredHeight. Everything else should basically work auto-magically.

Note that Gravity setting is independent from PreferGravityUpForRotations or PreferGravityUpForMoving settings — PreferGravityUpXxx say how the player controls work, Gravity says what happens to player due to ... well, due to gravity.

Source: transform/castlecameras.pas (line 1367).

Published property PreferredHeight: Single read FPreferredHeight write FPreferredHeight default DefaultPreferredHeight;

Height above the ground, only used when TCastleWalkNavigation.Gravity is True. The Camera.Translation tries to stay PreferredHeight above the ground. Temporarily it may still be lower (e.g. player can shortly "duck" when he falls from high).

This must always be >= 0. You should set this to something greater than zero to get sensible behavior of some things related to TCastleWalkNavigation.Gravity.

See CorrectPreferredHeight for important property of PreferredHeight that you should keep.

Source: transform/castlecameras.pas (line 1381).

Published property CrouchHeight: Single read FCrouchHeight write FCrouchHeight default DefaultCrouchHeight;

Preferred height when crouching. This is always mutiplied to PreferredHeight. This should always be <= 1 (CrouchHeight = 1 effectively disables crouching, although it's better to do this by calling MakeClear on Input_Crouch).

Source: transform/castlecameras.pas (line 1389).

Published property GrowSpeed: Single read FGrowSpeed write FGrowSpeed default DefaultGrowSpeed;

When Gravity works and camera height above the ground is less than PreferredHeight, then we try to "grow", i.e. camera position increases along the GravityUp so that camera height above the ground is closer to PreferredHeight. This property (together with length of Camera.Direction, that always determines every moving speed) determines the speed of this growth.

Source: transform/castlecameras.pas (line 1399).

Published property JumpMaxHeight: Single read FJumpMaxHeight write FJumpMaxHeight default DefaultJumpMaxHeight;

How high can you jump ? The max jump distance is calculated as JumpMaxHeight * PreferredHeight, see MaxJumpDistance.

Source: transform/castlecameras.pas (line 1406).

Published property JumpHorizontalSpeedMultiply: Single read FJumpHorizontalSpeedMultiply write FJumpHorizontalSpeedMultiply default DefaultJumpHorizontalSpeedMultiply;

Scales the speed of horizontal moving during jump.

Source: transform/castlecameras.pas (line 1411).

Published property JumpTime: Single read FJumpTime write FJumpTime default DefaultJumpTime;

How fast do you jump up. This is the time, in seconds, in takes to reach MaxJumpDistance height when jumping.

Source: transform/castlecameras.pas (line 1417).

Published property RunMultiplier: Single read FRunMultiplier write FRunMultiplier default DefaultRunMultiplier;

How much is the speed multiplied when running. This is used when Input_Run is pressed. The default value is 2.0, so running is twice as fast as walking.

Source: transform/castlecameras.pas (line 1423).

Published property AllowSlowerRotations: boolean read FAllowSlowerRotations write FAllowSlowerRotations default true;

If True then all rotation keys (Input_RightRotate, Input_LeftRotate, Input_UpRotate, Input_DownRotate) will work 10x slower when Ctrl modified is pressed.

Source: transform/castlecameras.pas (line 1429).

Published property CheckModsDown: boolean read FCheckModsDown write FCheckModsDown default true;

Do we check what key modifiers are pressed and do something differently based on it?

If True then all keys work only when no modifiers or only shift are pressed. Additionally when Ctrl is pressed (and AllowSlowerRotations) then rotation keys work 10x slower. Also Increase/DecreasePreferredHeight work only when Ctrl pressed. Other keys with other modifiers don't work. We allow shift, because to press character "+" on non-numpad keyboard (useful on laptops, where numpad is difficult) you probably need to press shift.

If False then all keys work as usual, no matter what modifiers are pressed. And rotation keys never work 10x slower (AllowSlowerRotations is ignored), also Increase/DecreasePreferredHeight are ignored.

Source: transform/castlecameras.pas (line 1449).

Published property HeadBobbing: Single read FHeadBobbing write FHeadBobbing default DefaultHeadBobbing;

We may make a "head bobbing" effect, by moving the camera a bit up and down.

This property mutiplied by PreferredHeight says how much head bobbing can move you along GravityUp. Set this to 0 to disable head bobbing. This must always be < 1.0. For sensible effects, this should be rather close to 0.0, for example 0.02.

This is meaningfull only when TCastleWalkNavigation.Gravity works.

Source: transform/castlecameras.pas (line 1463).

Published property HeadBobbingTime: Single read FHeadBobbingTime write FHeadBobbingTime default DefaultHeadBobbingTime;

Controls head bobbing frequency. In the time of HeadBobbingTime seconds, we do full head bobbing sequence (camera swing up, then down again).

Note that if you do a footsteps sound in your game (see e.g. Example: controlling the footsteps sound) then you will want this property to match your footsteps sound length, to sound natural.

Note: Often it sounds better to record two footsteps inside a single sound file, in which case the footstep sound length should be twice as long as this property. For example, record 2 steps inside a 1-second long footstep sound, and set this property to 0.5 a second (which happens to be a default).

Source: transform/castlecameras.pas (line 1480).

Published property ClimbHeight: Single read FClimbHeight write FClimbHeight;

The tallest height that you can climb only used when TCastleWalkNavigation.Gravity is True. This is checked in each single horizontal move when TCastleWalkNavigation.Gravity works. Must be >= 0. Value 0 means there is no limit (and makes a small speedup).

This is reliable to prevent user from climbing stairs and such, when vertical walls are really vertical (not just steep-almost-vertical).

It's not 100% reliable to prevent player from climbing steep hills. That's because, depending on how often an event processing occurs, you actually climb using less or more steps. So even a very steep hill can be always climbed on a computer with very fast speed, because with large FPS you effectively climb it using a lot of very small steps (assuming that FPS limit is not enabled, that is CastleWindow.TCastleApplication.LimitFPS or CastleControl.LimitFPS is zero).

Remember that user can still try jumping to climb on high obstactes. See TCastleWalkNavigation.JumpMaxHeight for a way to control jumping.

For a 100% reliable way to prevent user from reaching some point, that does not rely on specific navigation settings, you should build actual walls in 3D (invisible walls can be created by Collision.proxy in VRML/X3D).

Source: transform/castlecameras.pas (line 1508).


Generated by PasDoc 0.17.0.snapshot.