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 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_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)); }
public void CanRT_AreaRot() { var rot = new AreaRot(22) { Health = 14 }; var yaml = _serzr.Serialize(rot); Assert.That(yaml, Is.Not.Null); var newRot = _deszr.Deserialize <AreaRot>(yaml); Assert.That(newRot.ID, Is.EqualTo(22)); Assert.That(newRot.Health, Is.EqualTo(14)); }
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 SetUp() { __factory .When(f => f.SetIEntityOnPort(Arg.Any <IEntityInitPort>())) .Do(ci => { var pi = ci.Arg <IEntityInitPort>(); var ie = Substitute.For <IEntity>(); var comps = Substitute.For <ObservableCollection <IConsoleComponent> >(); ie.Components.Returns(comps); pi.SadConEntity = ie; }); Engine.Cosmogenesis("tag map!", __factory); _mapLoader = SourceMe.The <MapLoader>(); _serzr = _mapLoader.GetSerializer(); _deszr = _mapLoader.GetDeserializer(); AreaRot.SetIDGenerator(new IDGenerator()); }
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)); }