Exemplo n.º 1
0
        public void GetGangerTest()
        {
            var gangerId = "1";

            _gangerManager.GetGanger(gangerId);
            _mockGangerProvider.Verify(m => m.GetByGangerId(It.Is <string>(s => s == gangerId)), Times.Once);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Determine experience gains for a gang after a battle.
        /// </summary>
        /// <param name="battleReport">Battle report</param>
        /// <returns>Gang level up report</returns>
        public GangLevelUpReport ProcessExperience(BattleReport battleReport)
        {
            var gang          = _gangManager.GetGang(battleReport.GangId);
            var underdogBonus = GetUnderdogBonus(gang.GangRating, battleReport.OpponentGangRating, battleReport.HasWon);

            var advancements = new List <GangerLevelUpReport>();

            foreach (var gangerStats in battleReport.GangBattleStats)
            {
                var ganger     = _gangerManager.GetGanger(gangerStats.GangerId);
                var experience = 0;
                experience += GetLeaderBonus(ganger, battleReport.GameType, battleReport.HasWon, battleReport.IsAttacker);
                experience += GetWoundingHitBonus(gangerStats.Kills);
                experience += GetObjectivesBonus(gangerStats.Objectives, battleReport.GameType);
                experience += GetWinningBonus(battleReport.HasWon, battleReport.GameType);
                experience += GetSurvivalBonus();

                var advanceRolls = GetNumberOfAdvanceRolls(ganger, experience);
                while (advanceRolls > 0)
                {
                    advancements.Add(DoAdvanceRoll(ganger, gang.GangHouse));
                    advanceRolls--;
                }

                ganger.Experience += experience;
                _gangerManager.UpdateGanger(ganger);
            }

            return(new GangLevelUpReport()
            {
                GangerAdvancements = advancements,
            });
        }
Exemplo n.º 3
0
        /// <summary>
        /// Process injuries
        /// </summary>
        /// <param name="battleReport">Battle report</param>
        /// <returns>Injury report</returns>
        public InjuryReport ProcessInjuries(BattleReport battleReport)
        {
            // If a ganger is down, a roll less than three means they're injured.
            var injuries = new List <GangerInjuryReport>();

            foreach (var stats in battleReport.GangBattleStats)
            {
                if (stats.OutOfAction || (stats.Down && _diceRoller.RollDie() <= 3))
                {
                    injuries.Add(new GangerInjuryReport()
                    {
                        TheGanger = _gangerManager.GetGanger(stats.GangerId),
                        Injuries  = DetermineInjury(null),
                    });
                }
            }

            // var injuries = battleReport.GangBattleStats
            //    .Where(stats => stats.OutOfAction || (stats.Down && DiceRoller.RollDie() <= 3))
            //    .Select(ganger => _gangerManager.GetGanger(ganger.GangerId))
            //    .Select(ganger => new GangerInjuryReport() { TheGanger = ganger, Injuries = DetermineInjury(null) })
            //    .ToList();

            // apply injuries to Gangers
            var injuredGangers = new List <GangerInjuryReport>();

            for (int i = 0; i < injuries.Count(); i++)
            {
                var ganger = injuries[i].TheGanger;
                foreach (var injury in injuries[i].Injuries)
                {
                    ganger = injury.InjuryEffect(ganger);
                }

                injuredGangers.Add(new GangerInjuryReport()
                {
                    Injuries  = injuries[i].Injuries,
                    TheGanger = ganger,
                });
            }

            // update gangers in db
            foreach (var report in injuredGangers)
            {
                _gangerManager.UpdateGanger(report.TheGanger);
                foreach (var injury in report.Injuries)
                {
                    if (injury.InjuryId != InjuryEnum.FullRecovery)
                    {
                        _gangerManager.AddGangerInjury(report.TheGanger.GangerId, injury.InjuryId);
                    }
                }
            }

            return(new InjuryReport()
            {
                Injuries = injuries,
            });
        }
Exemplo n.º 4
0
        /// <summary>
        /// Skill up gangers. Requires user interaction, so happens after post game is processed.
        /// </summary>
        /// <param name="skillUpRequest">Skill up request</param>
        /// <returns>List of ganger skills.</returns>
        public IEnumerable <GangerSkill> SkillUpGangers(GangSkillUpRequest skillUpRequest)
        {
            var response = new List <GangerSkill>();

            foreach (var request in skillUpRequest.GangerSkillUpRequests)
            {
                var ganger = _gangerManager.GetGanger(request.GangerId);
                response.Add(_gangerManager.LearnSkill(ganger, request.AdvancementId, request.SkillCategory));
            }

            return(response);
        }
Exemplo n.º 5
0
 public Ganger GetGanger([FromUri] string gangerId)
 {
     return(_gangerManager.GetGanger(gangerId));
 }