public override void Visit(PlayASpellFromHandAction action) { GameManager.PlayersAliveBeforeAction = GameManager.UserDict.Keys.ToList().Where(c => GameManager.GetPlayer(c).IsAlive).ToList(); OnCardPlayedVisitor visitor = new OnCardPlayedVisitor(GameManager); Player p = GameManager.GetPlayer(action.Caller); SpellCard spell = p.PlayASpellFromHand(action.PlayedCardId); visitor.Targets = action.Targets; p.PlayedSpell.Add(spell); spell.Visit(visitor, p.Character); foreach (CharacterEnum target in GameManager.UserDict.Keys.ToList()) { GameManager.UserDict[target].Write(new ResponseMessage(new PlayASpellResponse(action.Caller, spell, action.Targets))); } foreach (KeyValuePair <CharacterEnum, Response> kvp in visitor.SuccessiveResponse) { GameManager.UserDict[kvp.Key].Write(new ResponseMessage(kvp.Value)); } // visitor must take care of players which he kills foreach (CharacterEnum ch in GameManager.PlayersAliveBeforeAction) { if (!GameManager.GetPlayer(ch).IsAlive) { GameManager.KillPlayer(p.Character, ch); } } }
public override void Visit(PlayACreatureFromHandAction action) { OnCardPlayedVisitor visitor = new OnCardPlayedVisitor(GameManager); Player p = GameManager.GetPlayer(action.Caller); CreatureCard creature = p.PlayACreatureFromHand(action.PlayedCardId, action.Place); creature.Visit(visitor, p.Character); foreach (CharacterEnum target in GameManager.UserDict.Keys.ToList()) { GameManager.UserDict[target].Write(new ResponseMessage(new PlayACreatureResponse(action.Caller, creature, action.Place, action.TablePos))); } }