Ejemplo n.º 1
0
 internal IEnumerable <string> SolveMinionReveal(TagChangeGameEvent e)
 {
     if (_awaitingMinionReveal?.Any(x => x.Id == e.Data.EntityId) ?? false)
     {
         yield return(Hunter.HiddenCache);
     }
 }
Ejemplo n.º 2
0
        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;
            }
        }