private IEnumerable <(Player, TimeSpan)> GetTaunts(TimeSpan start, TimeSpan end, IEnumerable <Player> alive, Replay replay) { IEnumerable <GameEvent> gameEvents = replay.GameEvents.Where(e => replayHelper.IsWithin(e.TimeSpan, start, end)); foreach (IGrouping <Player, GameEvent> events in gameEvents.Where(e => replayHelper.IsHearthStone(replay, e)).GroupBy(e => e.player)) { // May need to also find click events within the same time frame to confirm legitimate bstepping var bsteps = events.GroupBy(cmd => cmd.TimeSpan).Where(g => g.Count() > 3); if (bsteps.Any() && alive.Contains(events.Key)) { yield return(events.Key, bsteps.Max(x => x.Key)); } } foreach (IGrouping <Player, GameEvent> events in gameEvents.Where(e => replayHelper.IsTaunt(replay, e)).GroupBy(e => e.player)) { if (alive.Contains(events.Key)) { yield return(events.Key, events.Max(t => t.TimeSpan)); } } foreach (IGrouping <Player, GameEvent> events in gameEvents.Where(e => replayHelper.IsDance(replay, e)).GroupBy(e => e.player)) { if (alive.Contains(events.Key)) { yield return(events.Key, events.Max(t => t.TimeSpan)); } } }
private void PrintTaunting(Replay replay, TimeSpan timer) { IEnumerable <IGrouping <Player, GameEvent> > playerCommands = replay.GameEvents .Where(gameEvent => replayHelper.IsTaunt(replay, gameEvent) && replayHelper.IsWithin(gameEvent.TimeSpan, timer, timer.Add(TimeSpan.FromSeconds(2)))) .GroupBy(e => e.player); foreach (var commands in playerCommands) { logger.LogDebug($"Taunting: {commands.Key.HeroId}:{commands.Count()}"); } }