Пример #1
0
        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.");
        }
Пример #2
0
        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));
        }
Пример #3
0
        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));
        }
Пример #4
0
        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);
        }
Пример #5
0
        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;
        }
Пример #6
0
        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);
        }
Пример #7
0
        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();
        }
Пример #8
0
        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));
        }
Пример #9
0
        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));
        }
Пример #10
0
 public void SetUp()
 {
     player = BeingCreator.CreateBeing("Suvail");
     player.MoveTo(_gameState.Map.BeingMap);
     Equipper = SourceMe.The <Equipper>();
 }
Пример #11
0
 public IBeing BuildNewBeing(string entityWanted)
 {
     return(BeingCreator.CreateBeing(entityWanted));
 }