Exemple #1
0
        public void LearnSkillTest()
        {
            var ganger = new Ganger()
            {
                GangerId = "1"
            };

            var skill = new Skill()
            {
                SkillId = 1
            };

            _mockGangerProvider.Setup(gp => gp.CanLearnSkill(It.IsAny <string>(), It.IsAny <string>()))
            .Returns(true);

            _mockSkillManager.Setup(sm => sm.GetRandomSkillByType(It.IsAny <SkillType>()))
            .Returns(skill);

            var gangerSkill = _gangerManager.LearnSkill(ganger, "advancementId", SkillType.Agility);

            _mockGangerProvider.Verify(gp => gp.AddGangerSkill(
                                           It.Is <string>(g => g == ganger.GangerId),
                                           It.Is <int>(s => s == skill.SkillId)), Times.Once);

            _mockGangerProvider.Verify(gp => gp.RemoveGangerAdvancement(
                                           It.Is <string>(g => g == ganger.GangerId),
                                           It.Is <string>(s => s == "advancementId")), Times.Once);

            Assert.IsTrue(ganger.Skills.Contains(skill));
            Assert.AreEqual(ganger.GangerId, gangerSkill.GangerId);
            Assert.AreEqual(skill.SkillId, gangerSkill.SkillId);
        }
Exemple #2
0
        /// <summary>
        /// Add ganger
        /// </summary>
        /// <param name="ganger">Ganger</param>
        /// <returns>Added Ganger</returns>
        public Ganger AddGanger(Ganger ganger)
        {
            var gangerWithStats = CreateGanger(ganger.Name, ganger.GangerType);

            gangerWithStats.GangId = ganger.GangId;
            return(_gangerProvider.AddGanger(gangerWithStats));
        }
Exemple #3
0
        /// <summary>
        /// Learn skill
        /// </summary>
        /// <param name="ganger">The ganger</param>
        /// <param name="advancementId">The advancement ID. Used to verify that the
        /// ganger is able to learn a new skill.</param>
        /// <param name="type">Skill type</param>
        /// <returns>Ganger skill</returns>
        public GangerSkill LearnSkill(Ganger ganger, string advancementId, SkillType type)
        {
            if (!_gangerProvider.CanLearnSkill(ganger.GangerId, advancementId))
            {
                throw new HivemindException("Invalid advancement ID.");
            }

            // TODO: If the ganger knows all the skills of that category, we return for now.
            if (ganger.Skills.Where(s => s.SkillType == type).Count() >= 6)
            {
                return(null);
            }

            var skill = _skillManager.GetRandomSkillByType(type);

            while (ganger.Skills.Contains(skill))
            {
                skill = _skillManager.GetRandomSkillByType(type);
            }

            _gangerProvider.AddGangerSkill(ganger.GangerId, skill.SkillId);

            _gangerProvider.RemoveGangerAdvancement(ganger.GangerId, advancementId);

            var skills = ganger.Skills.ToList();

            skills.Add(skill);
            ganger.Skills = skills;

            return(new GangerSkill
            {
                SkillId = skill.SkillId,
                GangerId = ganger.GangerId,
            });
        }
Exemple #4
0
        public void SporeCaveEffectTest()
        {
            var effect = _territoryManager.GetTerritoryEffect((int)TerritoryEnum.SporeCave);

            var ganger = new Ganger();
            var report = effect(new TerritoryWorkStatus()
            {
                Roll          = 20,
                Ganger        = ganger,
                TerritoryName = "Spore Cave"
            });

            Assert.AreEqual(20, report.Income);
            Assert.AreEqual("Spore Cave", report.TerritoryName);
            Assert.NotNull(report.Description);
            Assert.IsTrue(ganger.HasSporeSickness);

            report = effect(new TerritoryWorkStatus()
            {
                Roll          = 30,
                TerritoryName = "Spore Cave"
            });

            Assert.AreEqual(30, report.Income);
            Assert.AreEqual("Spore Cave", report.TerritoryName);
        }
