using PkmnLib.Static.Utils; namespace PkmnLib.Dynamic.Events; /// /// Allows for the batching of multiple events that should be shown at the same time. /// /// /// This is useful for when we send multiple events to the client in sequence, but we want to show them in one go. /// For example, when a Pokemon gets hurt by poison, we want to show the purple poison animation and the damage at the /// same time. This is done by batching the events together. /// public readonly record struct EventBatchId() { private static readonly RandomImpl RootRandom = new(); private static readonly ThreadLocal Random = new(() => { lock (RootRandom) { return new RandomImpl(RootRandom.GetInt()); } }); /// /// The unique identifier for this batch of events. /// public Guid Id { get; init; } = Random.Value.NewGuid(); }