LoadoutItem.cs

Abstract component type representing a player's loadout item. It defines many virtual callback methods for player and game events (damage, heals, dashes, reloads, bullets, perks, etc.), hooks into player modifier removal on destroy, and implements IStatModifier and IPlayerCallbacks.

#nullable enable
using System.Numerics;
using Sandbox;

public abstract class LoadoutItem : Component, IStatModifier, IPlayerCallbacks
{
	public Player Player { get; set; } = null!;

	public virtual void Update( float dt ) { }

	protected override void OnDestroy()
	{
		Player?.RemoveModifiers( this );
	}

	public virtual void Colliding( Thing other, float percent, float dt ) { }
	public virtual void OnRunStart() { }
	public virtual void OnDashStartedEarly( Vector2 dir ) { }
	public virtual void OnDashStarted( Vector2 dir ) { }
	public virtual void OnDashFinished( Vector2 dir ) { }
	public virtual void OnDashRecharged() { }
	public virtual void OnStartReload() { }
	public virtual void OnFinishReload() { }
	public virtual void OnShoot() { }
	public virtual void OnIgnite( Enemy enemy ) { }
	public virtual void OnFreeze( Enemy enemy ) { }
	public virtual void OnPoison( Enemy enemy ) { }
	public virtual void OnFear( Enemy enemy ) { }
	public virtual void OnKill( Enemy enemy, DamageType damageType, bool countsAsKill ) { }
	public virtual void OnDamageEnemy( Enemy enemy, float damage, DamageType damageType, Vector2 dir, bool isCrit ) { }
	public virtual void OnHurt( float amount, DamageType damageType, bool isSelfInflicted, Vector2 dir, Enemy enemySource, EnemyType enemyType, float previousHealth ) { }
	public virtual void OnHit( float amount, DamageType damageType, bool isSelfInflicted, Vector2 dir, float force, Enemy enemySource, EnemyType enemyType, float previousHealth ) { }
	public virtual void OnLoseArmor( float amount, DamageType damageType, bool isSelfInflicted, Vector2 dir, Enemy enemySource ) { }
	public virtual bool TryPreventDeath() => false;
	public virtual void OnDie() { }
	public virtual void OnRevive() { }
	public virtual void OnHeal( float amount ) { }
	public virtual void OnHealOther( float amount, Player other ) { }
	public virtual void OnGainXpCoin( float xp ) { }
	public virtual void OnGainHealthpack( float amount ) { }
	public virtual void OnPlayerLevelUp() { }
	public virtual void OnRerollBefore() { }
	public virtual void OnRerollAfter() { }
	public virtual void OnGainReroll( int amount ) { }
	public virtual void OnBanish() { }
	public virtual void OnGainBanish( int amount ) { }
	public virtual void OnGainShield() { }
	public virtual void OnLoseShield() { }
	public virtual void OnLand() { }
	public virtual void OnSayChat( string message ) { }
	public virtual void OnBulletHitGround( Bullet bullet ) { }
	public virtual void OnBulletPierce( Bullet bullet, Thing other ) { }
	public virtual void OnBulletBounce( Bullet bullet, Thing other ) { }
	public virtual void OnDodged( float damage, DamageType damageType, Vector2 dir, Enemy enemySource ) { }
	public virtual void OnSetMinute( int minute ) { }
	public virtual void OnAddPerkBefore( TypeDescription type ) { }
	public virtual void OnAddPerkAfter( TypeDescription type ) { }
	public virtual void OnRemovePerk( TypeDescription type ) { }
	public virtual void OnChoosePerk( TypeDescription type ) { }
	public virtual void OnPerkChoicesRefreshed( int numUniqueConsumed ) { }
	public virtual void OnTeleport( Vector2 from, Vector2 to ) { }
}