Exemple #5
0
        public void CreateGangerWithInvalidValues()
        {
            var ganger = new Ganger()
            {
                Name           = "TestGanger",
                Move           = -1,
                WeaponSkill    = -1,
                BallisticSkill = -1,
                Strength       = -1,
                Toughness      = -1,
                Wounds         = -1,
                Initiative     = -1,
                Attack         = -1,
                Leadership     = -1
            };

            Assert.AreEqual(1, ganger.Move);
            Assert.AreEqual(1, ganger.WeaponSkill);
            Assert.AreEqual(1, ganger.BallisticSkill);
            Assert.AreEqual(1, ganger.Strength);
            Assert.AreEqual(1, ganger.Toughness);
            Assert.AreEqual(1, ganger.Wounds);
            Assert.AreEqual(1, ganger.Initiative);
            Assert.AreEqual(1, ganger.Attack);
            Assert.AreEqual(1, ganger.Leadership);
        }
Exemple #6
0
        public void ChemPitEffectTest()
        {
            var effect = _territoryManager.GetTerritoryEffect((int)TerritoryEnum.Chempit);

            var report = effect(new TerritoryWorkStatus()
            {
                TerritoryName = "Chempit",
                Roll          = 6
            });

            Assert.AreEqual("Chempit", report.TerritoryName);
            Assert.AreEqual(6, report.Income);

            var ganger = new Ganger();

            report = effect(new TerritoryWorkStatus()
            {
                TerritoryName = "Chempit",
                Roll          = 12,
                Ganger        = ganger
            });

            Assert.AreEqual("Chempit", report.TerritoryName);
            Assert.AreEqual(0, report.Income);
            Assert.IsTrue(ganger.HasHorribleScars);
            Assert.NotNull(report.Description);
        }
Exemple #7
0
        public void Setup()
        {
            _ganger = new Ganger()
            {
                GangerId       = "1",
                Name           = "Ganger",
                GangId         = "Gang1",
                Move           = 4,
                WeaponSkill    = 3,
                BallisticSkill = 3,
                Strength       = 3,
                Toughness      = 3,
                Wounds         = 1,
                Attack         = 1,
                Initiative     = 7,
                Leadership     = 7,
                Active         = true,
                Experience     = 20,
                Cost           = 50,
                GangerType     = GangerType.Ganger,
            };

            _mockInjuryProvider = new Mock <IInjuryProvider>();
            _mockDiceRoller     = new Mock <IDiceRoller>();
            _injuryManager      = new InjuryManager(_mockInjuryProvider.Object, _mockDiceRoller.Object);

            _mockInjuryProvider.Setup(m => m.GetInjuryById(It.IsAny <int>()))
            .Returns(new Injury());
        }
Exemple #8
0
        public void UpdateGangerTest()
        {
            var ganger = new Ganger();

            _gangerManager.UpdateGanger(ganger);
            _mockGangerProvider.Verify(m => m.UpdateGanger(It.Is <Ganger>(g => g == ganger)), Times.Once);
        }
Exemple #9
0
        public void InvalidGetCostTest()
        {
            var ganger = new Ganger()
            {
                GangerType = (GangerType)(-1),
            };

            Assert.Throws <HivemindException>(() => ganger.GetCost());
        }
Exemple #10
0
        public void GetLeaderBonusTest(GangerType type, GameType gameType, bool hasWon, bool isAttacker, int expectedValue)
        {
            var ganger = new Ganger()
            {
                GangerType = type
            };

            var result = _experienceService.GetLeaderBonus(ganger, gameType, hasWon, isAttacker);

            Assert.AreEqual(result, expectedValue);
        }
Exemple #11
0
        private Ganger HasImpressiveScars(Ganger ganger)
        {
            // should only apply once
            if (!ganger.HasImpressiveScars)
            {
                ganger.Leadership += 1;
            }

            ganger.HasImpressiveScars = true;
            return(ganger);
        }
Exemple #12
0
        private Ganger HasPartiallyDeafened(Ganger ganger)
        {
            if (ganger.IsDeafened)
            {
                ganger.Leadership -= 1;
                return(ganger);
            }

            ganger.IsDeafened = true;
            return(ganger);
        }
Exemple #13
0
        private Ganger HasBlindedInOneEye(Ganger ganger)
        {
            if (ganger.IsOneEyed)
            {
                ganger.Active = false;
                return(ganger);
            }

            ganger.BallisticSkill -= 1;
            ganger.IsOneEyed       = true;
            return(ganger);
        }
Exemple #14
0
        public void GetNumberOfAdvanceRollsTest(int startingExperience, int gainedExperience, int expectedAdvanceRolls)
        {
            var ganger = new Ganger()
            {
                Name       = "TestGanger",
                Experience = startingExperience
            };

            var advanceRolls = _experienceService.GetNumberOfAdvanceRolls(ganger, gainedExperience);

            Assert.AreEqual(expectedAdvanceRolls, advanceRolls);
        }
