protected override void OnPlayVirtually(Card card, Card extraCard) { Player owner = card.Owner; Player current = owner; Game.GameTable.PlayerPlayCard(card, this.Type); Game.GameTable.PlayerDiscardCard(extraCard); if(!includeSelf) current = Game.NextPlayer(current); List<ResponseHandler> handlers = new List<ResponseHandler>(); do { if(current == owner || current.HasCardEffect(this)) { ResponseHandler h = OnPlay(owner, current); if(h != null) handlers.Add(h); } current = Game.NextPlayer(current); } while(current != owner); if(handlers.Count != 0) Game.GameCycle.PushTempHandler(new QueueResponseHandler(handlers)); }
protected override void OnRespondCard(Card card) { if(card.Owner != RequestedPlayer) throw new BadCardException(); card.AssertInHand(); Game.GameTable.PlayerDiscardCard(card); if(RequestedPlayer.Hand.Count <= RequestedPlayer.MaxCardCount) End(); }
protected override void OnRespondCard(Card card) { if(card.Owner != RequestedPlayer) throw new BadCardException(); if(barrelsChecked.Contains(card)) throw new BadCardException(); canEndImmediately = false; RequestedPlayer.CheckMissed(card, OnResult); canEndImmediately = true; if(power == 0) End(); }
protected override void OnPlayVirtually(Card card) { PlayFromTableVirtually(card); }
private bool RemoveCardFromSelection(Card card) { return selection.Remove(card); }
private void PutCardToDeck(Card card) { card.Owner = null; deck.Push(card); }
public void UndrawFromSelection(Card card) { if(!selection.Remove(card)) throw new InvalidOperationException(); PutCardToDeck(card); game.Session.EventManager.OnUndrawnFromSelection(card, selectionOwner); }
public void PlayerStealCard(Player player, Card card, bool revealCard) { Player owner = card.Owner; if(owner == null) throw new InvalidOperationException(); if(!owner.RemoveCardFromHand(card)) if(!owner.RemoveCardFromTable(card as TableCard)) throw new InvalidOperationException(); player.AddCardToHand(card); game.Session.EventManager.OnPlayerStoleCard(player, owner, card, revealCard); owner.CheckEmptyHand(); }
public void PlayerPlayCard(Card card, Player targetPlayer) { Player owner = card.Owner; if(owner == null) throw new InvalidOperationException(); if(!owner.RemoveCardFromHand(card)) if(!owner.RemoveCardFromTable(card as TableCard)) throw new InvalidOperationException(); PutCardToGraveyard(card); game.Session.EventManager.OnPlayerPlayedCard(owner, card, targetPlayer); owner.OnPlayedCard(card); owner.CheckEmptyHand(); }
public void PlayerPickFromSelection(Player player, Card card, bool revealCard) { if(selectionOwner != null && selectionOwner != player) throw new InvalidOperationException(); if(!selection.Remove(card)) throw new InvalidOperationException(); player.AddCardToHand(card); game.Session.EventManager.OnPlayerPickedFromSelection(player, card, selectionOwner == null || revealCard); }
public virtual void CheckDeck(Card causedBy, CheckDeckCallback checkCallback, CardResultCallback resultCallback) { Card checkedCard = player.Game.GameTable.CheckDeck(); bool result = checkCallback(checkedCard); Game.Session.EventManager.OnPlayerCheckedDeck(player, checkedCard, causedBy, result); resultCallback(causedBy, result); }
private void OnResult(Card card, bool result) { if(card != null) if(card.Type == CardType.Barrel) barrelsChecked.Add(card); if(result) { if(card != null && card.Type != CardType.Barrel) if(card.Type != CardType.Missed) Game.GameTable.PlayerRespondWithCard(card, CardType.Missed); else Game.GameTable.PlayerRespondWithCard(card); if(card != null && CausedBy != null && !CausedBy.HasCardEffect(card)) return; if(--power == 0) { if(canEndImmediately) End(); } else { barrelsChecked.Clear(); abilityUsed = false; } } }
public EmptyCard(Card parent) { this.id = parent.id; }
public virtual void PlayVirtually(Card card) { throw new BadUsageException(); }
protected virtual void PlayFromTableVirtually(Card card) { throw new BadUsageException(); }
public virtual void PlayCard(Card card) { card.Play(); }
public void PlayerCancelCard(Player player, Card card) { Player owner = card.Owner; if(owner == null) throw new InvalidOperationException(); if(!owner.RemoveCardFromHand(card)) if(!owner.RemoveCardFromTable(card as TableCard)) throw new InvalidOperationException(); PutCardToGraveyard(card); game.Session.EventManager.OnPlayerCancelledCard(player, owner, card); owner.CheckEmptyHand(); }
public virtual bool HasCardEffect(Card card) { return true; }
public void PlayerPickFromSelection(Player player, Card card) { PlayerPickFromSelection(player, card, false); }
public virtual bool IsBang(Card card) { return card.Type == CardType.Bang; }
public void PlayerRespondWithCard(Card card, CardType asCard) { Player owner = card.Owner; if(owner == null) throw new InvalidOperationException(); if(!owner.RemoveCardFromHand(card)) if(!owner.RemoveCardFromTable(card as TableCard)) throw new InvalidOperationException(); PutCardToGraveyard(card); game.Session.EventManager.OnPlayerRespondedWithCard(owner, card, asCard); owner.OnRespondedWithCard(card); owner.CheckEmptyHand(); }
public virtual bool IsMissed(Card card) { return card.Type == CardType.Missed; }
public void PlayerStealCard(Player player, Card card) { PlayerStealCard(player, card, false); }
public virtual void OnDrewFirstCard(Card card) { }
private void AddCardToSelection(Card card) { selection.Add(card); }
public virtual void OnDrewSecondCard(Card card) { }
private void PutCardToGraveyard(Card card) { card.Owner = null; graveyard.Push(card); }
public virtual void OnPlayedCard(Card card) { }
public void CancelCard(Card card) { Player owner = card.Owner; if(owner == null) { if(!selection.Remove(card)) throw new InvalidOperationException(); } else if(!owner.RemoveCardFromHand(card)) if(!owner.RemoveCardFromTable(card as TableCard)) throw new InvalidOperationException(); PutCardToGraveyard(card); game.Session.EventManager.OnCardCancelled(card); if(owner != null) owner.CheckEmptyHand(); }
public virtual void OnRespondedWithCard(Card card) { }