public void Ranged_physical_damage_on_Rot_skips_splashback_damage() { var asys = SourceMe.The <AttackSystem>(); var flameRat = BeingCreator.CreateBeing("flame rat"); var am = new AttackMethod("physical.impact.point", "1d3 +2"); var rot = new AreaRot(); flameRat.MoveTo((3, 3)); var rotmap = new RotMap { { rot, new Coord(8, 8) } }; Attack attack = new Attack { Attacker = flameRat, AttackMethod = am, Defender = rot, DefenseMethod = rot.GetDefenseMethod(am) }; Assert.That(asys.AttackQueue.Count, Is.EqualTo(0)); asys.CheckForSpecials(attack); Assert.That(asys.AttackQueue.Count, Is.EqualTo(0), "Because of distance, rot should not splashback attack."); }
public void Nature_does_not_strike_the_rot_via_other_sources() { GameState gs = new GameState(); var cm = new CompoundMap(); cm.RotMap = new RotMap(); gs.Map = cm; //var asys = new AttackSystem(); var asys = SourceMe.The <AttackSystem>(); asys.GameState = gs; var flameRat = BeingCreator.CreateBeing("flame rat"); var am = new AttackMethod("physical.impact.blunt", "1d3 +2"); var rot = new AreaRot(); Attack attack = new Attack { Attacker = flameRat, AttackMethod = am, Defender = rot, DefenseMethod = rot.GetDefenseMethod(am) }; Assert.That(asys.AttackQueue.Count, Is.EqualTo(0)); asys.CheckForSpecials(attack); Assert.That(asys.AttackQueue.Count, Is.EqualTo(1)); }
public void Nature_strikes_neighboring_rot_through_our_hero() { var player = BeingCreator.CreateBeing("Suvail"); var am = new AttackMethod("physical.impact.blunt", "1d3 +2"); var rot = new AreaRot(); Attack attack = new Attack { Attacker = player, AttackMethod = am, Defender = rot, DefenseMethod = rot.GetDefenseMethod(am) }; RotMap rotMap = new RotMap(); //...add two neighbor ABs, and one further away var nbor_1 = new AreaRot(); var nbor_2 = new AreaRot(); var stranger = new AreaRot(); rotMap.Add(rot, (2, 2)); rotMap.Add(nbor_1, (2, 3)); rotMap.Add(nbor_2, (3, 1)); rotMap.Add(stranger, (8, 2)); GameState gs = new GameState(); var cm = new CompoundMap(); cm.RotMap = rotMap; gs.Map = cm; var asys = new AttackSystem { GameState = gs }; SourceMe.InjectProperties(asys); Assert.That(asys.AttackQueue.Count, Is.EqualTo(0)); asys.CheckForSpecials(attack); Assert.That(asys.AttackQueue.Count, Is.EqualTo(4)); var splashBack = asys.AttackQueue.Dequeue(); Assert.NotNull(splashBack); var newAttack = asys.AttackQueue.Dequeue(); Assert.That(newAttack.Defender, Is.EqualTo(rot)); newAttack = asys.AttackQueue.Dequeue(); Assert.That(newAttack.Defender, Is.EqualTo(nbor_2)); newAttack = asys.AttackQueue.Dequeue(); Assert.That(newAttack.Defender, Is.EqualTo(nbor_1)); }
private IBeing Prep_being_at_coord(Coord coord, bool isPlayer = false) { string name = isPlayer ? "Suvail" : "Phredde"; var being = BeingCreator.CreateBeing(name); being.MoveTo(_gameState.Map.BeingMap); being.MoveTo(coord); being.IsPlayer = isPlayer; return(being); }
public void AddBeingFromDetails(string name, Color fg, Color bg, int glyph, string beingType) { if (WellKnownBeings.ContainsKey(name)) { throw new Exception("We've already got one."); } var b = BeingCreator.CreateBeing(fg, bg, name[0]); b.Name = name; b.BeingType = beingType; WellKnownBeings[name] = b; }
public IBeing CreatePlayer() { var player = BeingCreator.CreateBeing(Color.ForestGreen, Color.Black, '@'); player.Name = "Suvail"; player.AddComponent(new EntityViewSyncComponent()); player.IsPlayer = true; //0.2: remove these pre-equipped items player.AddToInventory(Equipper.BuildItem("hoe")); player.AddToInventory(Equipper.BuildItem("seed:Healer", 2)); return(player); }
public void SetUp() { __factory = Substitute.For <ISadConEntityFactory>(); _creator = new BeingCreator(); _creator.SadConEntityFactory = __factory; _serializer = new SerializerBuilder() .WithTypeConverter(new YConv_IBook(_creator)) .Build(); _deserializer = new DeserializerBuilder() .WithTypeConverter(new YConv_IBook(_creator)) .Build(); }
public void Nature_strikes_the_rot_through_our_hero() { GameState gs = new GameState(); var cm = new CompoundMap(); cm.RotMap = new RotMap(); gs.Map = cm; var asys = new AttackSystem(); asys.GameState = gs; SourceMe.InjectProperties(asys); var player = BeingCreator.CreateBeing("Suvail"); var am = new AttackMethod("physical.impact.blunt", "1d3 +2"); var rot = new AreaRot(); Attack attack = new Attack { Attacker = player, AttackMethod = am, Defender = rot, DefenseMethod = rot.GetDefenseMethod(am) }; Assert.That(asys.AttackQueue.Count, Is.EqualTo(0)); asys.CheckForSpecials(attack); Assert.That(asys.AttackQueue.Count, Is.EqualTo(2)); var splashBack = asys.AttackQueue.Dequeue(); Assert.NotNull(splashBack); var newAttack = asys.AttackQueue.Dequeue(); var newAM = newAttack.AttackMethod; var newAE = newAM.AttackEffects[0]; Assert.That(newAE.Type, Is.EqualTo("vital.nature.itself")); Assert.That(newAttack.Defender, Is.EqualTo(rot)); Assert.That(newAttack.Attacker, Is.EqualTo(player)); }
public void Physical_impact_on_Rot_causes_splashback_damage(string damageType, bool willSplashBack) { // Anyone directly physically assaulting rot is // hit with immediate vital.rot.toxin damage. var asys = SourceMe.The <AttackSystem>(); var flameRat = BeingCreator.CreateBeing("flame rat"); var am = new AttackMethod(damageType, "1d3 +2"); var rot = new AreaRot(); Attack attack = new Attack { Attacker = flameRat, AttackMethod = am, Defender = rot, DefenseMethod = rot.GetDefenseMethod(am) }; Assert.That(asys.AttackQueue.Count, Is.EqualTo(0)); asys.CheckForSpecials(attack); int newAttackCount = willSplashBack ? 1 : 0; Assert.That(asys.AttackQueue.Count, Is.EqualTo(newAttackCount)); if (!willSplashBack) { return; } var newAttack = asys.AttackQueue.Dequeue(); var newAM = newAttack.AttackMethod; var newAE = newAM.AttackEffects[0]; Assert.That(newAE.Type, Is.EqualTo("vital.rot.toxin")); Assert.That(newAttack.Defender, Is.EqualTo(flameRat)); Assert.That(newAttack.Attacker, Is.EqualTo(rot)); }
public void SetUp() { player = BeingCreator.CreateBeing("Suvail"); player.MoveTo(_gameState.Map.BeingMap); Equipper = SourceMe.The <Equipper>(); }
public IBeing BuildNewBeing(string entityWanted) { return(BeingCreator.CreateBeing(entityWanted)); }