Exemple #15
0
 private void DoAssertions(Ganger ganger, int move, int ws, int bs, int strength, int toughness, int wounds, int attack, int initiative, int leadership, bool active)
 {
     Assert.AreEqual(move, ganger.Move);
     Assert.AreEqual(ws, ganger.WeaponSkill);
     Assert.AreEqual(bs, ganger.BallisticSkill);
     Assert.AreEqual(strength, ganger.Strength);
     Assert.AreEqual(toughness, ganger.Toughness);
     Assert.AreEqual(wounds, ganger.Wounds);
     Assert.AreEqual(attack, ganger.Attack);
     Assert.AreEqual(initiative, ganger.Initiative);
     Assert.AreEqual(leadership, ganger.Leadership);
     Assert.AreEqual(active, ganger.Active);
 }
Exemple #16
0
        /// <summary>
        /// Increase a statistic
        /// </summary>
        /// <param name="ganger">Ganger</param>
        /// <param name="stat">Statistic</param>
        /// <param name="interval">Interval</param>
        /// <returns>Updated ganger</returns>
        public Ganger IncreaseStat(Ganger ganger, GangerStatistics stat, int interval = 1)
        {
            switch (stat)
            {
            case GangerStatistics.Move:
                ganger.Move += interval;
                break;

            case GangerStatistics.WeaponSkill:
                ganger.WeaponSkill += interval;
                break;

            case GangerStatistics.BallisticSkill:
                ganger.BallisticSkill += interval;
                break;

            case GangerStatistics.Strength:
                ganger.Strength += interval;
                break;

            case GangerStatistics.Toughness:
                ganger.Toughness += interval;
                break;

            case GangerStatistics.Attack:
                ganger.Attack += interval;
                break;

            case GangerStatistics.Wounds:
                ganger.Wounds += interval;
                break;

            case GangerStatistics.Initiative:
                ganger.Initiative += interval;
                break;

            case GangerStatistics.Leadership:
                ganger.Leadership += interval;
                break;

            default:
                break;
            }

            UpdateGanger(ganger);
            return(ganger);
        }
Exemple #17
0
        /// <summary>
        /// Add ganger
        /// </summary>
        /// <param name="ganger">Ganger</param>
        /// <returns>Added ganger</returns>
        public Ganger AddGanger(Ganger ganger)
        {
            using (var connection = new SqlConnection(_connectionString))
            {
                using (var command = new SqlCommand("Gangers_AddGanger", connection))
                {
                    connection.Open();

                    command.CommandType = CommandType.StoredProcedure;
                    var gangerId = command.Parameters.Add("@GangerId", SqlDbType.NVarChar, 100);
                    gangerId.Direction = ParameterDirection.Output;
                    command.Parameters.Add("@GangId", SqlDbType.NVarChar, 100).Value   = ganger.GangId;
                    command.Parameters.Add("@Name", SqlDbType.VarChar).Value           = ganger.Name;
                    command.Parameters.Add("@Type", SqlDbType.Int).Value               = (int)ganger.GangerType;
                    command.Parameters.Add("@Move", SqlDbType.Int).Value               = ganger.Move;
                    command.Parameters.Add("@WeaponSkill", SqlDbType.Int).Value        = ganger.WeaponSkill;
                    command.Parameters.Add("@BallisticSkill", SqlDbType.Int).Value     = ganger.BallisticSkill;
                    command.Parameters.Add("@Strength", SqlDbType.Int).Value           = ganger.Strength;
                    command.Parameters.Add("@Toughness", SqlDbType.Int).Value          = ganger.Toughness;
                    command.Parameters.Add("@Wounds", SqlDbType.Int).Value             = ganger.Wounds;
                    command.Parameters.Add("@Initiative", SqlDbType.Int).Value         = ganger.Initiative;
                    command.Parameters.Add("@Attack", SqlDbType.Int).Value             = ganger.Attack;
                    command.Parameters.Add("@Leadership", SqlDbType.Int).Value         = ganger.Leadership;
                    command.Parameters.Add("@Experience", SqlDbType.Int).Value         = ganger.Experience;
                    command.Parameters.Add("@Active", SqlDbType.Int).Value             = ganger.Active;
                    command.Parameters.Add("@IsOneEyed", SqlDbType.Int).Value          = ganger.IsOneEyed;
                    command.Parameters.Add("@IsDeafened", SqlDbType.Int).Value         = ganger.IsDeafened;
                    command.Parameters.Add("@IsOneHanded", SqlDbType.Int).Value        = ganger.IsOneHanded;
                    command.Parameters.Add("@RightHandFingers", SqlDbType.Int).Value   = ganger.RightHandFingers;
                    command.Parameters.Add("@LeftHandFingers", SqlDbType.Int).Value    = ganger.LeftHandFingers;
                    command.Parameters.Add("@HasHorribleScars", SqlDbType.Int).Value   = ganger.HasHorribleScars;
                    command.Parameters.Add("@HasImpressiveScars", SqlDbType.Int).Value = ganger.HasHorribleScars;
                    command.Parameters.Add("@HasOldBattleWound", SqlDbType.Int).Value  = ganger.HasOldBattleWound;
                    command.Parameters.Add("@HasHeadWound", SqlDbType.Int).Value       = ganger.HasHorribleScars;
                    command.Parameters.Add("@IsCaptured", SqlDbType.Int).Value         = ganger.HasHorribleScars;
                    command.Parameters.Add("@HasBitterEnmity", SqlDbType.Int).Value    = ganger.HasHorribleScars;
                    command.Parameters.Add("@Cost", SqlDbType.Int).Value               = ganger.Cost;

                    command.ExecuteNonQuery();
                    ganger.GangerId = (string)gangerId.Value;

                    return(ganger);
                }
            }
        }
