swb_shared/IPlayerBase.cs
using System;
namespace SWB.Shared;
/// <summary>
/// Implement this interface on a `Component` to integrate with SWB
/// </summary>
public interface IPlayerBase : IValid, Sandbox.Component.IDamageable
{
/// <summary>
/// Unique identifier for the player
/// Typically implemented by `Component`
/// </summary>
public Guid Id { get; }
/// <summary>
/// The game object that owns this component
/// Typically implemented by `Component`
/// </summary>
public GameObject GameObject { get; }
/// <summary>
/// The camera to use when renderering the weapon's view model on the client side
/// If none is provided and first person mode is enabled, then a camera will be created
/// </summary>
public CameraComponent? ViewModelCamera { get; set; }
/// <summary>
/// The camera used for rendering the player's first person view
/// Used to calculate view model sway
/// The Render exclude tag "viewmodel" will be automatically applied to prevent render issues
/// </summary>
public CameraComponent? Camera { get; }
/// <summary>
/// Whether the player is in first person view
/// </summary>
public bool IsFirstPerson { get; }
/// <summary>
/// The player's current velocity
/// </summary>
public Vector3 Velocity { get; }
/// <summary>
/// Whether the player is crouching, this will effect aim and recoil
/// </summary>
public bool IsCrouching { get; }
/// <summary>
/// Whether the player is running, this will effect aim and recoil
/// </summary>
public bool IsRunning { get; }
/// <summary>
/// Whether the player is on the ground, this will effect aim and recoil
/// </summary>
public bool IsOnGround { get; }
/// <summary>
/// Whether the player is actively climbing a ladder
/// </summary>
public bool IsClimbingLadder { get; }
/// <summary>
/// Whether the player is alive.
/// Damage will not be dealt to dead players.
/// </summary>
public bool IsAlive { get; }
/// <summary>
/// Is this player considered a bot
/// Bots have input movement and other functionalities disabled
/// </summary>
public bool IsBot { get; set; }
/// <summary>
/// View angle of the player, used to determine the direction to shoot a bullet
/// </summary>
public Angles EyeAngles { get; }
/// <summary>
/// View position of the player, used to determine the origin point of a fired bullet
/// </summary>
public Vector3 EyePos { get; }
/// <summary>
/// Input sensitivity modifier based on player ADS (aim down sights) state
/// </summary>
public float InputSensitivity { get; set; }
/// <summary>
/// The suggested FOV to be used by the player camera, affected by a weapon zoom
/// This assumes a first-person perspective and will default to `Preferences.FieldOfView`
/// </summary>
public float FieldOfView { get; set; }
/// <summary>
/// The Hold Type for the currently equipped weapon
/// </summary>
public HoldTypes HoldType { set; }
/// <summary>
/// Called when the weapon wants to know how much ammo is available
/// </summary>
/// <param name="type">The type of ammo</param>
/// <returns>How much ammo is available</returns>
public int AmmoCount( string type );
/// <summary>
/// Called when the weapon wants to trigger an animation on the player object
/// </summary>
/// <param name="animation">The animation to trigger</param>
void TriggerAnimation( Animations animation );
/// <summary>
/// Triggered when the weapon wants to apply an angular offset to the player's view to simulate recoil.
/// Called when a weapon is fired.
/// </summary>
/// <param name="offset">The suggested angular offset to apply</param>
public void ApplyEyeAnglesOffset( Angles offset );
/// <summary>
/// Called when the weapon object should be attached/parented to the player's body
/// </summary>
/// <param name="object">The game object to parent</param>
/// <param name="boneName">The suggested bone to parent to</param>
/// <param name="deleteOnFail">Whether to destroy the object if parenting fails</param>
/// <param name="onFail">Optional callback when parenting fails</param>
public void ParentToBone( GameObject @object, string boneName, bool deleteOnFail = true, Action<GameObject> onFail = null );
/// <summary>
/// Called when the weapon is trying to take ammo.
/// </summary>
/// <param name="type">The type of ammo</param>
/// <param name="amount">The amount of ammo requested</param>
/// <returns>How much ammo was actually taken</returns>
public int TakeAmmo( string type, int amount );
/// <summary>
/// Shakes the camera
/// </summary>
/// <param name="screenShake">Information about the shake</param>
public void ShakeScreen( ScreenShake screenShake );
}