public void BattleManager_CorrectlyCalculatesDamageForShield() { int shieldDefense = 10; IronBattleShield shield = new IronBattleShield((shieldDefense * 2) + 1, shieldDefense, 0); _humanPlayer1.SetBattleShield(shield); _logger.SubscribeAll(_humanPlayer1.BattleShield); _humanPlayer1.SetDefense(shieldDefense); _humanPlayer1.SetStrength(_enemyPlayer1.MaxHealth + _enemyPlayer1.Defense); _humanPlayer1.SetMove(_basicAttackMove); _humanPlayer1.SetMoveTarget(_enemyPlayer1); _enemyPlayer1.SetSpeed(1); _enemyPlayer1.SetStrength(shieldDefense * 2); _enemyPlayer1.SetMove(_basicAttackMove); _chanceService.PushEventsOccur(true, false, true, false); //attacks hit, not misses _humanTeam = new Team(_menuManager, _humanPlayer1); _enemyTeam = new Team(_menuManager, _enemyPlayer1); _battleManager.Battle(_humanTeam, _enemyTeam); List <EventLog> logs = _logger.Logs; Assert.AreEqual(1, logs.Count); PhysicalDamageTakenEventArgs e = logs[0].E as PhysicalDamageTakenEventArgs; Assert.NotNull(e); Assert.AreEqual(shieldDefense, e.Damage); }
public void BattleManager_AppropriatelyExecutesDanceTechnique_DoesNotThrowException() { _enemy1.SetMove(_testTechnique); _enemy1.SetSpeed(10); _enemy2.SetMove(_doNothingMove); _human1.SetMove(_basicAttack); _human1.SetMoveTarget(_enemy1); _human1.SetStrength(EnemyDefenseAfterDanceMove + _enemy1.MaxHealth); _human2.SetMove(_basicAttack); _human2.SetMoveTarget(_enemy2); _human2.SetStrength(EnemyDefenseAfterDanceMove + _enemy2.MaxHealth); _chanceService.PushEventsOccur(true, false, true, false); //set up attack hits, attack crits for both attacks Assert.DoesNotThrow(() => { _battleManager.Battle(_humanTeam, _enemyTeam); }); }
private void PhysicalDamageEvent_Setup(int expectedDamage, bool showPhysicalDamageMessages) { Team mixedPlayerTeam = new Team(_menuManager, _humanPlayer1, _enemyPlayer1); TestEnemyFighter enemy3 = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1); Team enemyTeam = new Team(_menuManager, _enemyPlayer2, enemy3); _humanPlayer1.SetSpeed(2); _humanPlayer1.SetStrength(expectedDamage); _humanPlayer1.SetMove(_basicAttackMove, 1); _humanPlayer1.SetMove(_runawayMove); _humanPlayer1.SetMoveTarget(_enemyPlayer2); _enemyPlayer2.SetHealth(expectedDamage + 1); _enemyPlayer1.SetSpeed(1); _enemyPlayer1.SetStrength(expectedDamage); _enemyPlayer1.SetMove(_basicAttackMove); _enemyPlayer1.SetMoveTarget(enemy3); enemy3.SetHealth(expectedDamage + 1); _mockChanceService.PushEventsOccur(true, false, true, false); //both attacks hit, neither are crits _logger.Subscribe(EventType.DamageTaken, _enemyPlayer2); _logger.Subscribe(EventType.DamageTaken, enemy3); _enemyPlayer2.SetMove(_doNothingMove); enemy3.SetMove(_doNothingMove); BattleManagerBattleConfiguration config = new BattleManagerBattleConfiguration { ShowIntroAndOutroMessages = false, ShowExpAndLevelUpMessages = false, ShowDeathMessages = false, ShowAttackMessages = false, ShowPhysicalDamageMessages = showPhysicalDamageMessages }; _battleManager.Battle(mixedPlayerTeam, enemyTeam, config: config); }
public void TestUndoDebuffsEffect_IndividualEffect() { StatMultiplierStatus lowerAttackStatus = new StatMultiplierStatus(3, StatType.Strength, 1.0 / 3); StatusMove lowerEnemyAttackMove = new StatusMove("raise attack", TargetType.SingleEnemy, lowerAttackStatus); UndoDebuffsStatus undoDebuffStatus = new UndoDebuffsStatus(1); StatusMove undoDebuffMove = new StatusMove("reset stats", TargetType.SingleAlly, undoDebuffStatus); TestHumanFighter fighter2 = new TestHumanFighter("foo 2", 1); _humanTeam = new TestTeam(_humanFighter, fighter2); //enemy won't be killed if the status isn't assigned to _fighter2 _enemy.SetHealth(3); _enemy.SetSpeed(2); _enemy.SetMove(lowerEnemyAttackMove); _chanceService.PushEventOccurs(true); //status hits _enemy.SetMoveTarget(fighter2); _humanFighter.SetSpeed(1); _humanFighter.SetMove(undoDebuffMove); _chanceService.PushEventOccurs(true); //status hits _humanFighter.SetMoveTarget(fighter2); _logger.Subscribe(EventType.StatusAdded, fighter2); _logger.Subscribe(EventType.StatusRemoved, fighter2); BattleMove attack = MoveFactory.Get(BattleMoveType.Attack); fighter2.SetStrength(3); fighter2.SetMove(attack); fighter2.SetMoveTarget(_enemy); _chanceService.PushEventOccurs(true); //attack hits _chanceService.PushEventOccurs(false); //attack is not a crit //once Statuses are removed after battle, won't be able to _battleManager.Battle(_humanTeam, _enemyTeam); List <EventLog> logs = _logger.Logs; Assert.AreEqual(2, logs.Count); EventLog log = logs[1]; Assert.AreEqual(EventType.StatusRemoved, log.Type); StatusRemovedEventArgs e = log.E as StatusRemovedEventArgs; Assert.NotNull(e); Assert.IsTrue(lowerAttackStatus.AreEqual(e.Status)); }
public void SetUp() { _output = new MockOutput(); _input = new MockInput(); _menuManager = new TestMenuManager(_input, _output); _chanceService = new MockChanceService(); _battleManager = new TestBattleManager(_chanceService, _input, _output); _logger = new EventLogger(); _human = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1); _enemy = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1); _humanTeam = new TestTeam(_human); _enemyTeam = new Team(_menuManager, _enemy); _human.SetSpeed(10); _enemy.SetSpeed(0); doNothing = new DoNothingMove(); _enemy.SetMove(doNothing); _fireballSpell = SpellFactory.GetSpell(MagicType.Fire, 1); }
public void SetEnemy_ProperlySetsHumanControlledEnemyStats() { TestEnemyFighter enemy = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1, "Grumbles"); enemy.SetHealth(10); enemy.SetMana(10); enemy.SetMagicStrength(2); enemy.SetMagicResistance(2); enemy.SetStrength(3); enemy.SetDefense(2); enemy.SetSpeed(5); enemy.SetEvade(5); enemy.SetLuck(20); Assert.AreNotEqual(enemy.MaxHealth, _fighter.MaxHealth, "maxHealth"); Assert.AreNotEqual(enemy.MaxMana, _fighter.MaxMana, "maxMana"); Assert.AreNotEqual(enemy.MagicStrength, _fighter.MagicStrength, "magicStrength"); Assert.AreNotEqual(enemy.MagicResistance, _fighter.MagicResistance, "magicResistance"); Assert.AreNotEqual(enemy.Strength, _fighter.Strength, "strength"); Assert.AreNotEqual(enemy.Defense, _fighter.Defense, "defense"); Assert.AreNotEqual(enemy.Speed, _fighter.Speed, "speed"); Assert.AreNotEqual(enemy.Evade, _fighter.Evade, "evade"); Assert.AreNotEqual(enemy.Luck, _fighter.Luck, "luck"); Assert.AreNotEqual(enemy.DisplayName, _fighter.DisplayName, "displayName"); _fighter.SetEnemy(enemy); Assert.AreEqual(enemy.MaxHealth, _fighter.MaxHealth, "maxHealth"); Assert.AreEqual(enemy.MaxMana, _fighter.MaxMana, "maxMana"); Assert.AreEqual(enemy.MagicStrength, _fighter.MagicStrength, "magicStrength"); Assert.AreEqual(enemy.MagicResistance, _fighter.MagicResistance, "magicResistance"); Assert.AreEqual(enemy.Strength, _fighter.Strength, "strength"); Assert.AreEqual(enemy.Defense, _fighter.Defense, "defense"); Assert.AreEqual(enemy.Speed, _fighter.Speed, "speed"); Assert.AreEqual(enemy.Evade, _fighter.Evade, "evade"); Assert.AreEqual(enemy.Luck, _fighter.Luck, "luck"); Assert.AreEqual(enemy.DisplayName, _fighter.DisplayName, "displayName"); }