Exemple #18
0
        public int GetLeaderBonus(Ganger ganger, GameType gameType, bool hasWon, bool isAttacker)
        {
            if (ganger.GangerType != GangerType.LEADER)
            {
                return(0);
            }

            switch (gameType)
            {
            case GameType.GANG_FIGHT:
            case GameType.SCAVENGERS:
            case GameType.AMBUSH:
                return(hasWon ? 10 : 0);

            case GameType.RESCUE_MISSION:
                return(hasWon && !isAttacker ? 10 : 0);

            default:
                return(0);
            }
        }
Exemple #19
0
        /// <summary>
        /// Gets the leader's bonus after a battle.
        /// </summary>
        /// <param name="ganger">Leader</param>
        /// <param name="gameType">Game type</param>
        /// <param name="hasWon">True if game won</param>
        /// <param name="isAttacker">True if gang was attacking</param>
        /// <returns>Leader bonus</returns>
        public int GetLeaderBonus(Ganger ganger, GameType gameType, bool hasWon, bool isAttacker)
        {
            if (ganger.GangerType != GangerType.Leader)
            {
                return(0);
            }

            switch (gameType)
            {
            case GameType.GangFight:
            case GameType.Scavengers:
            case GameType.Ambush:
                return(hasWon ? 10 : 0);

            case GameType.RescueMission:
                return(hasWon && !isAttacker ? 10 : 0);

            default:
                return(0);
            }
        }
        public bool AddGangerPosition(string argName, int hitpoints, Mindset argMindSet, bool leader)
        {
            Ganger ganger = new Ganger();
            ganger.gangerName = argName;
            ganger.gangerHitpoints = hitpoints;
            ganger.mindSet = argMindSet;
            ganger.leader = leader;

            foreach (Position pos in positions)
            {
                if (pos.row == (int)argMindSet)
                {
                    if (pos.occupier == null)
                    {

                        if (pos.placeInLine != noOfPositionsX - 2 && pos.placeInLine != 1)
                        {
                            if (pos.placeInLine != noOfPositionsX - 1 && pos.placeInLine != 0)
                            {
                            }
                            else
                            {
                                if (priorities[pos.row] == 1)
                                {
                                    pos.occupier = ganger;
                                    return true;
                                }
                            }
                        }
                        else
                        {
                            pos.occupier = ganger;
                            priorities[pos.row] = 1;
                            return true;
                        }
                    }
                }
            }
            return false;
        }
Exemple #21
0
        public void GetCostTest(GangerType gangerType, int[] weaponCosts, int expectedCost)
        {
            var ganger = new Ganger()
            {
                GangerType = gangerType,
            };

            var weapons = new List <GangerWeapon>();

            foreach (var cost in weaponCosts)
            {
                weapons.Add(new GangerWeapon()
                {
                    Cost = cost
                });
            }

            ganger.Weapons = weapons;
            ganger.GetCost();

            Assert.AreEqual(expectedCost, ganger.Cost);
        }
