Beispiel #1
0
 public override void Start(ActionFinishHandler handler)
 {
     effect = new FrozenEffect(target.x, target.y, 0);
     bottomEffectLayer.elements.Add(effect);
     target.paused = true;
     handler(null);
     base.Start(handler);
 }
 private void Awake()
 {
     _rotationController  = FindObjectOfType <RotationController>();
     _eatingController    = FindObjectOfType <EatingBugsController>();
     _particlesController = FindObjectOfType <ParticlesController>();
     _frozenEffect        = FindObjectOfType <FrozenEffect>();
     _enemyEffects        = FindObjectOfType <EnemyEffects>();
 }
Beispiel #3
0
        public void FrostboltSpellUnitTest()
        {
            Player player = new Player("test", PlayerClassType.Mage)
            {
                MaxManaPoints = 100, ManaPoints = 100
            };

            GearHelper.EquipInitialGear(player);
            OutputHelper.Display.ClearUserOutput();
            Monster monster = new Monster(3, MonsterType.Demon)
            {
                HitPoints = 100, MaxHitPoints = 100, FrostResistance = 0
            };

            MonsterBuilder.BuildMonster(monster);
            foreach (IItem item in monster.MonsterItems.Where(item => item is IEquipment eItem && eItem.Equipped))
            {
                IEquipment eItem = item as IEquipment;
                eItem.Equipped = false;
            }
            string[] inputInfo  = new[] { "spell", "frostbolt" };
            int      spellIndex = player.Spellbook.FindIndex(
                f => f.SpellCategory == SpellType.Frostbolt);

            PlayerHelper.SpellInfo(player, inputInfo);
            Assert.AreEqual("Frostbolt", OutputHelper.Display.Output[0][2]);
            Assert.AreEqual("Rank: 1", OutputHelper.Display.Output[1][2]);
            Assert.AreEqual("Mana Cost: 25", OutputHelper.Display.Output[2][2]);
            Assert.AreEqual("Instant Damage: 15", OutputHelper.Display.Output[3][2]);
            Assert.AreEqual("Frost damage will freeze opponent for 2 rounds.",
                            OutputHelper.Display.Output[4][2]);
            Assert.AreEqual("Frozen opponents take 1.5x physical, arcane and frost damage.",
                            OutputHelper.Display.Output[5][2]);
            OutputHelper.Display.ClearUserOutput();
            string[] input     = new[] { "cast", "frostbolt" };
            string   spellName = InputHelper.ParseInput(input);

            Assert.AreEqual("frostbolt", spellName);
            player.PlayerWeapon.Durability = 100;
            double baseDamage = player.PhysicalAttack(monster);

            player.CastSpell(monster, spellName);
            Assert.AreEqual(player.MaxManaPoints - player.Spellbook[spellIndex].ManaCost, player.ManaPoints);
            Assert.AreEqual(85, monster.HitPoints);
            Assert.AreEqual(1, monster.Effects[0].CurrentRound);
            Assert.AreEqual(2, monster.Effects[0].MaxRound);
            string attackString = $"You hit the {monster.Name} for {player.Spellbook[spellIndex].Offensive.Amount} frost damage.";

            Assert.AreEqual(attackString, OutputHelper.Display.Output[0][2]);
            string frozenString = $"The {monster.Name} is frozen. Physical, frost and arcane damage to it will be increased by 50%!";

            Assert.AreEqual(frozenString, OutputHelper.Display.Output[1][2]);
            FrozenEffect frozenEffect           = monster.Effects[0] as FrozenEffect;
            int          monsterHitPointsBefore = monster.HitPoints;
            double       totalBaseDamage        = 0.0;
            double       totalFrozenDamage      = 0.0;
            double       multiplier             = frozenEffect.EffectMultiplier;

            for (int i = 2; i < 4; i++)
            {
                frozenEffect.ProcessRound();
                Assert.AreEqual(i, monster.Effects[0].CurrentRound);
                Assert.AreEqual(frozenString, OutputHelper.Display.Output[i][2]);
                player.PlayerWeapon.Durability = 100;
                double frozenDamage = player.PhysicalAttack(monster);
                monster.HitPoints -= (int)frozenDamage;
                totalBaseDamage   += baseDamage;
                totalFrozenDamage += frozenDamage;
            }
            GameHelper.RemovedExpiredEffectsAsync(monster);
            Thread.Sleep(1000);
            Assert.AreEqual(false, monster.Effects.Any());
            int finalBaseDamageWithMod = (int)(totalBaseDamage * multiplier);
            int finalTotalFrozenDamage = (int)totalFrozenDamage;

            Assert.AreEqual(finalTotalFrozenDamage, finalBaseDamageWithMod, 14);
            Assert.AreEqual(monster.HitPoints, monsterHitPointsBefore - (int)totalFrozenDamage);
        }
