public SelectEnemyFighterMenuSelection(FighterType fighterType, int fighterLevel, BattleConfigurationSpecialFlag flag)
     : base(string.Empty, null, null)
 {
     FighterType  = fighterType;
     FighterLevel = fighterLevel;
     SpecialFlag  = flag;
 }
예제 #2
0
        public void PreBattleSetup(Team ownTeam, Team enemyTeam, IOutput output, BattleConfigurationSpecialFlag specialFlag)
        {
            _output = output;

            foreach (IFighter fighter in enemyTeam.Fighters)
            {
                fighter.SpecialMoveFailed += LogSpecialMoveFailed;
            }
        }
        public Team GetTeam(MenuManager menuManager, IInput input, IOutput output, out BattleConfigurationSpecialFlag battleFlag)
        {
            List <IFighter> fighters = new List <IFighter>
            {
                null,
                null,
                null,
                null,
                null
            };
            bool continuer = true;

            battleFlag = BattleConfigurationSpecialFlag.None;

            ConfirmationMenu humanControlledTeamConfirmationMenu = new ConfirmationMenu(false, "Do you want this team to be human controlled?", input, output);
            MenuSelection    confirmationInput = humanControlledTeamConfirmationMenu.GetInput();

            bool isHumanControlledTeam = confirmationInput.Description == "yes";

            for (var i = 0; i < 5 && continuer;)
            {
                SelectEnemyFighterMenu menu = Menus[i];

                MenuSelection menuSelection = menu.GetInput();

                if (i > 0 && menuSelection.Description == "back")
                {
                    --i;
                }
                else
                {
                    SelectEnemyFighterMenuSelection selectEnemyMenuSelection =
                        menuSelection as SelectEnemyFighterMenuSelection;

                    if (selectEnemyMenuSelection == null)
                    {
                        throw new InvalidOperationException(
                                  "SelectEnemyFighterMenu.GetInput() didn't return a SelectEnemyFighterMenuSelection");
                    }

                    FighterFactory.SetInput(input);
                    FighterFactory.SetOutput(output);

                    IFighter returnedEnemy = FighterFactory.GetFighter(selectEnemyMenuSelection.FighterType, selectEnemyMenuSelection.FighterLevel);

                    if (!(returnedEnemy is EnemyFighter))
                    {
                        throw new InvalidOperationException(
                                  $"The selected FighterType {selectEnemyMenuSelection.FighterType} cannot be cast to an EnemyFighter");
                    }
                    EnemyFighter enemy = (EnemyFighter)returnedEnemy;


                    IFighter fighterToAdd;
                    if (isHumanControlledTeam)
                    {
                        HumanControlledEnemyFighter humanControlledEnemy = (HumanControlledEnemyFighter)FighterFactory.GetFighter(FighterType.HumanControlledEnemy, 1);
                        humanControlledEnemy.SetEnemy(enemy);
                        fighterToAdd = humanControlledEnemy;
                    }
                    else
                    {
                        fighterToAdd = enemy;
                    }

                    fighters[i] = fighterToAdd;

                    if (selectEnemyMenuSelection.SpecialFlag != BattleConfigurationSpecialFlag.None &&
                        battleFlag == BattleConfigurationSpecialFlag.None)
                    {
                        battleFlag = selectEnemyMenuSelection.SpecialFlag;
                    }

                    if (i < 4)
                    {
                        ConfirmationMenu addAnotherFighrerConfirmationMenu = new ConfirmationMenu(false, "Do you want to add another fighter?", input, output);

                        confirmationInput = addAnotherFighrerConfirmationMenu.GetInput();

                        if (confirmationInput.Description == "no")
                        {
                            continuer = false;
                        }
                    }

                    ++i;
                }
            }

            fighters = fighters.Where(f => f != null).ToList();

            Team ret = new Team(menuManager, fighters);

            return(ret);
        }