Exemplo n.º 1
0
        void startNewGame()
        {
            closeWindow("#MagicCrow.ui.mainMenu.iml");
            loadWindow("#MagicCrow.ui.log.iml");

            phasePannel = Load("#MagicCrow.ui.phases.iml");
            AddWidget(phasePannel);
            phasePannel.DataSource = this;

            playerPannels = new GraphicObject[2];
            for (int i = 0; i < 2; i++)
            {
                playerPannels[i] = Load("#MagicCrow.ui.player.iml");
                playerPannels[i].HorizontalAlignment = HorizontalAlignment.Left;
                playerPannels[i].DataSource          = Players[i];
            }
            playerPannels[1].HorizontalAlignment = HorizontalAlignment.Right;

            new Deck(DeckList [P1DeckIdx], Players [0]);
            new Deck(DeckList [P2DeckIdx], Players [1]);

            Players [0].LoadDeckCards();
            Players [1].LoadDeckCards();

            engine = new MagicEngine(Players);
            MagicEngine.MagicEvent += MagicEngine_MagicEvent;

            engine.currentPlayerIndex = engine.interfacePlayer;

            mstack = Load("#MagicCrow.ui.MagicStack.iml");
            AddWidget(mstack);
            mstack.DataSource = engine.MagicStack;

            updatePhaseStopsControls();
        }
Exemplo n.º 2
0
        public void ActivateAvailableMana(MagicEngine engine)
        {
            MagicAction ma = engine.MagicStack.Peek() as MagicAction;

            if (ma == null)
            {
                Debug.WriteLine("no action to activate mana for.");
                return;
            }
            if (ma.remainingCost == null)
            {
                Debug.WriteLine("Action has no cost");
                return;
            }

            foreach (CardInstance c in InPlay.Cards.Where(crd => !crd.IsTapped))
            {
                foreach (Ability a in c.Model.Abilities.Where(a => a.ContainsEffect(EffectType.ProduceMana)))
                {
                    ManaEffect me = a.Effects.OfType <ManaEffect> ().FirstOrDefault();
                    if (a.ActivationCost.Contains(CostTypes.Tap))
                    {
                        if (ma.remainingCost.Contains(me.ProducedMana))
                        {
                            MagicEngine.CurrentEngine.MagicStack.PushOnStack(new AbilityActivation(c, a));
                            return;
                        }
                    }
                }
            }
        }
Exemplo n.º 3
0
        void OnKeep(Object sender, EventArgs _e)
        {
            Magic.CurrentGameWin.DeleteWidget(msgBox);
            msgBox       = null;
            CurrentState = PlayerStates.Ready;
            MagicEngine e = MagicEngine.CurrentEngine;

            e.RaiseMagicEvent(new MagicEventArg(MagicEventType.PlayerIsReady, this));
        }
Exemplo n.º 4
0
        public MagicEngine(Player[] _players)
        {
            CurrentEngine = this;

            MagicStack = new MagicStack(this);

            Players     = _players;
            MagicEvent += new MagicEventHandler(MagicEngine_MagicEvent);
        }
Exemplo n.º 5
0
        protected void PlayerPanel_MouseClick(object sender, Crow.MouseButtonEventArgs e)
        {
            MagicEngine me = MagicEngine.CurrentEngine;

            if (me.pp != me.ip)
            {
                return;
            }
            me.MagicStack.TryToHandleClick(this);
        }
Exemplo n.º 6
0
        public MagicStack(MagicEngine _engine) : base()
        {
            engine = _engine;

            SpellStackLayout.Position           = new Vector3(0, 0, 2);   //Magic.vGroupedFocusedPoint;
            SpellStackLayout.HorizontalSpacing  = 0.1f;
            SpellStackLayout.VerticalSpacing    = 0.3f;
            SpellStackLayout.MaxHorizontalSpace = 3f;
            //SpellStackLayout.xAngle = Magic.FocusAngle;
        }
