best times only improve; achievement unlock announces on the transition only, so popup/Steam subscribers cannot double-fire; statistics are increase-only (IncrementStat took any int). RelockAchievement is console-only and documented as not reaching Steam - a Steam achievement cannot be un-earned, so the disagreement is permanent and deliberate. refactor: extract EventLog, composed by both aggregates now that the duplication actually exists. 34 tests.
20 lines
550 B
C#
20 lines
550 B
C#
namespace Mr.BrickAdventures.Progression;
|
|
|
|
/// <summary>
|
|
/// Collects the events an aggregate raises until someone drains them. Composed rather than
|
|
/// inherited — aggregates own one, they are not a kind of it.
|
|
/// </summary>
|
|
internal sealed class EventLog
|
|
{
|
|
private readonly List<ProgressionEvent> _events = new();
|
|
|
|
public void Raise(ProgressionEvent @event) => _events.Add(@event);
|
|
|
|
public IReadOnlyList<ProgressionEvent> Drain()
|
|
{
|
|
var drained = _events.ToList();
|
|
_events.Clear();
|
|
return drained;
|
|
}
|
|
}
|