예제 #1
0
        public void AddStatBonus(StatType stat, int bonus, bool isSecretBonus = false)
        {
            switch (stat)
            {
            case StatType.Strength:
                Strength += bonus;
                break;

            case StatType.Defense:
                Defense += bonus;
                break;

            case StatType.Speed:
                Speed += bonus;
                break;

            case StatType.Luck:
                Luck += bonus;
                break;
            }

            StatBonusAppliedEventArgs e = new StatBonusAppliedEventArgs(stat, bonus, isSecretBonus);

            OnStatBonusApplied(e);
        }
예제 #2
0
        public void AddMagicBonus_DefaultParameters_NotSecretStatBoost()
        {
            _fighter.AddStatBonus(StatType.Strength, 1);

            EventLog log = _logger.Logs[0];
            StatBonusAppliedEventArgs e = log.E as StatBonusAppliedEventArgs;

            Assert.NotNull(e);
            Assert.IsFalse(e.IsSecretStatBonus);
        }
        public void CorrectlySuppressesMessage_StatBonusAdded_SecretStatBonus()
        {
            StatBonusAppliedEventArgs e = new StatBonusAppliedEventArgs(StatType.Defense, 2, true);

            _fighter.OnStatBonusApplied(e);

            MockOutputMessage[] outputs = _output.GetOutputs();

            Assert.AreEqual(0, outputs.Length);
        }
예제 #4
0
        private void PrintStatBoostMessage(object sender, StatBonusAppliedEventArgs e)
        {
            if (!e.IsSecretStatBonus)
            {
                IFighter senderAsFighter = sender as IFighter;

                if (senderAsFighter == null)
                {
                    return;
                }

                _output.WriteLine($"{senderAsFighter.DisplayName} gained +{e.BonusAmount} {e.Stat.ToString().ToLower()}");
            }
        }
        public void CorrectlyPrintsMessage_StatBonusAdded([Values] StatType statType, [Values(1, 3)] int bonusAmount)
        {
            StatBonusAppliedEventArgs e = new StatBonusAppliedEventArgs(statType, bonusAmount, false);

            _fighter.OnStatBonusApplied(e);

            MockOutputMessage[] outputs = _output.GetOutputs();

            Assert.AreEqual(1, outputs.Length);

            MockOutputMessage output = outputs[0];

            Assert.AreEqual($"{_fighter.DisplayName} gained +{bonusAmount} {statType.ToString().ToLower()}\n", output.Message);
        }
예제 #6
0
        public void AddStatBonus_AppropriatelyRasiesEvent([Values] StatType statType, [Values(1, 5)] int bonusAmount, [Values] bool isSecret)
        {
            _fighter.AddStatBonus(statType, bonusAmount, isSecret);

            List <EventLog> logs = _logger.Logs;

            Assert.AreEqual(1, logs.Count);

            EventLog log = logs[0];

            Assert.AreEqual(EventType.StatBonusApplied, log.Type);

            StatBonusAppliedEventArgs e = log.E as StatBonusAppliedEventArgs;

            Assert.NotNull(e);
            Assert.AreEqual(statType, e.Stat);
            Assert.AreEqual(bonusAmount, e.BonusAmount);
            Assert.AreEqual(isSecret, e.IsSecretStatBonus);
        }
        public void CorrectlySubscribesToMultipleFighters()
        {
            _output = new MockOutput();
            EventHandlerPrinter printer = new EventHandlerPrinter(_output);

            HumanFighter fighter2 = (HumanFighter)FighterFactory.GetFighter(FighterType.HumanControlledPlayer, 1);
            HumanFighter fighter3 = (HumanFighter)FighterFactory.GetFighter(FighterType.HumanControlledPlayer, 1);

            printer.Subscribe(_fighter, fighter2, fighter3);

            StatBonusAppliedEventArgs e = new StatBonusAppliedEventArgs(StatType.Defense, 2, false);

            _fighter.OnStatBonusApplied(e);
            fighter2.OnStatBonusApplied(e);
            fighter3.OnStatBonusApplied(e);

            MockOutputMessage[] outputs = _output.GetOutputs();

            Assert.AreEqual(3, outputs.Length);
        }
예제 #8
0
 private void _logStatBonusApplied(object sender, StatBonusAppliedEventArgs e)
 {
     Logs.Add(new EventLog(EventType.StatBonusApplied, sender, e));
 }
예제 #9
0
 public void OnStatBonusApplied(StatBonusAppliedEventArgs e)
 {
     StatBonusApplied?.Invoke(this, e);
 }