Interface IVida and helper Vidas registry for the SBH AI system. IVida defines properties and methods a damageable entity must expose (GameObject, position, health, receive damage, flags for player and out-of-combat). Vidas.Allas returns all IVida components from a Scene.
namespace SBH;
using Sandbox;
using System.Collections.Generic;
/// <summary>
/// [SBHBase] Algo que los nextbots pueden percibir, perseguir y dañar.
/// La librería trae el componente Vida listo para usar; cada juego puede
/// además implementar esta interfaz en sus propios tipos (p. ej. su Player,
/// delegando en su sistema de daño) y los nextbots los cazarán igual.
/// GameObject y WorldPosition los aporta Component gratis.
/// </summary>
public interface IVida : IValid
{
GameObject GameObject { get; }
Vector3 WorldPosition { get; }
bool EstaMuerto { get; }
float VidaActual { get; }
void RecibirDanio( float cantidad, GameObject atacante = null );
/// <summary>
/// ¿Es un jugador humano? Lo consultan los interruptores tipo notarget
/// (sbh.ia.ignorar). Los adaptadores de Player devuelven true.
/// </summary>
bool EsJugador => false;
/// <summary>
/// ¿Fuera del combate? Sentidos y cerebros lo saltean por completo: no es
/// objetivo ni enemigo mientras dure. Lo usa la posesión (el cuerpo
/// estacionado del jugador) y sirve para cinemáticas o estados fantasma.
/// Sigue siendo dañable — solo desaparece del radar de la IA.
/// </summary>
bool FueraDeCombate => false;
}
/// <summary>
/// [SBHBase] Búsqueda de vidas en la escena.
/// </summary>
public static class Vidas
{
/// <summary> Todas las vidas atacables de la escena (activas), sean componentes Vida o adaptadores del juego. </summary>
public static IEnumerable<IVida> Todas( Scene escena )
=> escena.GetAllComponents<IVida>();
}