Class TPlayer
Unit
CastlePlayer
Declaration
type TPlayer = class(TAliveWithInventory)
Description
Player, 3D object controlling the camera, main enemy of hostile creatures, carries a backpack, may cause fadeout effects on screen and such.
Note that you can operate on player even before level is loaded, before TLevel or TCastleViewport are initialized. This allows to create player before level is started (create it from scratch, or by loading from save game), and "carry" the same player instance across various loaded levels.
Dead or Blocked player behaves much like alive and normal player. For example, it still has an associated Navigation that can be affected by physics (e.g. to apply physics to the dead player body, because player was killed when he was flying, or it's corpse lays on some moving object of the level — like elevator). However, input shortcuts will be cleared, to prevent user from directly moving the player.
Do not do some stuff when player is dead:
No calling PickItem, DropItem, UseItem.
No increasing Life (further decreasing Life is OK). This implies that once Player is Dead, (s)he cannot be alive again.
No changing EquippedWeapon, no calling Attack.
Note that a player has an associated and synchronized Navigation instance. See UseThirdPerson.
Hierarchy
Overview
Fields
Methods
Properties
Description
Fields
 |
var DefaultMoveHorizontalSpeed: Single; |
|
Various navigation properties that may depend on loaded level.
|
 |
DefaultMoveVerticalSpeed: Single; |
|
|
 |
DefaultPreferredHeight: Single; |
|
|
 |
nested const DefaultLife = 100; |
|
|
 |
nested const DefaultSickProjectionSpeed = 2.0; |
|
|
 |
nested const DefaultRenderOnTop = true; |
|
|
 |
nested const DefaultPlayerKnockBackSpeed = 20.0; |
|
|
 |
nested const DefaultSwimBreath = 30.0; |
|
|
 |
nested const DefaultDrownPause = 5.0; |
|
|
 |
nested const DefaultDrownDamageConst = 5.0; |
|
|
 |
nested const DefaultDrownDamageRandom = 10.0; |
|
|
 |
nested const DefaultSwimSoundPause = 3.11111111; |
|
|
 |
nested const DefaultFallMinHeightToSound = 4.0; |
|
TPlayer.FallMinHeightToSound is larger than TCreature.FallMinHeightToSound, to avoid making "fall" sound when player merely jumps or walks down a steep hill. No such need for creature.
|
 |
nested const DefaultFallSoundName = 'player_fall'; |
|
|
Methods
 |
procedure SetLife(const Value: Single); override; |
|
|
 |
procedure Notification(AComponent: TComponent; Operation: TOperation); override; |
|
|
 |
function LocalHeightCollision(const APosition, GravityUp: TVector3; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc; out AboveHeight: Single; out AboveGround: PTriangle): Boolean; override; |
|
|
 |
function LocalSegmentCollision(const Pos1, Pos2: TVector3; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc; const ALineOfSight: Boolean): Boolean; override; |
|
|
 |
procedure Fall(const FallHeight: Single); override; |
|
|
 |
procedure ChangedTransform; override; |
|
|
 |
constructor Create(AOwner: TComponent); override; |
|
|
 |
destructor Destroy; override; |
|
|
 |
procedure UseCurrentItem; |
|
|
 |
procedure ChangeInventoryCurrentItem(Change: Integer); |
|
Change InventoryCurrentItem, cycling, and automatically showing the inventory afterwards (if it's not empty). Note that you can also always directly change InventoryCurrentItem property.
|
 |
procedure Update(const SecondsPassed: Single; var RemoveMe: TRemoveType); override; |
|
|
 |
procedure FadeOut(const Color: TCastleColor); |
|
Cause a fade-out effect on the screen, tinting the screen to the given Color. The TPlayer class doesn't do the actual drawing of the fade-out effect on the screen, we merely store and animate the FadeOutColor and FadeOutIntensity properties. To draw the effect, use a procedure like GLFadeRectangle inside your 2D controls drawing code, see engine tutorial for example.
|
 |
procedure Attack; virtual; |
|
|
 |
procedure LoadFromFile; |
|
Load various player properties from an XML file. Properties not specified in the indicated file will be reset to their default values. This is handy to use in a game to allow to configure player behavior by simply editing an XML file (instead of hacking code).
Overloaded parameterless version reads from file 'castle-data:/player.xml'.
Note that the indicated file may not exist, and it will not cause errors. Not existing file is equivalent to a file with everything set at default values.
It is Ok to call this multiple times, at any moment. This way you can make some debug command to reload player.xml file, very useful to test various player properties without restarting the game.
|
 |
procedure LoadFromFile(const URL: string); |
|
|
 |
procedure LevelChanged; |
|
|
 |
function Sphere(out Radius: Single): boolean; override; |
|
|
Properties
 |
property ListenPressRelease default true; |
|
|
 |
property Flying: boolean read FFlying write SetFlying; |
|
Flying. How it interacts with FlyingTimeout: Setting this property to any value removes any timeout set by FlyingTimeout. That is, setting this to True makes player fly indefinitely, and setting this to False makes player stop flying (regardless if flying was initialized by Flying := true or FlyingTimeout).
|
 |
property FlyingTimeOut: TFloatTime read FFlyingTimeOut write SetFlyingTimeOut; |
|
Set this to something > 0 to start flying for a given number of seconds. The Flying property will also change to True for this time. It will automatically change back to False after given number of seconds (you can also always just manually switch Flying back to False).
Set this only with value > 0.
When this is > 0 it means flying with a timeout (always Flying = True then), otherwise it's = 0 (which means were not flying, or flying indefinitely long, depending on Flying).
|
 |
property EquippedWeapon: TItemWeapon read FEquippedWeapon write SetEquippedWeapon; |
|
Weapon the player is using right now, or nil if none.
You can set this property only to some item existing on Inventory. When you drop the current weapon, DeleteItem will automatically set this to Nil.
When setting this property (to nil or non-nil) player may get GameMessage about using/not using a weapon.
|
 |
property FadeOutIntensity: Single read FFadeOutIntensity; |
|
|
 |
property InventoryCurrentItem: Integer
read FInventoryCurrentItem write FInventoryCurrentItem
default -1; |
|
Currently selected inventory item.
Note: while we try to always sensibly update InventoryCurrentItem, to keep the assumptions that
Inventory.Count = 0 => InventoryCurrentItem = -1
Inventory.Count > 0 => InventoryCurrentItem between 0 and Inventory.Count - 1
but you should nowhere depend on these assuptions. That's because I want to allow myself freedom to modify Inventory in various situations, so InventoryCurrentItem can become invalid in many situations.
So every code should check that
If InventoryCurrentItem between 0 and Inventory.Count - 1 then InventoryCurrentItem is selected
Else no item is selected (possibly Inventory.Count = 0, possibly not)
|
 |
property InventoryVisible: boolean
read FInventoryVisible write FInventoryVisible default false; |
|
|
 |
property CollidesWithMoving default true; |
|
|
 |
property Blocked: boolean read FBlocked write FBlocked; |
|
Disables changing the camera by user. It's useful when you want to temporarily force camera to some specific setting (you can even use handy Player.Navigation.AnimateTo method to do this easily, see TCastleWalkNavigation.AnimateTo).
|
 |
property RenderOnTop: boolean read FRenderOnTop write FRenderOnTop
default DefaultRenderOnTop; |
|
Render 3D children (like EquippedWeapon) on top of everything else.
|
 |
property FallSound: TSoundType
read FFallSound write FFallSound; |
|
Sound when falling. The default is the sound named 'player_fall'.
|
 |
property HeadBobbing: Single
read FHeadBobbing write FHeadBobbing default TCastleWalkNavigation.DefaultHeadBobbing; |
|
Controls head bobbing, but only when player is walking. See TCastleWalkNavigation.HeadBobbing for exact meaning of this. TPlayer.Navigation.HeadBobbing is automatically updated as necessary.
Note that when using CastleLevels, then the headBobbing defined inside VRML/X3D file (see https://castle-engine.io/x3d_extensions.php#section_ext_head_bobbing ) is ignored. Instead, Player properties control TCastleWalkNavigation.HeadBobbing and TCastleWalkNavigation.HeadBobbingTime.
|
 |
property SwimBreath: Single read FSwimBreath write FSwimBreath default DefaultSwimBreath; |
|
How many seconds you can swin before you start to drown.
|
 |
property SwimSoundPause: Single read FSwimSoundPause write FSwimSoundPause default DefaultSwimSoundPause; |
|
Pause, in seconds, between playing stPlayerSwimming sound. This should be something that is not easily synchronized with SwimDrownPause.
|
 |
property FallingEffect: boolean
read FFallingEffect write FFallingEffect default true; |
|
Enable navigation falling down effect due to gravity. This indirectly controls TCastleWalkNavigation.FallingEffect underneath.
Note: do not set Navigation.FallingEffect, as it will be overridden in our update. Use only this property to turn on/off the effect.
|
 |
property Camera: TCastleWalkNavigation read FWalkNavigation; deprecated 'use WalkNavigation'; |
|
Warning: this symbol is deprecated: use WalkNavigation |
 |
property KnockBackSpeed default DefaultPlayerKnockBackSpeed; |
|
|
 |
property EnableNavigationDragging: boolean
read FEnableNavigationDragging write SetEnableNavigationDragging default true; |
|
Enable navigation by dragging. This results in including niMouseDragging in TCastleNavigation.Input (when player is not Dead or Blocked).
|
 |
property EnableCameraDragging: boolean
read FEnableNavigationDragging write SetEnableNavigationDragging default true; deprecated 'use EnableNavigationDragging'; |
|
Warning: this symbol is deprecated: use EnableNavigationDragging |
 |
property RenderDebug: boolean
read FRenderDebug write FRenderDebug default false; |
|
Show the debug bounding box of the player. Warning: It looks a little confusing (since it's a box around camera).
|
Generated by PasDoc 0.16.0.