public void CopyMethod_ReturnsAppropriateResponse([Values(MagicType.Fire, MagicType.Water)] MagicType shieldMagicType, [Values(1, 7)] int shieldHealth, [Values(2, 4)] int shieldDefense) { ElementalBattleShield shield = new ElementalBattleShield(shieldHealth, shieldDefense, 0, MagicType.Lightning); ShieldMove shieldMove = new ShieldMove("foo", TargetType.Self, null, shield); ShieldMove copy = new ShieldMove(shieldMove); Assert.AreNotEqual(shieldMove.Shield, copy.Shield); Assert.IsTrue(shieldMove.Shield.AreEqual(copy.Shield)); }
public void BattleManager_CorrectlyPrintsMessages_ElementalBattleShield([Values("eats pudding", null)] string executionMessage, [Values(MagicType.Ice, MagicType.Fire, MagicType.Earth, MagicType.Lightning)] MagicType shieldMagicType) { const int shieldDefense = 5; const int shieldHealth = 1; ElementalBattleShield shield = new ElementalBattleShield(shieldHealth, shieldDefense, 0, shieldMagicType); ShieldMove shieldMove = new ShieldMove("foo", TargetType.Self, executionMessage, shield); _humanFighter.SetSpeed(1); _humanFighter.SetMove(shieldMove, 1); _humanFighter.SetMove(_runawayMove); _enemy.SetStrength(shieldHealth + shieldDefense); _enemy.SetMove(_basicAttackMove); _chanceService.PushEventsOccur(true, false); //attack hits, is not a crit BattleManagerBattleConfiguration config = new BattleManagerBattleConfiguration { ShowIntroAndOutroMessages = false, ShowAttackMessages = false }; _battleManager.Battle(_humanTeam, _enemyTeam, config: config); MockOutputMessage[] outputs = _output.GetOutputs(); int expectedLength = 3; //damage taken, "equipped with shield," and "shield destroyed" messages if (executionMessage != null) { expectedLength++; } Assert.AreEqual(expectedLength, outputs.Length); int i = 0; if (executionMessage != null) { Assert.AreEqual($"{_humanFighter.DisplayName} {executionMessage}!\n", outputs[i++].Message); } string aOrAn = shieldMagicType == MagicType.Ice || shieldMagicType == MagicType.Earth ? "an" : "a"; Assert.AreEqual($"{_humanFighter.DisplayName} was equipped with {aOrAn} {shieldMagicType.ToString().ToLower()} elemental battle shield!\n", outputs[i].Message); }
public void DefaultDisplayName_ElementalBattleShield([Values(MagicType.Earth, MagicType.Fire)] MagicType shieldElementalType) { ElementalBattleShield shield = new ElementalBattleShield(1, 0, 0, shieldElementalType); string displayText = shield.GetDisplayText(); string expectedText = $"{shieldElementalType.ToString().ToLower()} elemental battle shield"; if (shieldElementalType == MagicType.Earth || shieldElementalType == MagicType.Ice) { expectedText = $"an {expectedText}"; } else { expectedText = $"a {expectedText}"; } Assert.AreEqual(expectedText, displayText); }
protected void PrintFieldEffectImplementedMessage(IFighter effectExecutor, ShieldFieldEffect effect) { string teamString = GetFieldEffectTeamString(effectExecutor, effect); IBattleShield battleShield = effect.BattleShield; ElementalBattleShield elementalShield = battleShield as ElementalBattleShield; string shieldTypeString = ""; if (elementalShield != null) { shieldTypeString = $"{elementalShield.ElementalType.ToString().ToLower()} elemental shields"; } string output = $"{teamString} has gained {shieldTypeString}!"; _output.WriteLine(output); }
public void BattleManager_CorrectlySetsShield_WhenExecutingShieldMove() { const int shieldDefense = 5; const int shieldHealth = 1; ElementalBattleShield shield = new ElementalBattleShield(shieldHealth, shieldDefense, 0, MagicType.Lightning); ShieldMove shieldMove = new ShieldMove("foo", TargetType.Self, null, shield); _humanFighter.SetSpeed(1); _humanFighter.SetMove(shieldMove, 1); _humanFighter.SetMove(_runawayMove); _enemy.SetStrength(shieldHealth + shieldDefense); _enemy.SetMove(_basicAttackMove); _chanceService.PushEventsOccur(true, false); //attack hits, is not a crit _battleManager.Battle(_humanTeam, _enemyTeam); Assert.AreEqual(_humanFighter.MaxHealth, _humanFighter.CurrentHealth); }
private static BattleShield GetShieldFromType(Type t) { BattleShield ret = null; if (t == typeof(IronBattleShield)) { ret = new IronBattleShield(1, 0, 0); } else if (t == typeof(ElementalBattleShield)) { ret = new ElementalBattleShield(1, 0, 0, MagicType.Fire); } else { throw new NotImplementedException($"GetShieldFromType() does not yet know how to handle type '{t}'"); } return(ret); }
public void BattleManager_CorrectlyExecutes_ShieldFortifyingMove([Values(ShieldFortifyingType.Defense, ShieldFortifyingType.Health)] ShieldFortifyingType shieldFortifyingType) { ElementalBattleShield shield = new ElementalBattleShield(10, 5, 0, MagicType.Fire); shield.DecrementHealth(5); _humanFighter.SetBattleShield(shield); IBattleShield copiedShield = _humanFighter.BattleShield; ShieldFortifyingMove shieldFortifyingMove = new ShieldFortifyingMove("foo", TargetType.Self, null, shieldFortifyingType, 5); _humanFighter.SetMove(shieldFortifyingMove, 1); _humanFighter.SetMove(_runawayMove); _humanFighter.SetMoveTarget(_humanFighter); _enemy.SetMove(_doNothing); _battleManager.Battle(_humanTeam, _enemyTeam); Assert.NotNull(copiedShield); int actualValue = shieldFortifyingType == ShieldFortifyingType.Defense ? copiedShield.Defense : copiedShield.CurrentHealth; Assert.AreEqual(10, actualValue); }
public virtual CombinedFieldEffect Combine(DanceEffectType effect1, DanceEffectType effect2) { CombinedFieldEffect ret = null; string combinedName; var first = (DanceEffectType)Math.Min((int)effect1, (int)effect2); var second = (DanceEffectType)Math.Max((int)effect1, (int)effect2); switch (first) { case DanceEffectType.Fire: switch (second) { case DanceEffectType.Wind: combinedName = "lightning dance"; ret = new CombinedFieldEffect(combinedName, new CriticalChanceMultiplierFieldEffect(TargetType.OwnTeam, combinedName, 2.0), new CriticalChanceMultiplierFieldEffect(TargetType.EnemyTeam, combinedName, 0.5)); break; case DanceEffectType.Soul: combinedName = "courage dance"; ret = new CombinedFieldEffect(combinedName, new StatMultiplierFieldEffect(TargetType.OwnTeam, combinedName, StatType.Strength, 1.5), new MagicMultiplierFieldEffect(TargetType.OwnTeam, combinedName, MagicType.Fire, 1.25)); break; case DanceEffectType.Heart: combinedName = "passion tempo"; ret = new CombinedFieldEffect(combinedName, new CriticalChanceMultiplierFieldEffect(TargetType.OwnTeam, combinedName, 3), new SpellCostMultiplierFieldEffect(TargetType.OwnTeam, combinedName, 2), new MagicMultiplierFieldEffect(TargetType.OwnTeam, combinedName, MagicType.All, 2)); break; case DanceEffectType.Mind: combinedName = "burning ballet"; ret = new CombinedFieldEffect(combinedName, new SpellCostMultiplierFieldEffect(TargetType.OwnTeam, combinedName, 2), new MagicMultiplierFieldEffect(TargetType.OwnTeam, combinedName, MagicType.All, 2)); break; case DanceEffectType.Danger: combinedName = "eruption festival"; ret = new CombinedFieldEffect(combinedName, new MagicAttackFieldEffect(TargetType.EnemyTeam, combinedName, MagicType.Fire, 2, 1, true)); break; } break; case DanceEffectType.Water: switch (second) { case DanceEffectType.Soul: combinedName = "river rumba"; ret = new CombinedFieldEffect(combinedName, new StatMultiplierFieldEffect(TargetType.OwnTeam, combinedName, StatType.Speed, 2)); break; case DanceEffectType.Heart: combinedName = "cleansing calypso"; ret = new CombinedFieldEffect(combinedName, new RestoreHealthPercentageFieldEffect(TargetType.OwnTeam, combinedName, 25, immediatelyExecuted: true), new UndoDebuffsFieldEffect(TargetType.OwnTeam, combinedName) ); break; case DanceEffectType.Mind: combinedName = "clearsong conga"; ret = new CombinedFieldEffect(combinedName, new RestoreManaPercentageFieldEffect(TargetType.OwnTeam, combinedName, 25, immediatelyExecuted: true)); break; case DanceEffectType.Danger: combinedName = "whirlpool fesitval"; ret = new CombinedFieldEffect(combinedName, new MagicAttackFieldEffect(TargetType.EnemyTeam, combinedName, MagicType.Water, 2, 1, true)); break; } break; case DanceEffectType.Wind: switch (second) { case DanceEffectType.Soul: combinedName = "breeze form"; ret = new CombinedFieldEffect(combinedName, new StatMultiplierFieldEffect(TargetType.OwnTeam, combinedName, StatType.Evade, 1.4)); break; case DanceEffectType.Heart: combinedName = "carefree waltz"; ret = new CombinedFieldEffect(combinedName, new RestoreHealthPercentageFieldEffect(TargetType.OwnTeam, combinedName, 10)); break; case DanceEffectType.Mind: combinedName = "gusty mamba"; ret = new CombinedFieldEffect(combinedName, new ReflectFieldEffect(TargetType.OwnTeam, combinedName, MagicType.All)); break; case DanceEffectType.Danger: combinedName = "tornado festival"; ret = new CombinedFieldEffect(combinedName, new MagicAttackFieldEffect(TargetType.EnemyTeam, combinedName, MagicType.Wind, 2, 1, true)); break; } break; case DanceEffectType.Earth: switch (second) { case DanceEffectType.Soul: combinedName = "desert swing"; ret = new CombinedFieldEffect(combinedName, new StatMultiplierFieldEffect(TargetType.OwnTeam, combinedName, StatType.Defense, 2)); break; case DanceEffectType.Heart: combinedName = "steadfast stance"; var earthShield = new ElementalBattleShield(5, 0, 0, MagicType.Earth); ret = new CombinedFieldEffect(combinedName, new ShieldFieldEffect(TargetType.OwnTeam, combinedName, earthShield)); break; case DanceEffectType.Mind: combinedName = "gaia galla"; ret = new CombinedFieldEffect(combinedName, new RestoreHealthPercentageFieldEffect(TargetType.OwnTeam, combinedName, 10)); break; case DanceEffectType.Danger: combinedName = "earthquake fesitval"; ret = new CombinedFieldEffect(combinedName, new MagicAttackFieldEffect(TargetType.EnemyTeam, combinedName, MagicType.Earth, 2, 1, true)); break; } break; } return(ret); }