PlayerController.cs

A static utility class providing extension methods for PlayerController. These methods retrieve specific components like PlayerHealth and EvadeMovement and expose convenient properties for checking player state, such as being downed, dead, or sliding.

using Sandbox;
using System.Linq;

namespace Sandbox;

/// <summary>
/// Evade helper and state query extensions for Sandbox.PlayerController.
/// Provides convenient access to health, movement state, downed status, and revive checks.
/// </summary>
public static class PlayerControllerExtensions
{
	public static PlayerHealth GetHealth( this PlayerController controller )
	{
		if ( !controller.IsValid() ) return null;
		return controller.Components.Get<PlayerHealth>() ??
		       controller.Components.GetInChildren<PlayerHealth>();
	}

	public static EvadeMovement GetEvadeMovement( this PlayerController controller )
	{
		if ( !controller.IsValid() ) return null;
		return controller.Components.Get<EvadeMovement>() ??
		       controller.Components.GetInChildren<EvadeMovement>();
	}

	public static bool IsDowned( this PlayerController controller )
	{
		var health = controller.GetHealth();
		return health.IsValid() && health.IsDowned;
	}

	public static bool IsDead( this PlayerController controller )
	{
		var health = controller.GetHealth();
		return health.IsValid() && health.IsDead;
	}

	public static bool IsAliveAndStanding( this PlayerController controller )
	{
		var health = controller.GetHealth();
		return health.IsValid() && !health.IsDead && !health.IsDowned;
	}

	public static bool IsSliding( this PlayerController controller )
	{
		var evade = controller.GetEvadeMovement();
		return evade.IsValid() && evade.IsSliding;
	}
}