Example #1
0
        public void BattleManager_ImmediatelyExecutesFieldEffectsAfterCombining()
        {
            _enemy1.SetHealth(100, 10);
            _enemy2.SetHealth(100, 10);

            BattleManagerBattleConfiguration config = new BattleManagerBattleConfiguration();

            _battleManager.SetConfig(config);
            _battleManager.SetHumanTeam(_humanTeam);
            _battleManager.SetEnemyTeam(_enemyTeam);

            var effect         = new RestoreHealthPercentageFieldEffect(TargetType.OwnTeam, "foo", 10, immediatelyExecuted: true);
            var combinedEffect = new Battle.FieldEffects.CombinedFieldEffect("foo", effect);

            _battleManager.ImplementEffects(combinedEffect, 10, _enemy1, _enemy2);

            //these values will be 10 if the heal effect wasn't immediately executed
            Assert.AreEqual(20, _enemy1.CurrentHealth);
            Assert.AreEqual(20, _enemy2.CurrentHealth);

            var effects = _battleManager.GetFieldEffects();

            Assert.AreEqual(0, effects.Count);

            _battleManager.TestOnTurnEnd();

            Assert.AreEqual(20, _enemy1.CurrentHealth);
            Assert.AreEqual(20, _enemy2.CurrentHealth);
            effects = _battleManager.GetFieldEffects();
            Assert.AreEqual(0, effects.Count);
        }
        protected void PrintFieldEffectImplementedMessage(IFighter effectExecutor, RestoreHealthPercentageFieldEffect effect)
        {
            string teamString = GetFieldEffectTeamString(effectExecutor, effect);

            string output = effect.IsImmediatelyExecuted ?
                            $"{teamString} has had health restored!" :
                            $"{teamString} has gained regen status for {GetDurationString(effect)}!";

            _output.WriteLine(output);
        }