Exemplo n.º 7
0
        public IEnumerable <CardInstance> GetValidTargetsInPlay(CardInstance _source)
        {
            MagicEngine engine = MagicEngine.CurrentEngine;
            IEnumerable <CardInstance> cards;

            switch (TypeOfTarget)
            {
            case TargetType.Self:
                yield return(_source);

                break;

            case TargetType.EnchantedBy:
            case TargetType.EquipedBy:
                if (_source.IsAttached)
                {
                    yield return(_source.AttachedTo);
                }
                break;

            case TargetType.Card:
            case TargetType.Attached:
            case TargetType.Permanent:
                if (Controler == ControlerType.All)
                {
                    cards = engine.Players.SelectMany(p => p.InPlay.Cards);
                }
                else if (Controler == ControlerType.You)
                {
                    cards = _source.Controler.InPlay.Cards;
                }
                else
                {
                    cards = _source.Controler.Opponent.InPlay.Cards;
                }

                foreach (CardInstance ci in cards)
                {
                    if (Accept(ci, _source))
                    {
                        yield return(ci);
                    }
                }
                break;
            }
        }
Exemplo n.º 8
0
        public IList <CardInstance> GetAffectedCardInstances(CardInstance _source, Ability _ability)
        {
            List <CardInstance> temp = new List <CardInstance> ();

            if (Affected == null)
            {
                return(null);
            }

            MagicEngine engine = MagicEngine.CurrentEngine;

            foreach (CardTarget ct in Affected.OfType <CardTarget>())
            {
                foreach (CardInstance ci in ct.GetValidTargetsInPlay(_source))
                {
                    temp.Add(ci);
                }
            }
            return(temp.Count > 0 ? temp : null);
        }
Exemplo n.º 9
0
        void closeCurrentGame()
        {
            closeWindow("#MagicCrow.ui.log.iml");
            DeleteWidget(phasePannel);

            for (int i = 0; i < 2; i++)
            {
                Players[i].Deck.Cards   = new List <CardInstance>();
                Players[i].DeckLoaded   = false;
                Players[i].CurrentState = MagicCrow.Player.PlayerStates.Init;
                DeleteWidget(playerPannels [i]);
            }

            engine = null;

            DeleteWidget(mstack);

            CardInstance.CardsVBO?.Dispose();
            CardInstance.Dispose3DCardTexture();

            loadWindow("#MagicCrow.ui.mainMenu.iml");
        }
Exemplo n.º 10
0
        public virtual void Process()
        {
            MagicEngine e = MagicEngine.CurrentEngine;

            switch (CurrentState)
            {
                #region StartUp
            case PlayerStates.Init:
                return;

            case PlayerStates.DeckLoading:
                //if (!DeckLoaded)
                //	return;

                return;

            case PlayerStates.PlayDrawChoice:
                return;

            case PlayerStates.InitialDraw:
                initialDraw();
                CurrentState = PlayerStates.WaitHandReady;
                return;

            case PlayerStates.WaitHandReady:
                if (Deck.HasAnimatedCards)
                {
                    return;
                }
                createKeepMulliganChoice();
                CurrentState = PlayerStates.KeepMuliganChoice;
                return;

            case PlayerStates.KeepMuliganChoice:
                return;

                #endregion
            }

            if (e.pp != this || e.State < EngineStates.CurrentPlayer)
            {
                return;
            }

            switch (e.CurrentPhase)
            {
            case GamePhases.Untap:
                break;

            case GamePhases.Upkeep:
                break;

            case GamePhases.Draw:
                break;

            case GamePhases.Main1:
            case GamePhases.Main2:
                //e.Chrono.Reset();
                break;

            case GamePhases.BeforeCombat:
                //e.Chrono.Restart();
                break;

            case GamePhases.DeclareAttacker:
                //if (cp != this)

                //if (HaveUntapedCreatureOnTable)
                //    e.Chrono.Stop();
                //if (pp != cp || !cp.HaveUntapedCreatureOnTable)
                //{
                //    SwitchToNextPhase();
                //    GivePriorityToNextPlayer();
                //}

                break;

            case GamePhases.DeclareBlocker:
                break;

            case GamePhases.FirstStrikeDame:
                break;

            case GamePhases.CombatDamage:
                break;

            case GamePhases.EndOfCombat:
                break;

            case GamePhases.EndOfTurn:
                break;

            case GamePhases.CleanUp:
                break;
            }

            //            if (e.Chrono.ElapsedMilliseconds < MagicEngine.timerLength)
            //                return;
            if (e.MagicStack.Count == 0 && !PhaseStops[(int)e.CurrentPhase])
            {
                PhaseDone = true;
            }
            //            e.Chrono.Stop();
        }
