Beispiel #1
0
        public BattleEngine()
        {
            Player1 = new Player(1, 0);
            Player2 = new Player(2, 4);
            Player1.setStart(1);
            Player2.setStart(3);

            Interpreter = new EffectHardExecute(this);
            Network     = new BattleNetwork(null, 0);
            Network.StartOfflineClient();

            randomGen = new Random(0);

            Player1.playerServerNumber = 0;
            Player2.playerServerNumber = 1;

            for (int i = 0; i < 11; i++)
            {
                AllEffects[i] = new BattleTile();
            }

            for (int i = 0; i < 9; i++)
            {
                BattlePhases[i] = new BattlePhase(this, (byte)(i + 1));
            }

            pollIndex = 10;

            PreviousMovement    = MovementCategory.DO_NOTHING;
            OldArenaOrientation = 0;
            ArenaOrientation    = 0;

            SortedEffects = new Dictionary <EffectTrigger, SortedList <byte, List <BattleEffect> > >();
            foreach (EffectTrigger trigger in Enum.GetValues(typeof(EffectTrigger)))
            {
                SortedEffects[trigger] = new SortedList <byte, List <BattleEffect> >();
            }
        }
Beispiel #2
0
        public List <SceneAnimation> Poll()
        {
            if (Player1.Ready)
            {
                if (!Player1.SentData)
                {
                    var tmp = new byte[2];
                    tmp[0] = Player1.SelectedActionNumber;
                    tmp[1] = (byte)Player1.SelectedMovement;
                    Network.SendServer(tmp);
                }
                if (!Player2.Ready)
                {
                    //TODO: LOCK THE UI SO YOU CANT CHOOSE ANYTHING ELSE
                    var tmp = Network.ReadServer();
                }
                else
                {
                    if (IsDeathTurn)
                    {
                        List <SceneAnimation> DeathTurn = new List <SceneAnimation>();

                        if (Player1.IsNotInArena())
                        {
                            Player1.forceSwitched = false;
                            Player1.InSwitchState = true;
                            DeathTurn.AddRange(Switch(Player1));
                            Player1.InSwitchState = false;
                        }
                        if (Player2.IsNotInArena())
                        {
                            Player2.forceSwitched = false;
                            Player2.InSwitchState = true;
                            DeathTurn.AddRange(Switch(Player2));
                            Player2.InSwitchState = false;
                        }

                        IsDeathTurn = false;
                        DeathTurn.Add(new SceneAnimation(SceneAnimation.SceneAnimationType.END_TURN, null, "#END OF TURN#"));
                        return(DeathTurn);
                    }
                    else
                    {
                        if (pollIndex == 10)
                        {
                            foreach (EffectTrigger type in Enum.GetValues(typeof(EffectTrigger)))
                            {
                                foreach (List <BattleEffect> Effects in SortedEffects[type].Values)
                                {
                                    foreach (BattleEffect Effect in Effects)
                                    {
                                        if (Effect.Priority != 10)
                                        {
                                            BattlePhases[Effect.Priority - 1].CurrentPhaseEffects.Add(Effect);
                                        }
                                    }
                                }
                            }

                            int ran = randomGen.Next(0, 2);

                            // if (!Player1.HasActionDelay.Evaluate()) {
                            BattlePhases[CheckPace(Player1, Player2, ran) - 1 + Player1.SelectedAction.Priority - 4].Add(new ActionResolution(this, Player1, Player2));
                            // }
                            // if (!Player2.HasActionDelay.Evaluate()) {
                            BattlePhases[CheckPace(Player2, Player1, ran) - 1 + Player2.SelectedAction.Priority - 4].Add(new ActionResolution(this, Player2, Player1));
                            //  }
                            BattlePhases[CheckAwe(Player1, Player2, ran) - 1].Add(new MovementResolution(this, Player1, Player2));
                            BattlePhases[CheckAwe(Player2, Player1, ran) - 1].Add(new MovementResolution(this, Player2, Player1));

                            BattlePhases[8].Add(new EndResolution(this));

                            pollIndex = 0;
                        }
                        pollIndex++;
                        if (pollIndex == 10)
                        {
                            Player1.Ready            = false;
                            Player1.SelectedAction   = null;
                            Player1.SelectedMovement = MovementCategory.NULL;
                            Player2.Ready            = false;
                            Player2.SelectedAction   = null;
                            Player2.SelectedMovement = MovementCategory.NULL;

                            for (int i = 0; i < 9; i++)
                            {
                                BattlePhases[i] = new BattlePhase(this, (byte)(i + 1));
                                //TODO: DON'T DESTROY BATTLEPHASES JUST RESET THEM DEAR GOD
                            }

                            List <SceneAnimation> FinishTurn = new List <SceneAnimation>();
                            if (Player1.IsNotInArena())
                            {
                                IsDeathTurn = true;
                                FinishTurn.Add(new SceneAnimation(SceneAnimation.SceneAnimationType.USER_DEATH_SELECT, null, "#USER DEATH TURN ACTIVATED#"));
                            }
                            if (Player2.IsNotInArena())
                            {
                                IsDeathTurn = true;
                                List <SceneAnimation> death = new List <SceneAnimation>();
                                FinishTurn.Add(new SceneAnimation(SceneAnimation.SceneAnimationType.OPPONENT_DEATH_SELECT, null, "#OPPONENT DEATH TURN ACTIVATED#"));
                            }
                            FinishTurn.Add(new SceneAnimation(SceneAnimation.SceneAnimationType.END_TURN, null, "#END OF TURN#"));
                            return(FinishTurn);
                        }
                        return(BattlePhases[pollIndex - 1].Run());
                    }
                }
            }
            return(null);
        }