Beispiel #4
0
        public void FrostboltSpellUnitTest()
        {
            Player player = new Player("test", PlayerClassType.Mage)
            {
                HitPoints = 200, MaxHitPoints = 200, FrostResistance = 0
            };

            OutputHelper.Display.ClearUserOutput();
            Monster monster = new Monster(1, MonsterType.Skeleton);

            while (monster.SkeletonCategory != SkeletonType.Mage)
            {
                monster = new Monster(1, MonsterType.Skeleton);
            }
            MonsterBuilder.BuildMonster(monster);
            monster.MonsterWeapon.CritMultiplier = 1;             // Remove crit chance to remove "noise" in test
            int spellIndex = monster.Spellbook.FindIndex(
                f => f.SpellCategory == SpellType.Frostbolt);

            foreach (IItem item in player.Inventory.Where(item => item is IEquipment eItem && eItem.Equipped))
            {
                IEquipment eItem = item as IEquipment;
                eItem.Equipped = false;
            }
            monster.Spellbook[spellIndex].CastFrostOffense(monster, player, spellIndex);
            int spellCost = monster.Spellbook[spellIndex].EnergyCost;

            Assert.AreEqual(monster.MaxEnergyPoints - spellCost, monster.EnergyPoints);
            int spellDamage = monster.Spellbook[spellIndex].Offensive.Amount;

            Assert.AreEqual(player.MaxHitPoints - spellDamage, player.HitPoints);
            int spellMaxRounds = monster.Spellbook[spellIndex].Offensive.AmountMaxRounds;

            Assert.AreEqual(spellMaxRounds, player.Effects[0].MaxRound);
            string attackString = $"The {monster.Name} conjures up a frostbolt and launches it at you!";

            Assert.AreEqual(attackString, OutputHelper.Display.Output[0][2]);
            string attackSuccessString = $"The {monster.Name} hits you for {spellDamage} frost damage.";

            Assert.AreEqual(attackSuccessString, OutputHelper.Display.Output[1][2]);
            const string frozenString = "You are frozen. Physical, frost and arcane damage to you will be increased by 50%!";

            Assert.AreEqual(frozenString, OutputHelper.Display.Output[2][2]);
            Assert.AreEqual(true, player.Effects[0] is FrozenEffect);
            FrozenEffect frozenEffect = player.Effects[0] as FrozenEffect;

            // Remove all spells after casting to make monster decide to use physical attack for unit test
            monster.Spellbook = null;
            for (int i = 2; i < 4; i++)
            {
                int    playerHitPointsBefore = player.HitPoints;
                double multiplier            = frozenEffect.EffectMultiplier;
                int    baseDamage            = monster.MonsterWeapon.RegDamage;
                int    frozenDamage          = (int)(monster.MonsterWeapon.RegDamage * multiplier);
                Assert.AreEqual(frozenDamage, baseDamage * multiplier, 1);
                monster.MonsterWeapon.Durability = 100;
                monster.Attack(player);
                Assert.AreEqual(i, player.Effects[0].CurrentRound);
                Assert.AreEqual(frozenString, OutputHelper.Display.Output[i][2]);
                Assert.AreEqual(playerHitPointsBefore - frozenDamage, player.HitPoints, 7);
            }
            GameHelper.RemovedExpiredEffectsAsync(player);
            Thread.Sleep(1000);
            Assert.AreEqual(false, player.Effects.Any());
        }