public bool CanPlay(IRuntimeCard card) { var cost = card.Data.CardCost; var hasMana = Player.HasMana(cost); return(hasMana); }
public IUiCard Get(IRuntimeCard card) { var obj = Get(modelsPooled[0]); obj.Data.SetData(card); return(obj); }
void GameEvents.IPlayerDiscardCard.OnDiscardCard(IPlayer player, IRuntimeCard card) { if (player.Seat != UiPlayer.Seat) { return; } CardUtils.Discard(card); }
void IPlayerDrawCard.OnDrawCard(IPlayer player, IRuntimeCard card) { if (player.Seat != UiPlayer.Seat) { return; } CardUtils.Draw(card); }
//-------------------------------------------------------------------------------------------------------------- public void Draw(IRuntimeCard card) { var uiCard = CardFactory.Instance.Get(card); uiCard.MonoBehavior.name = "Card_" + Count; uiCard.transform.position = deckPosition.position; Count++; PlayerHand.AddCard(uiCard); }
public bool Discard(IRuntimeCard card) { var hasCard = Player.Hand.Has(card); if (!hasCard) { return(false); } card.Discard(); Player.Hand.Remove(card); Player.Graveyard.AddCard(card); OnDiscardCard(Player, card); return(true); }
public bool Play(IRuntimeCard card) { var hasCard = Player.Hand.Has(card); if (!hasCard) { return(false); } var cost = card.Data.CardCost; Player.ConsumeMana(cost); Player.Hand.Remove(card); card.Play(); Player.Graveyard.AddCard(card); OnPlayCard(Player, card); return(true); }
//TODO: Merge these two classes into one. I'm building out the relic class now, so don't want too f**k up two things at once public static void DispatchEffects(IRuntimeCard card, EffectTriggerType triggerType) { //grab all effects from the card var effects = GetEffects(card); //return if the specified trigger is not present if (effects.All(eff => eff.Key.tType != triggerType)) { return; } //grab all effects of the specified trigger var effectsByTrigger = effects[effects.First(eff => eff.Key.tType == triggerType).Key].Effects; //dispatch all effects foreach (var effect in effectsByTrigger) { EffectsResolver.Resolve(effect, card, card.Targets[effect]); } }
/// <summary> /// Dispatch card played to the listeners. /// </summary> /// <param name="player"></param> /// <param name="card"></param> void OnPlayCard(IPlayer player, IRuntimeCard card) { GameEvents.Instance.Notify <GameEvents.IPlayerPlayCard>(i => i.OnPlayCard(player, card)); switch (card.Data.CardType) { case CardType.Minion: GameEvents.Instance.Notify <GameEvents.IPlayerPlayMinionCard>(i => i.OnPlayMinionCard(player, card)); break; case CardType.Spell: GameEvents.Instance.Notify <GameEvents.IPlayerPlaySpellCard>(i => i.OnPlaySpellCard(player, card)); break; case CardType.Power: GameEvents.Instance.Notify <GameEvents.IPlayerPlayPowerCard>(i => i.OnPlayPowerCard(player, card)); break; case CardType.Curse: GameEvents.Instance.Notify <GameEvents.IPlayerPlayCurseCard>(i => i.OnPlayCurseCard(player, card)); break; } }
void IPlayerDrawCard.OnDrawCard(IPlayer player, IRuntimeCard card) => SetSize(player);
public IUiCard GetCard(IRuntimeCard card) => Cards.Find(x => x.Data.StaticData == card.Data);
public void PlayCard(IRuntimeCard card) { var uiCard = PlayerHand.GetCard(card); PlayerHand.PlayCard(uiCard); }
public void Discard(IRuntimeCard card) { var uiCard = PlayerHand.GetCard(card); PlayerHand.DiscardCard(uiCard); }
void IPlayerPlayCard.OnPlayCard(IPlayer player, IRuntimeCard card) => SetSize(player);
public bool CanPlay(IRuntimeCard card) => PlayCardMechanics.CanPlay(card);
bool IPlayer.Play(IRuntimeCard card) => PlayCardMechanics.Play(card);
public bool Discard(IRuntimeCard card) => DiscardMechanics.Discard(card);
static EffectRegister GetEffects(IRuntimeCard card) => card.Data.Effects.Register;
/// <summary> /// Set a card /// </summary> /// <param name="card"></param> public void SetData(IRuntimeCard card) { RuntimeData = card; OnSetData?.Invoke(StaticData); }
void GameEvents.IPlayerPlayCard.OnPlayCard(IPlayer player, IRuntimeCard card) => SetSize(player);
void IPlayerDiscardCard.OnDiscardCard(IPlayer player, IRuntimeCard card) => SetSize(player);