예제 #1
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));
        }
예제 #2
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.");
        }
예제 #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));
        }
        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));
        }
예제 #5
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));
        }
        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());
        }
예제 #7
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));
        }