Revision Difference
BasePlayer#530539
<cat>Code.Player</cat>
<title>BasePlayer</title>
This is WIP.
Knowledge is based on the usage in the sample gamemodes. (I'm not sure if this doc will be approved, but lets find out.)
# What is BasePlayer
BasePlayer is an abstract class to define Player behaviour and functions. You can override Methods of BasePlayer to implement custom logic.
# Abstract Methods
## void Respawn()
Handles what happens on respawn. It's smart to bind the Player Animator, Player Controller and Camera here.
### Example: Basic spawn
```cs
public override void Respawn()
{
SetModel( "models/citizen/citizen.vmdl" );
//
// Use WalkController for movement (you can make your own PlayerController for 100% control)
//
Controller = new WalkController();
//
// Use StandardPlayerAnimator (you can make your own PlayerAnimator for 100% control)
//
Animator = new StandardPlayerAnimator();
//
// Use FirstPersonCamera (you can make your own Camera for 100% control)
//
Camera = new FirstPersonCamera();
EnableAllCollisions = true;
EnableDrawing = true;
EnableHideInFirstPerson = true;
EnableShadowInFirstPerson = true;
base.Respawn();
}
```
Source: [sbox-minimal MinimalPlayer.cs](https://github.com/Facepunch/sbox-minimal/blob/5bc57dd049b20bbf81ea0602780ccb40099e3aac/minimal/code/MinimalPlayer.cs#L9-L34)
## void Tick()
Called every tick, clientside and serverside. You can handle user's inputs here.
## void OnKilled()
Will be called when player was killed. If you want to stop the player from moving, you should set the `Controller` to `null` in here.
## void UseFail()
Guess: `UseFail` will be called when the player presses the "use" button, but the interaction fails (for whatever reason).
By default this plays a sound.
## void OnActiveChildChanged( Entity from, Entity to )
Called when the item in the player's hand changed. For example: the player changes his current weapon.
### Example: Disable current weapon's flashlight on weapon change
```cs
public override void OnActiveChildChanged( Entity from, Entity to )
{
if ( to is Weapon weapon && HasFlashlightEntity )
{
ShowFlashlight( false );
}
base.OnActiveChildChanged( from, to );
}
```
Source: [dm98 Player.cs](https://github.com/Facepunch/sbox-hidden/blob/5e72e9d310ee4ab12bbd9fea59c39005af95fefb/code/player/Player.cs#L182-L190)
## void PostCameraSetup( Camera camera )
WIP, used in [dm98 Player.cs](https://github.com/Facepunch/dm98/blob/2bebd230696b2a95b53225c22f722545ae41894d/code/Player.cs#L149-L183)
## void TakeDamage( DamageInfo info )
Gets called when the player takes damage.
Don't forget to call ``base.TakeDamage( info );`` here if you want the player to take damage.
### DamageInfo
- `DamageInfo::Damage` - float, the damage amount
- `DamageInfo::HitboxIndex` - integer, the hitbox index (obviously), 0 = head
## PlayerController GetActiveController()
WIP, used in [sandbox Player.cs](https://github.com/Facepunch/sandbox/blob/d251c6b6b39f57bba0df7caba1fe81fce06faac8/code/Player.cs#L61-L67)
## Camera GetActiveCamera()
WIP, used in [sandbox Player.cs](https://github.com/Facepunch/sandbox/blob/d251c6b6b39f57bba0df7caba1fe81fce06faac8/code/Player.cs#L69-L75)
## PlayerAnimator GetActiveAnimator()
WIP, used in [sandbox Player.cs](https://github.com/Facepunch/sandbox/blob/d251c6b6b39f57bba0df7caba1fe81fce06faac8/code/Player.cs#L77-L82)
## void StartTouch( Entity other )
Called when the player entity touches another entity.
## override bool HasPermission( string mode )
Some sort of custom permission check. Used in [sandbox Player.cs](https://github.com/Facepunch/sandbox/blob/d251c6b6b39f57bba0df7caba1fe81fce06faac8/code/Player.cs#L170-L178)
# Examples & References
- [sbox-hidden Player.cs](https://github.com/Facepunch/sbox-hidden/blob/main/code/player/Player.cs)
- [dm98 Player.cs](https://github.com/Facepunch/dm98/blob/master/code/Player.cs)
- [sandbox Player.cs](https://github.com/Facepunch/sandbox/blob/master/code/Player.cs)
- [sbox-minimal MinimalPlayer.cs](https://github.com/Facepunch/sbox-minimal/blob/master/minimal/code/MinimalPlayer.cs)