Exemple #1
0
        public void GainLife(int amount)
        {
            life += amount;

            if (TriggerSystem.HasTriggers(ConvergeTriggerType.GainLife))
            {
                TriggerSystem.CheckTriggers(ConvergeTriggerType.GainLife, new TriggerData(this, null, null, amount));
            }
        }
        public void DealDamage(ConvergeObject victim, int amount, bool isCombatDamage)
        {
            if (amount <= 0)
            {
                return;
            }

            if (TriggerSystem.HasTriggers(ConvergeTriggerType.DealDamage))
            {
                TriggerSystem.CheckTriggers(ConvergeTriggerType.DealDamage, new TriggerData(controller, this, victim, amount));
            }

            victim.TakeDamage(this, amount);

            if (keywords.HasFlag(ConvergeKeyword.Lifelink))
            {
                controller.GainLife(amount);
            }
        }
        public void PlayOn(ConvergeObject target, ConvergePlayer you)
        {
            if (zone.zoneId == ConvergeZoneId.Hand &&
                (cardType.HasFlag(ConvergeCardType.Action) || cardType.HasFlag(ConvergeCardType.Augment)) &&
                CanTarget(target, you)
                )
            {
                if (you.TryPayCost(cost))
                {
                    if (TriggerSystem.HasTriggers(ConvergeTriggerType.PlayCard))
                    {
                        TriggerSystem.CheckTriggers(ConvergeTriggerType.PlayCard, new TriggerData(you, this, target, 0));
                    }

                    ConvergeEffectContext context = new ConvergeEffectContext(this, you);
                    context.target = target;
                    original.actionEffect.Run(context);
                    MoveZone(owner.discardPile);
                }
            }
        }
        void UpdateZoneChanges()
        {
            bool didAnything = zoneChanges.Count > 0;

            for (int Idx = 0; Idx < zoneChanges.Count; ++Idx)
            {
                KeyValuePair <ConvergeObject, ConvergeZone> kv = zoneChanges[Idx];
                ConvergeObject obj     = kv.Key;
                ConvergeZone   newZone = kv.Value;
                ConvergeZone   oldZone = obj.zone;

                if (newZone.zoneId == ConvergeZoneId.DiscardPile && TriggerSystem.HasTriggers(ConvergeTriggerType.Discarded))
                {
                    TriggerSystem.CheckTriggers(ConvergeTriggerType.Discarded, new TriggerData(newZone.owner, null, obj, 0));
                }

                newZone.Add(obj);

                if (newZone.inPlay && (oldZone == null || !oldZone.inPlay) && TriggerSystem.HasTriggers(ConvergeTriggerType.EnterPlay))
                {
                    TriggerSystem.CheckTriggers(ConvergeTriggerType.EnterPlay, new TriggerData(newZone.owner, obj, null, 0));
                }

                if (obj.ui == null && !newZone.isHidden && obj.zone == newZone)
                {
                    obj.ui = new ConvergeUIObject(obj);
                    ui.Add(obj.ui);
                }
                else if (obj.ui != null && newZone.isHidden && obj.zone == newZone)
                {
                    ui.Remove(obj.ui);
                    obj.ui = null;
                }
            }
            zoneChanges.Clear();
        }
        public void Play(ConvergePlayer you)
        {
            if (zone.zoneId == ConvergeZoneId.Hand)
            {
                if (this.cardType.HasFlag(ConvergeCardType.Resource))
                {
                    if (you.numLandsPlayed < you.numLandsPlayable)
                    {
                        you.numLandsPlayed++;
                    }
                    else
                    {
                        return;
                    }
                }
                else if (original.actionTarget != null)
                {
                    // this spell needs a target
                    return;
                }

                if (TriggerSystem.HasTriggers(ConvergeTriggerType.PlayCard))
                {
                    TriggerSystem.CheckTriggers(ConvergeTriggerType.PlayCard, new TriggerData(you, this, null, 0));
                }

                if (you.TryPayCost(cost))
                {
                    if (this.cardType.HasFlag(ConvergeCardType.Unit))
                    {
                        MoveZone(you.defense);
                        if (!this.keywords.HasFlag(ConvergeKeyword.Haste))
                        {
                            tapped = true;
                        }
                    }
                    else if (this.cardType.HasFlag(ConvergeCardType.Action))
                    {
                        ConvergeEffectContext context = new ConvergeEffectContext(this, you);
                        original.actionEffect.Run(context);
                        MoveZone(owner.discardPile);
                    }
                    else if (this.cardType.HasFlag(ConvergeCardType.Resource) && this.activatedAbilities.Count == 0)
                    {
                        MoveZone(you.resourceZone);
                    }
                    else
                    {
                        MoveZone(you.home);
                    }
                }
            }
            else if (zone.zoneId == ConvergeZoneId.Attack)
            {
                WithdrawAttack();
            }
            else if (zone.zoneId == ConvergeZoneId.Defense)
            {
                EnterAttack();
            }
        }
 public void OnLeavingPlay()
 {
     TriggerSystem.Remove(this);
 }
 public void OnEnteringPlay()
 {
     TriggerSystem.Add(this);
 }