Example #1
0
        void MagicEngine_MagicEvent(MagicEventArg arg)
        {
            Border b;

            switch (arg.Type)
            {
            case MagicEventType.PlayerHasLost:
                closeCurrentGame();
                break;

            case MagicEventType.Unset:
                break;

            case MagicEventType.BeginPhase:
                b = phasePannel.FindByName
                        ((arg as PhaseEventArg).Phase.ToString()) as Border;
                if (b != null)
                {
                    b.Foreground = Color.White;
                }
                break;

            case MagicEventType.EndPhase:
                b = phasePannel.FindByName
                        ((arg as PhaseEventArg).Phase.ToString()) as Border;
                if (b != null)
                {
                    b.Foreground = Color.Transparent;
                }
                break;

            case MagicEventType.PlayLand:
                break;

            case MagicEventType.CastSpell:
                break;

            case MagicEventType.TapCard:
                break;

            case MagicEventType.ChangeZone:
                break;

            default:
                break;
            }
        }
Example #2
0
        public bool ExecuteIfMatch(MagicEventArg arg, CardInstance triggerSource)
        {
            if (Type != arg.Type)
            {
                return(false);
            }

            if (TriggerZone != CardGroupEnum.Any)
            {
                if (triggerSource.CurrentGroup.GroupName != TriggerZone)
                {
                    return(false);
                }
            }

            switch (Type)
            {
            case MagicEventType.ChangeZone:

                if (!targetIsValid(arg.Source, triggerSource))
                {
                    return(false);
                }

                ChangeZoneEventArg czea = arg as ChangeZoneEventArg;
                if ((czea.Origine == Origine || Origine == CardGroupEnum.Any) &&
                    (czea.Destination == Destination || Destination == CardGroupEnum.Any))
                {
                    if (InhibStacking)
                    {
                        MagicEngine.CurrentEngine.MagicStack.PushOnStack(new AbilityActivation(arg.Source, Exec)
                        {
                            GoesOnStack = false
                        });
                    }
                    else
                    {
                        MagicEngine.CurrentEngine.MagicStack.PushOnStack(new AbilityActivation(arg.Source, Exec));
                    }
                }
                else
                {
                    return(false);
                }
                return(true);

            case MagicEventType.CastSpell:
                if (targetIsValid((arg as SpellEventArg).Spell.CardSource, triggerSource))
                {
                    MagicEngine.CurrentEngine.MagicStack.PushOnStack
                        (new AbilityActivation((arg as SpellEventArg).Spell.CardSource, Exec));
                }
                else
                {
                    return(false);
                }
                return(true);

            default:
                Debug.WriteLine("default trigger handler: " + this.ToString());
                if (targetIsValid(arg.Source, triggerSource))
                {
                    if (InhibStacking)
                    {
                        MagicEngine.CurrentEngine.MagicStack.PushOnStack(new AbilityActivation(arg.Source, Exec)
                        {
                            GoesOnStack = false
                        });
                    }
                    else
                    {
                        MagicEngine.CurrentEngine.MagicStack.PushOnStack(new AbilityActivation(arg.Source, Exec));
                    }
                }
                else
                {
                    return(false);
                }
                return(true);
            }
        }
Example #3
0
        void MagicEngine_MagicEvent(MagicEventArg arg)
        {
            Magic.AddLog("MAGIC EVENT: " + arg.ToString());

            #region check triggers

            //check cards in play having trigger effects
            foreach (CardInstance ci in CardsInPlayHavingTriggers)
            {
                foreach (Trigger t in ci.Model.Triggers)
                {
                    if (t.ExecuteIfMatch(arg, ci))
                    {
                        Magic.AddLog("=> " + t.ToString());
                    }
                }
            }
            //check pump effect
            //todo should simplify trigger checking with a single function
            foreach (CardInstance ci in CardsInPlayHavingPumpEffects)
            {
                List <EffectGroup> egToRemove = new List <EffectGroup>();
                foreach (EffectGroup eg in ci.PumpEffect)
                {
                    if (eg.TrigEnd != null)
                    {
                        if (eg.TrigEnd.Type != arg.Type)
                        {
                            continue;
                        }
                        switch (eg.TrigEnd.Type)
                        {
                        case MagicEventType.EndTurn:
                            egToRemove.Add(eg);
                            break;
                        }
                    }
                }
                foreach (EffectGroup egtr in egToRemove)
                {
                    ci.PumpEffect.Remove(egtr);
                }
            }
            #endregion

            switch (arg.Type)
            {
            case MagicEventType.PlayerIsReady:
                //check if all players are ready
                foreach (Player p in Players)
                {
                    if (p.CurrentState != Player.PlayerStates.Ready)
                    {
                        return;
                    }
                }
                startGame();
                break;

            case MagicEventType.BeginPhase:
                processPhaseBegin(arg as PhaseEventArg);
                break;

            case MagicEventType.EndPhase:
                processPhaseEnd(arg as PhaseEventArg);
                break;

            case MagicEventType.PlayLand:
                break;

            case MagicEventType.ActivateAbility:
                break;

            case MagicEventType.CastSpell:
                break;

            case MagicEventType.TapCard:
                break;

            case MagicEventType.ChangeZone:
                if (arg.Source.IsToken)
                {
                    arg.Source.CurrentGroup.Cards.Remove(arg.Source);
                }
                break;

            case MagicEventType.Unset:
                break;

            default:
                break;
            }

            CheckCardInstanceUpdates();

            foreach (Player p in Players)            //TODO:too wide update
            {
                p.InPlay.UpdateLayout();
            }
        }
Example #4
0
 public void RaiseMagicEvent(MagicEventArg arg)
 {
     MagicEvent(arg);
 }