Exemple #22
0
        private Ganger HasHandInjury(Ganger ganger)
        {
            ganger.WeaponSkill -= 1;
            if (_diceRoller.RollDie() >= 3)
            {
                // right hand
                ganger.RightHandFingers -= _diceRoller.RollDice(3, 1);
                if (ganger.RightHandFingers <= 0)
                {
                    if (ganger.IsOneHanded)
                    {
                        ganger.Active = false;
                        return(ganger);
                    }

                    ganger.IsOneHanded = true;
                }

                return(ganger);
            }
            else
            {
                ganger.LeftHandFingers -= _diceRoller.RollDice(3, 1);
                if (ganger.LeftHandFingers <= 0)
                {
                    if (ganger.IsOneHanded)
                    {
                        ganger.Active = false;
                        return(ganger);
                    }

                    ganger.IsOneHanded = true;
                }

                return(ganger);
            }
        }
Exemple #23
0
        public void IncreaseStatTest(GangerStatistics stat)
        {
            var ganger = new Ganger()
            {
                Move           = 1,
                WeaponSkill    = 1,
                BallisticSkill = 1,
                Strength       = 1,
                Toughness      = 1,
                Wounds         = 1,
                Attack         = 1,
                Leadership     = 1,
                Initiative     = 1,
            };

            var updated = _gangerManager.IncreaseStat(ganger, stat);

            var properties = updated.GetType().GetProperties();

            foreach (var prop in properties)
            {
                if (!Enum.TryParse <GangerStatistics>(prop.Name, out var result))
                {
                    continue;
                }

                if (prop.Name == Enum.GetName(typeof(GangerStatistics), stat))
                {
                    Assert.AreEqual(2, prop.GetValue(updated));
                }
                else
                {
                    Assert.AreEqual(1, prop.GetValue(updated));
                }
            }
        }
Exemple #24
0
        public void GangerWeaponsTest()
        {
            var gangId = "321";

            var ganger = new Ganger()
            {
                GangerId = "123",
                GangId   = gangId
            };

            var gangWeapon = new GangWeapon()
            {
                GangId = gangId,
                Weapon = new Weapon()
                {
                    WeaponId = (WeaponEnum)1
                },
                Cost = 10
            };

            _gangerProvider.Setup(gp => gp.GetByGangerId(ganger.GangerId))
            .Returns(ganger);

            var addedGangWeapon = _weaponManager.AddGangWeapon(gangWeapon);

            Assert.AreEqual(0, _weaponManager.GetGangerWeapons(ganger.GangerId).Count());

            var returnedWeapon = _weaponManager.AddGangerWeapon(ganger.GangerId, addedGangWeapon.GangWeaponId);

            Assert.AreEqual("AAAA-BBBB-CCCC", returnedWeapon.GangerWeaponId);
            Assert.AreEqual(1, _weaponManager.GetGangerWeapons(ganger.GangerId).Count());

            _weaponManager.RemoveGangerWeapon(ganger.GangerId, "AAAA-BBBB-CCCC");
            Assert.AreEqual(0, _weaponManager.GetGangerWeapons(ganger.GangerId).Count());
            Assert.AreEqual(1, _weaponManager.GetGangStash(gangId).Count());
        }
Exemple #25
0
 private Ganger HasSurvivedAgainstTheOdds(Ganger ganger)
 {
     // TODO: Revisit this once experience is done
     ganger.Experience += _diceRoller.RollDie();
     return(ganger);
 }
Exemple #26
0
 private Ganger SporeSickness(Ganger ganger)
 {
     ganger.HasSporeSickness = true;
     return(ganger);
 }
Exemple #27
0
 private Ganger IsCaptured(Ganger ganger)
 {
     ganger.IsCaptured = true;
     return(ganger);
 }
Exemple #28
0
 private Ganger HasShellShock(Ganger ganger)
 {
     ganger.Initiative -= 1;
     return(ganger);
 }
Exemple #29
0
 private Ganger HasHorribleScars(Ganger ganger)
 {
     ganger.HasHorribleScars = true;
     return(ganger);
 }
Exemple #30
0
 private Ganger HasBitterEnmity(Ganger ganger)
 {
     ganger.HasBitterEnmity = true;
     return(ganger);
 }
Exemple #31
0
 private Ganger HasOldBattleWound(Ganger ganger)
 {
     ganger.HasOldBattleWound = true;
     return(ganger);
 }