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)); }
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); }
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)); }
/// <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; } } } }