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 ) );
		}
	}
}