コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
            });
        }
コード例 #4
0
ファイル: EventLogger.cs プロジェクト: Jsweeney1000/SimpleRPG
 private void _logStatusRemoved(object sender, StatusRemovedEventArgs e)
 {
     Logs.Add(new EventLog(EventType.StatusRemoved, sender, e));
 }
コード例 #5
0
ファイル: Fighter.cs プロジェクト: Jsweeney1000/SimpleRPG
 public void OnStatusRemoved(StatusRemovedEventArgs e)
 {
     StatusRemoved?.Invoke(this, e);
 }