Exemplo n.º 11
0
        public override void Process()
        {
            MagicEngine e = MagicEngine.CurrentEngine;

            switch (CurrentState)
            {
            case PlayerStates.Init:
                return;

            case PlayerStates.PlayDrawChoice:
                //chose to play first
                e.currentPlayerIndex = e.getPlayerIndex(this);
                CurrentState         = PlayerStates.InitialDraw;
                return;

            case PlayerStates.InitialDraw:
                initialDraw();
                CurrentState = PlayerStates.KeepMuliganChoice;
                return;

            case PlayerStates.KeepMuliganChoice:
                //choose to keep
                CurrentState = PlayerStates.Ready;
                e.RaiseMagicEvent(new MagicEventArg(MagicEventType.PlayerIsReady, this));
                return;
            }


            if (e.pp != this || e.State < EngineStates.CurrentPlayer)
            {
                return;
            }

            if (HasActionPending)
            {
                ActivateAvailableMana(e);
                return;
            }

            if (e.cp == this)
            {
                switch (e.CurrentPhase)
                {
                case GamePhases.Untap:
                    PhaseDone = true;
                    break;

                case GamePhases.Upkeep:
                    PhaseDone = true;
                    break;

                case GamePhases.Draw:
                    PhaseDone = true;
                    break;

                case GamePhases.Main1:
                case GamePhases.Main2:
                    if (AllowedLandsToBePlayed > 0)
                    {
                        if (AITryToPlayLand())
                        {
                            break;
                        }
                    }
                    if (!CastAvailableAndAllowedCreature())
                    {
                        PhaseDone = true;
                    }
                    break;

                case GamePhases.BeforeCombat:
                    PhaseDone = true;
                    break;

                case GamePhases.DeclareAttacker:
                    AITryToAttack();
                    PhaseDone = true;
                    break;

                case GamePhases.DeclareBlocker:
                    PhaseDone = true;
                    break;

                case GamePhases.FirstStrikeDame:
                    PhaseDone = true;
                    break;

                case GamePhases.CombatDamage:
                    PhaseDone = true;
                    break;

                case GamePhases.EndOfCombat:
                    PhaseDone = true;
                    break;

                case GamePhases.EndOfTurn:
                    PhaseDone = true;
                    break;

                case GamePhases.CleanUp:
                    PhaseDone = true;
                    break;
                }
            }
            else
            {
                if (e.pp == this)
                {
                    Magic.AddLog("AI just had priority");
                    e.GivePriorityToNextPlayer();
                }
//				switch (e.CurrentPhase)
//				{
//				case GamePhases.Untap:
//					PhaseDone = true;
//					break;
//				case GamePhases.Upkeep:
//					PhaseDone = true;
//					break;
//				case GamePhases.Draw:
//					PhaseDone = true;
//					break;
//				case GamePhases.Main1:
//					PhaseDone = true;
//					break;
//				case GamePhases.BeforeCombat:
//					PhaseDone = true;
//					break;
//				case GamePhases.DeclareAttacker:
//					PhaseDone = true;
//					break;
//				case GamePhases.DeclareBlocker:
//					PhaseDone = true;
//					break;
//				case GamePhases.FirstStrikeDame:
//					PhaseDone = true;
//					break;
//				case GamePhases.CombatDamage:
//					PhaseDone = true;
//					break;
//				case GamePhases.EndOfCombat:
//					PhaseDone = true;
//					break;
//				case GamePhases.Main2:
//					PhaseDone = true;
//					break;
//				case GamePhases.EndOfTurn:
//					PhaseDone = true;
//					break;
//				case GamePhases.CleanUp:
//					PhaseDone = true;
//					break;
//				}
            }
        }