internal IEnumerable <string> SolveMinionReveal(TagChangeGameEvent e) { if (_awaitingMinionReveal?.Any(x => x.Id == e.Data.EntityId) ?? false) { yield return(Hunter.HiddenCache); } }
private void OnTagChange(TagChangeGameEvent e) { if (!e.Data.EntityId.HasValue || !e.GameState.Entities.TryGetValue(e.Data.EntityId.Value, out var entity)) { return; } if (entity is GameEntity) { if (e.Data.Tag == GameTag.TURN && e.Data.Value > 0) { var currentPlayer = e.GameState.CurrentPlayerEntity; var s = _secrets.Where(x => x.Entity.IsControlledBy(currentPlayer.PlayerId)).ToList(); Resolve(_secretSolver.SolveTurnStart(), s); } } if (entity.IsSecret && e.Data.Tag == GameTag.ZONE) { if (e.Data.PreviousValue != (int)Zone.SECRET && e.Data.Value == (int)Zone.SECRET) { OnSecretPlayed(entity); } if (e.Data.PreviousValue == (int)Zone.SECRET && e.Data.Value != (int)Zone.SECRET) { OnSecretRemoved(entity); } } if (!entity.IsControlledBy(e.GameState.CurrentPlayerEntity?.PlayerId ?? 0)) { return; } if (!TryGetSecrets(entity, out var secrets)) { return; } switch (e.Data.Tag) { case GameTag.CARDTYPE: if (e.Data.Value == (int)CardType.MINION) { Resolve(_secretSolver.SolveMinionReveal(e), secrets); } break; case GameTag.DAMAGE: if (e.Data.Value > 0) { Resolve(_secretSolver.SolveDamageTaken(entity), secrets); } break; case GameTag.CARD_TARGET: if (e.Data.Value > 0 && e.GameState.Entities.TryGetValue(e.Data.Value, out var target)) { Resolve(_secretSolver.SolveCardTarget(entity, target), secrets); } break; } }