dev/fixtures/SamplePulseSource.cs

A small game-owned event source that allows code to subscribe with an IDisposable and tracks current listener count. It stores listeners in a private event, increments/decrements a Listeners counter on subscribe/unsubscribe, and can Raise the event to invoke all listeners.

Self Modifying Code
namespace SuperuserCompatibilityLab.Engine.Modules;

/// <summary>A game-owned signal used to demonstrate subscription cleanup without static state.</summary>
public sealed class SamplePulseSource
{
	private event Action Pulse;
	/// <summary>Gets the number of currently attached listeners.</summary>
	public int Listeners { get; private set; }

	/// <summary>Registers one listener and returns its lifetime handle.</summary>
	public IDisposable Subscribe( Action listener )
	{
		Pulse += listener;
		Listeners++;
		return new SamplePulseSubscription( () =>
		{
			Pulse -= listener;
			Listeners--;
		} );
	}

	/// <summary>Raises a game event once for every live listener.</summary>
	public void Raise() => Pulse?.Invoke();
}