예제 #1
0
 public override void Activate()
 {
     _battleModel  = Model.BattleModel;
     _frontRow     = _battleModel.FrontRow;
     _enemies      = _battleModel.Enemies;
     _partyMinions = _battleModel.PlayerMinions;
     _enemyMinions = _battleModel.EnemyMinions;
     _logDrawer.Activate();
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="BattleControllerImpl{ICharacterModel firstCharacter, ICharacterModel secondCharacter, IBattleModel model}"/> class.
 /// </summary>
 public BattleControllerImpl(ICharacterModel firstCharacter, ICharacterModel secondCharacter, IBattleModel model)
 {
     this.firstCharacter  = firstCharacter;
     this.secondCharacter = secondCharacter;
     this.model           = model;
     this.turn            = 1;
     this.roll            = true;
     countFate            = new List <int>(2);
     for (int i = 0; i < 2; i++)
     {
         countFate.Add(0);
     }
 }
예제 #3
0
 public override void InitializeImpl()
 {
     _battleModel = Model.BattleModel;
     _spell       = Factories.RFactory.CreateMenuItem("Spell",
                                                      () => Master.SetCurrentState((int)BattleMenuState.SelectSpell));
     _switch = Factories.RFactory.CreateMenuItem("Switch",
                                                 () => Master.SetCurrentState((int)BattleMenuState.Switch));
     _convince = Factories.RFactory.CreateMenuItem("Convert",
                                                   () => Master.SetCurrentState((int)BattleMenuState.Convince));
     _formation = Factories.RFactory.CreateMenuItem("Set Formation",
                                                    () => Master.SetCurrentState((int)BattleMenuState.SetFormation));
     _controller = new MenuController();
     Model.MenuModel.BattleMenu = this;
 }
        public override void Run()
        {
            _battleModel     = Model.BattleModel;
            _currentAttacker = _battleModel.CurrentAttacker;
            _targetInfo      = _battleModel.TargetInfo;
            _enemyTurn       = _battleModel.IsEnemyTurn;
            ++_frameCounter;

            if (_frameCounter == ConsequenceFrames)
            {
                FrameLimitReached();
                return;
            }

            if (_frameCounter > 1)
            {
                FramesCounting();
                return;
            }

            Calculate();
        }
예제 #5
0
 public override void InitializeImpl()
 {
     _battleModel = Model.BattleModel;
 }
예제 #6
0
        public ITargetInfo SelectSpell(ICharacter character, IBattleModel battleModel, bool isEnemy)
        {
            // TODO Check if Boss has Rotation
            var targetInfo        = new TargetInfo();
            var lowHP             = character.CurrentHP / character.Stats.GetTotalStat(BaseStat.HP) <= .3d;
            var lowMP             = character.CurrentMP <= 75d;
            var silenced          = character.IsSilenced;
            var defendAvailable   = silenced || lowHP || lowMP;
            var spellSelectCount  = 0;
            var initialSpellIndex = defendAvailable ? 1 : 2;
            var spellList         = character.Spells;

            do
            {
                if (spellList.Count == 1)
                {
                    targetInfo.Spell = spellList[0];
                    break;
                }

                ++spellSelectCount;
                if (spellSelectCount == 10)
                {
                    initialSpellIndex = 0;
                }

                targetInfo.Spell =
                    spellList[RHelper.Roll(silenced ? 0 : initialSpellIndex, silenced ? 1 : spellList.Count - 1)];
            } while (targetInfo.Spell.MPCost >= character.CurrentMP + 1f);

            targetInfo.Target = null;
            var targetType = targetInfo.Spell.TargetType;

            if (targetType == TargetType.Allies || targetType == TargetType.Enemies)
            {
                return(targetInfo);
            }

            if (targetType == TargetType.Myself)
            {
                targetInfo.Target = character;
                return(targetInfo);
            }

            var enemies  = battleModel.Enemies;
            var frontRow = battleModel.FrontRow;

            if (targetInfo.Spell.IsSupportSpell)
            {
                var rollMax = isEnemy ? enemies.Count - 1 : frontRow.Count - 1;
                do
                {
                    targetInfo.Target = isEnemy ? enemies[RHelper.Roll(rollMax)] : frontRow[RHelper.Roll(rollMax)];
                } while (targetInfo.Target.IsDead);

                return(targetInfo);
            }

            targetInfo.Target = isEnemy ? GetTarget(frontRow) : GetTarget(enemies);
            return(targetInfo);
        }
예제 #7
0
 public BattleLog(IBattleModel battleModel)
 {
     _battleModel = battleModel;
 }
예제 #8
0
        private bool UpdateAI(IList <ICharacter> list, ref int counter, bool enemyTurn, IBattleModel battleModel)
        {
            for (var i = counter; i < list.Count; ++i)
            {
                if (!list[i].UpdateTurnCounter())
                {
                    continue;
                }

                battleModel.TargetInfo = _spellSelect.SelectSpell(list[i], battleModel, enemyTurn);
                counter = i + 1;
                battleModel.CurrentBattleState = BattleState.Consequences;
                battleModel.CurrentAttacker    = list[i];
                battleModel.IsEnemyTurn        = enemyTurn;
                _lastAttacker = list[i];
                return(false);
            }

            counter = 0;
            return(true);
        }