Example #3
0
        public void BattleManager_AppropriatelyCancelsCombinationEffect_IfEitherOwnerDies()
        {
            var windDance = (TestDanceMove)TestMoveFactory.Get(moveType: BattleMoveType.Dance);

            windDance.SetDuration(2);
            windDance.SetDanceEffect(DanceEffectType.Wind);
            windDance.AddMove(_doNothingMove);
            _human1.SetHealth(100, 10);
            _human1.SetSpeed(1);
            _human1.SetMove(windDance);
            _human1.SetMoveTarget(_human1);

            var fireDance = (TestDanceMove)TestMoveFactory.Get(moveType: BattleMoveType.Dance);

            fireDance.SetDuration(2);
            fireDance.SetDanceEffect(DanceEffectType.Fire);
            fireDance.AddMove(_doNothingMove);
            fireDance.AddMove(_runawayMove);
            _human2.SetHealth(100, 10);
            _human2.SetSpeed(1);
            _human2.SetMove(fireDance);
            _human2.SetMoveTarget(_human2);

            _enemy1.SetStrength(_human1.Defense + _human1.MaxHealth + 1);
            _enemy1.SetMove(_basicAttack);
            _enemy1.SetMoveTarget(_human1);
            _chanceService.PushEventsOccur(true, false); //attack hits, not a crit

            _enemyTeam = new Team(TestMenuManager.GetTestMenuManager(), _enemy1);

            RestoreHealthPercentageFieldEffect restoreHealthEffect =
                new RestoreHealthPercentageFieldEffect(TargetType.OwnTeam, "heal dance", 20, 10);

            CombinedFieldEffect testCombo = new CombinedFieldEffect("heal dance", restoreHealthEffect);

            _combiner.AddFakeCombination(DanceEffectType.Wind, DanceEffectType.Fire, testCombo);

            BattleManagerBattleConfiguration config = new BattleManagerBattleConfiguration
            {
                FieldEffectCombiner = _combiner
            };

            _battleManager.Battle(_humanTeam, _enemyTeam, config: config);

            //will be 30 if the dance effect isn't interrupted
            Assert.AreEqual(10, _human2.CurrentHealth);
        }
        protected void PrintFieldEffectImplementedMessage(IFighter effectExecutor, FieldEffect effect)
        {
            MagicAttackFieldEffect              magicAttackFieldEffect    = effect as MagicAttackFieldEffect;
            ShieldFieldEffect                   shieldFieldEffect         = effect as ShieldFieldEffect;
            UndoDebuffsFieldEffect              undoDebuffsFieldEffect    = effect as UndoDebuffsFieldEffect;
            RestoreHealthPercentageFieldEffect  restoreHealthEffect       = effect as RestoreHealthPercentageFieldEffect;
            RestoreManaPercentageFieldEffect    restoreManaEffect         = effect as RestoreManaPercentageFieldEffect;
            StatMultiplierFieldEffect           statMultiplierFieldEffect = effect as StatMultiplierFieldEffect;
            SpellCostMultiplierFieldEffect      costMultiplierEffect      = effect as SpellCostMultiplierFieldEffect;
            CriticalChanceMultiplierFieldEffect critChanceEffect          = effect as CriticalChanceMultiplierFieldEffect;
            MagicMultiplierFieldEffect          magicMultiplierEffect     = effect as MagicMultiplierFieldEffect;
            ReflectFieldEffect                  magicReflectEffect        = effect as ReflectFieldEffect;
            StatusFieldEffect                   statusFieldEffect         = effect as StatusFieldEffect;

            if (magicAttackFieldEffect != null)
            {
                PrintFieldEffectImplementedMessage(effectExecutor, magicAttackFieldEffect);
            }
            else if (shieldFieldEffect != null)
            {
                PrintFieldEffectImplementedMessage(effectExecutor, shieldFieldEffect);
            }
            else if (undoDebuffsFieldEffect != null)
            {
                PrintFieldEffectImplementedMessage(effectExecutor, undoDebuffsFieldEffect);
            }
            else if (restoreHealthEffect != null)
            {
                PrintFieldEffectImplementedMessage(effectExecutor, restoreHealthEffect);
            }
            else if (statMultiplierFieldEffect != null)
            {
                PrintFieldEffectImplementedMessage(effectExecutor, statMultiplierFieldEffect);
            }
            else if (restoreManaEffect != null)
            {
                PrintFieldEffectImplementedMessage(effectExecutor, restoreManaEffect);
            }
            else if (critChanceEffect != null)
            {
                throw new NotImplementedException("this didn't get an updated PrintFieldEffectImplementedMessage when the code was moved over");

                /*if (critChanceEffect.Percentage < 1.0)
                 * {
                 *  output += "a decreased ";
                 * }
                 * else
                 * {
                 *  output += "an increased ";
                 * }
                 *
                 * output += "chance for critical hits";*/
            }
            else if (magicMultiplierEffect != null)
            {
                throw new NotImplementedException("this didn't get an updated PrintFieldEffectImplementedMessage when the code was moved over");

                /*if (magicMultiplierEffect.Percentage < 1.0)
                 * {
                 *  output += "weakened ";
                 * }
                 * else
                 * {
                 *  output += "strengthened ";
                 * }
                 *
                 * if (magicMultiplierEffect.MagicType != MagicType.All)
                 * {
                 *  output += $"{magicMultiplierEffect.MagicType.ToString().ToLower()} ";
                 * }
                 * output += "magic";*/
            }
            else if (costMultiplierEffect != null)
            {
                throw new NotImplementedException("this didn't get an updated PrintFieldEffectImplementedMessage when the code was moved over");

                /*output += (costMultiplierEffect.Multiplier < 1.0) ? "decreased " : "increased ";
                 * output += "cost for magic spells";*/
            }
            else if (magicReflectEffect != null)
            {
                throw new NotImplementedException("this didn't get an updated PrintFieldEffectImplementedMessage when the code was moved over");

                /*var magicTypeString = magicReflectEffect.MagicType.ToString().ToLower();
                 * output += $"gained reflect status against {magicTypeString} magic";*/
            }
            else if (statusFieldEffect != null)
            {
                //Don't need StatusFieldEffect print message- the statuses themselves have their own print methods
            }
            else
            {
                throw new ArgumentException(
                          "It's time to implement a new version of BattleManager.PrintFieldEffectImplementedMessage()");
            }
        }