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> >(); } }
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); }