HomeBase.cs
using Sandbox;
public interface IBaseHealthEvents : ISceneEvent<IBaseHealthEvents>
{
void OnHealthChanged(float currentHealth) { }
}
public sealed class HomeBase : Component, Component.ITriggerListener
{
[Property]
public int StartingHealth { get; set; } = 1000;
float _currentHealth;
public float CurrentHealth => _currentHealth;
protected override void OnEnabled()
{
base.OnEnabled();
_currentHealth = StartingHealth;
}
static HomeBase _local;
public static HomeBase Local
{
get
{
if ( _local is null || !_local.IsValid() ) _local = Game.ActiveScene.Components.Get<HomeBase>( FindMode.EverythingInDescendants );
return _local;
}
}
TimeSince timeSinceUpdate = 0;
protected override void OnUpdate()
{
if ( timeSinceUpdate > 1 )
{
timeSinceUpdate = 0;
foreach ( var agent in Scene.GetAllComponents<NavMeshAgent>() )
{
agent.MoveTo( WorldPosition );
}
}
}
void ITriggerListener.OnTriggerEnter( GameObject other )
{
var enemy = other.GetComponent<BulletEnemy>();
if ( enemy is not null )
{
enemy.Die();
_currentHealth -= 100;
IBaseHealthEvents.Post( x => x.OnHealthChanged( _currentHealth ) );
}
}
}