using System.Collections.Generic; using System.Threading; using MfGames.Gallium; using MfGames.Nitride.Generators; using NodaTime; namespace MfGames.Nitride.Temporal; /// /// Filters out all entities that have an instant before the current /// NitrideClock time. /// [WithProperties] public partial class FilterOutFutureInstant : OperationBase { public FilterOutFutureInstant(TimeService timeService) { this.TimeService = timeService; } public TimeService TimeService { get; set; } /// public override IEnumerable Run( IEnumerable input, CancellationToken cancellationToken = default) { Instant now = this.TimeService.Clock.GetCurrentInstant(); return input .SelectEntity( ( entity, instant) => instant.CompareTo(now) <= 0 ? entity : null); } }