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