public void ItShouldRemoveSpecifiedWeapon()
        {
            var fighter = new Fighter
            {
                Arms      = 2,
                Attack    = 1,
                Endurance = 1,
                Strength  = 5
            };

            var weapon1 = new Weapon {
                HandsToHold = 1, HitPower = 4, Speed = 100
            };
            var weapon2 = new Weapon {
                HandsToHold = 1, HitPower = 10, Speed = 5
            };

            fighter.AddWeapon(weapon1);
            fighter.AddWeapon(weapon2);

            fighter.RemoveWeapon(weapon1);

            Assert.That(fighter.Weapons.Count, Is.EqualTo(1));
            Assert.That(fighter.Weapons[0], Is.EqualTo(weapon2));
        }
예제 #2
0
        public void AndFighterIsOutOfHandsItShouldThrowException()
        {
            var fighter = new Fighter
            {
                Arms      = 2,
                Attack    = 1,
                Endurance = 1,
                Strength  = 5
            };

            var weapon1 = new Weapon {
                HandsToHold = 1, HitPower = 4, Speed = 100
            };
            var weapon2 = new Weapon {
                HandsToHold = 2, HitPower = 10, Speed = 5
            };

            fighter.AddWeapon(weapon1);

            Assert.Throws <NotEnoughArmsException>(() => fighter.AddWeapon(weapon2));
        }
        public void ItShouldIncreaseArmsAvailable()
        {
            var fighter = new Fighter
            {
                Arms      = 2,
                Attack    = 1,
                Endurance = 1,
                Strength  = 5
            };

            var weapon1 = new Weapon {
                HandsToHold = 1, HitPower = 4, Speed = 100
            };
            var weapon2 = new Weapon {
                HandsToHold = 1, HitPower = 10, Speed = 5
            };

            fighter.AddWeapon(weapon1);
            fighter.AddWeapon(weapon2);

            fighter.RemoveWeapon(weapon1);
        }
예제 #4
0
        public void AndFighterHasEnoughHandsItShouldAddWeapon()
        {
            var fighter = new Fighter
            {
                Arms      = 2,
                Attack    = 1,
                Endurance = 1,
                Strength  = 5
            };

            var weapon1 = new Weapon {
                HandsToHold = 1, HitPower = 4, Speed = 100
            };
            var weapon2 = new Weapon {
                HandsToHold = 1, HitPower = 10, Speed = 5
            };

            fighter.AddWeapon(weapon1);
            fighter.AddWeapon(weapon2);

            Assert.That(fighter.Weapons.Count, Is.EqualTo(2));
        }
예제 #5
0
        /// <summary>
        /// Execute a power given
        /// </summary>
        /// <param name="power">Power to execute</param>
        /// <param name="caster">Fighter that casted the power</param>
        /// <param name="target">Target location of the power</param>
        /// <param name="basic">Basic location of the spell if existing</param>
        private void ExecutePower(Power power, Fighter caster, Location target, Location basic)
        {
            //ConeX => increment area each X cases
            //TODO Add effects (entity/transport/lineDamage/lineStateCase/coneDamage/coneStateCase)
            foreach (KeyValuePair <string, int> effect in power.effects)
            {
                if (!effect.Key.Contains("Path") && !effect.Key.Contains("Cast"))
                {
                    string[] effectType = effect.Key.Split(';');
                    switch (effectType[0])
                    {
                    case "weapon":      //Summon weapon
                        if (Globals.currentScene.cases[target.x, target.y].entity != null)
                        {
                            if (Globals.currentScene.cases[target.x, target.y].entity.type != "npc")
                            {
                                Fighter  fighter = ((Fighter)Globals.currentScene.cases[target.x, target.y].entity);
                                string[] options = power.options[0].Split(';');
                                for (int i = 0; i < options.Length; ++i)
                                {
                                    foreach (Weapon weapon in Globals.weapons)
                                    {
                                        if (weapon.name == options[i])
                                        {
                                            fighter.AddWeapon(weapon);
                                            Debug.Log(fighter.name + ":" + weapon.name);
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                        break;

                    case "areaDamage":
                    case "damage":
                    case "stateCase":
                        List <Case> cases = Globals.visibilityManager.Compute(6, target, power.area);
                        foreach (Case c in cases)
                        {
                            if (effectType[0] == "stateCase")
                            {
                                c.ChangeState(effectType[1]);
                                Globals.cameraManager.ChangeObject("grid", c.x + ";" + c.y, "redraw");
                            }
                            else if (c.entity != null)
                            {
                                int dmg = effect.Value + (caster.boosts.ContainsKey(effectType[1] + "Damage") ? caster.boosts[effectType[1] + "Damage"] : 0);
                                c.entity.ChangeHP(effectType[0] == "damage" ? dmg : dmg - (power.area - Math.Abs(c.x - target.x) + Math.Abs(c.y - target.y)), effectType[1]);
                            }
                        }
                        break;

                    case "transport":
                        Globals.currentScene.cases[target.x, target.y].ChangeState(effectType[1]);
                        Globals.cameraManager.ChangeObject("grid", target.x + ";" + target.y, "redraw");
                        break;
                    }
                }
            }
        }