public void FighterOnRoundEnd_CorrectlyRemovesStatusesWithTurnCounter0([Values(1, 2, 3)] int turnCount) { ReflectStatus status = new ReflectStatus(turnCount, MagicType.Ice); _humanFighter.AddStatus(status); _logger.Subscribe(EventType.StatusRemoved, _humanFighter); for (var i = 0; i < turnCount; ++i) { _humanFighter.OnTurnEnded(new TurnEndedEventArgs(_humanFighter)); } _humanFighter.OnRoundEnded(new RoundEndedEventArgs(_humanTeam, _humanFighter)); List <EventLog> logs = _logger.Logs; Assert.AreEqual(1, logs.Count); EventLog log = logs[0]; Assert.AreEqual(EventType.StatusRemoved, log.Type); Assert.AreEqual(_humanFighter, log.Sender); StatusRemovedEventArgs args = log.E as StatusRemovedEventArgs; Assert.NotNull(args); Assert.IsTrue(status.AreEqual(args.Status)); }
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 RoundEnded(object sender, RoundEndedEventArgs e) { IStatusable senderAsStasusable = sender as IStatusable; if (senderAsStasusable == null) { throw new ArgumentException("StatusManager.RoundEnded() should only subscribe to classes that implement IStatusable!"); } List <Status> statusesToRemove = Statuses.Where(s => s.TurnCounter == 0).ToList(); Statuses.RemoveAll(s => statusesToRemove.Contains(s)); statusesToRemove.ForEach(s => { StatusRemovedEventArgs statusRemovedEventArgs = new StatusRemovedEventArgs(s); senderAsStasusable.OnStatusRemoved(statusRemovedEventArgs); }); }
private void _logStatusRemoved(object sender, StatusRemovedEventArgs e) { Logs.Add(new EventLog(EventType.StatusRemoved, sender, e)); }
public void OnStatusRemoved(StatusRemovedEventArgs e) { StatusRemoved?.Invoke(this, e); }