protected void PrintStatusAddedMessage(IFighter fighter, SpellCostMultiplierStatus status) { string increaseOrDecrease = status.Multiplier < 1 ? "decreased" : "increased"; string output = $"{fighter.DisplayName} has {increaseOrDecrease} cost for magic spells for {GetDurationString(status)}!"; _output.WriteLine(output); }
public void CastSpell_CorrectlySpendsCastersMana_BothTeamAndIndividualSpellCostMultiplierStatuses( [Values(2, 4, 8)] int spellCost, [Values(1.5, 3.0)] double firstMultiplier, [Values(1.0, 2.0)] double secondMultiplier) { SpellCostMultiplierStatus firstStatus = new SpellCostMultiplierStatus(1, firstMultiplier); SpellCostMultiplierStatus secondStatus = new SpellCostMultiplierStatus(1, secondMultiplier); Spell spell = new Spell("foo", MagicType.Wind, SpellType.Attack, TargetType.SingleEnemy, spellCost, 5); int expectedRemainingMana = 100 - (int)(spellCost * firstMultiplier * secondMultiplier); _human.SetMana(100); _human.SetDeathOnTurnEndEvent(); _human.AddSpell(spell); _human.SetMove(spell); _human.SetMoveTarget(_enemy); _human.AddStatus(firstStatus); _humanTeam.AddStatus(secondStatus); _enemy.SetHealth(100); _battleManager.Battle(_humanTeam, _enemyTeam); Assert.AreEqual(expectedRemainingMana, _human.CurrentMana); }
public void CastSpell_CorrectlySpendsCastersMana_SpellCostMultiplierStatus( [Values(1, 4, 8)] int spellCost, [Values(2.0, 3.0)] double multiplier, [Values(false, true)] bool teamStatus) { SpellCostMultiplierStatus status = new SpellCostMultiplierStatus(1, multiplier); Spell spell = new Spell("foo", MagicType.Wind, SpellType.Attack, TargetType.SingleEnemy, spellCost, 5); int expectedRemainingMana = 100 - (int)(spellCost * multiplier); _human.SetMana(100); _human.SetDeathOnTurnEndEvent(); _human.AddSpell(spell); _human.SetMove(spell); _human.SetMoveTarget(_enemy); if (teamStatus) { _humanTeam.AddStatus(status); } else { _human.AddStatus(status); } _enemy.SetHealth(100); _battleManager.Battle(_humanTeam, _enemyTeam); Assert.AreEqual(expectedRemainingMana, _human.CurrentMana); }
public void CastSpell_CorrectlyChecksUserHasEnoughMana_SpellCostMultiplierStatus([Values(4, 8)] int spellCost, [Values(2, 3)] int costMultiplier1, [Values(null, 4)] int?costMultiplier2) { SpellCostMultiplierStatus status1 = new SpellCostMultiplierStatus(1, costMultiplier1); Spell spell = new Spell("foo", MagicType.Wind, SpellType.Attack, TargetType.SingleEnemy, spellCost, 5); int realCost = spellCost * costMultiplier1; if (costMultiplier2.HasValue) { realCost *= costMultiplier2.Value; SpellCostMultiplierStatus status2 = new SpellCostMultiplierStatus(1, costMultiplier2.Value); _human.AddStatus(status2); } int availableMana = realCost - 1; _human.SetMana(realCost, availableMana); _human.AddStatus(status1); _human.SetDeathOnTurnEndEvent(); _human.AddSpell(spell); _human.SetMove(spell); _human.SetMoveTarget(_enemy); _enemy.SetHealth(100); _battleManager.Battle(_humanTeam, _enemyTeam); Assert.AreEqual(availableMana, _human.CurrentMana); }
protected void PrintStatusAddedMessage(object sender, StatusAddedEventArgs e) { Status status = e.Status; IFighter senderAsFighter = sender as IFighter; if (senderAsFighter == null) { throw new InvalidOperationException("BattleManager.PrintStatusAddedMessage() should only subscribe to instances of IFighter"); } CriticalChanceMultiplierStatus criticalChanceStatus = status as CriticalChanceMultiplierStatus; StatMultiplierStatus statMultiplierStatus = status as StatMultiplierStatus; MagicMultiplierStatus magicMultiplierStatus = status as MagicMultiplierStatus; MagicResistanceMultiplierStatus resistanceMultiplierStatus = status as MagicResistanceMultiplierStatus; ReflectStatus reflectStatus = status as ReflectStatus; SpellCostMultiplierStatus spellCostMultiplierStatus = status as SpellCostMultiplierStatus; AutoEvadeStatus autoEvadeStatus = status as AutoEvadeStatus; CounterAttackStatus counterAttackStatus = status as CounterAttackStatus; BlindStatus blindStatus = status as BlindStatus; if (criticalChanceStatus != null) { PrintStatusAddedMessage(senderAsFighter, criticalChanceStatus); } if (statMultiplierStatus != null) { PrintStatusAddedMessage(senderAsFighter, statMultiplierStatus); } if (magicMultiplierStatus != null) { PrintStatusAddedMessage(senderAsFighter, magicMultiplierStatus); } if (resistanceMultiplierStatus != null) { PrintStatusAddedMessage(senderAsFighter, resistanceMultiplierStatus); } if (reflectStatus != null) { PrintStatusAddedMessage(senderAsFighter, reflectStatus); } if (spellCostMultiplierStatus != null) { PrintStatusAddedMessage(senderAsFighter, spellCostMultiplierStatus); } if (autoEvadeStatus != null) { PrintStatusAddedMessage(senderAsFighter, autoEvadeStatus); } if (counterAttackStatus != null) { PrintStatusAddedMessage(senderAsFighter, counterAttackStatus); } if (blindStatus != null) { PrintStatusAddedMessage(senderAsFighter, blindStatus); } }
public override bool AreEqual(Status status) { bool areEqual = false; SpellCostMultiplierStatus costMultiplierStatus = status as SpellCostMultiplierStatus; if (costMultiplierStatus != null) { areEqual = base.AreEqual(costMultiplierStatus); } return(areEqual); }