GameMode/Rules/Events.cs

Defines several game event record types and a ResetScores component that dispatches a ResetScoresEvent when an EnterStateEvent is received. The file declares event records for player connection, spawning, death, and score reset, and implements IGameEventHandler<EnterStateEvent> to send the reset event on state entry.

Networking
using KOTH;
using Sandbox.Events;

public record PlayerConnectedEvent(PlayerState PlayerState) : IGameEvent;
public record LocalPlayerSpawnedEvent(PlayerPawn Player) : IGameEvent;
public record PlayerSpawnedEvent(PlayerPawn Player) : IGameEvent;
public record LocalPlayerDiedEvent() : IGameEvent;
public record ResetScoresEvent : IGameEvent;

// TODO : either do this for everything or nothing
/// <summary>
/// Dispatches a <see cref="ResetScoresEvent"/> when this state is entered.
/// </summary>
public sealed class ResetScores : Component,
	IGameEventHandler<EnterStateEvent>
{
	void IGameEventHandler<EnterStateEvent>.OnGameEvent(EnterStateEvent eventArgs)
	{
		Scene.Dispatch(new ResetScoresEvent());
	}
}