private void PlayStadiumCard(TrainerCard trainerCard) { trainerCard.RevealToAll(); CurrentTrainerCard = trainerCard; TriggerAllAbilitiesOfType(TriggerType.TrainerCardPlayed); GameLog.AddMessage(ActivePlayer.NetworkPlayer?.Name + " Plays " + trainerCard.GetName()); PushGameLogUpdatesToPlayers(); ActivePlayer.Hand.Remove(trainerCard); var trainerEvent = new StadiumCardPlayedEvent() { Card = trainerCard, Player = ActivePlayer.Id }; SendEventToPlayers(trainerEvent); trainerCard.Process(this, ActivePlayer, NonActivePlayer); if (StadiumCard != null) { StadiumCard.Owner.DiscardPile.Add(StadiumCard); } StadiumCard = trainerCard; CurrentTrainerCard = null; if (ActivePlayer.IsDead) { GameLog.AddMessage($"{ActivePlayer.NetworkPlayer?.Name} loses because they drew to many cards"); EndGame(NonActivePlayer.Id); } SendEventToPlayers(new GameInfoEvent { }); }
public void PlayTrainerCard(TrainerCard trainerCard, Player asPlayer = null) { var caster = asPlayer == null ? ActivePlayer : asPlayer; var opponent = GetOpponentOf(caster); if (asPlayer == null && !caster.Hand.Contains(trainerCard)) { GameLog.AddMessage($"{ActivePlayer?.NetworkPlayer?.Name} Tried to play a trainer ({trainerCard.Name}) card not in his hand"); return; } if (GetAllPassiveAbilities().Any(ability => ability.ModifierType == PassiveModifierType.StopTrainerCast)) { GameLog.AddMessage($"{trainerCard.Name} stopped by ability"); return; } else if (!trainerCard.CanCast(this, caster, opponent)) { GameLog.AddMessage($"{trainerCard.Name} could not be cast because something is missing"); return; } if (trainerCard.IsStadium()) { PlayStadiumCard(trainerCard); return; } trainerCard.RevealToAll(); CurrentTrainerCard = trainerCard; TriggerAllAbilitiesOfType(TriggerType.TrainerCardPlayed); GameLog.AddMessage(caster.NetworkPlayer?.Name + " Plays " + trainerCard.GetName()); PushGameLogUpdatesToPlayers(); caster.Hand.Remove(trainerCard); var trainerEvent = new TrainerCardPlayed() { Card = trainerCard, Player = caster.Id }; SendEventToPlayers(trainerEvent); trainerCard.Process(this, caster, opponent); if (trainerCard.AddToDiscardWhenCasting) { trainerCard.Owner.DiscardPile.Add(trainerCard); } CurrentTrainerCard = null; if (caster.IsDead) { GameLog.AddMessage($"{caster.NetworkPlayer?.Name} loses because they drew to many cards"); EndGame(opponent.Id); } SendEventToPlayers(new GameInfoEvent { }); }