Пример #1
0
        public void UpdateGangerTest()
        {
            var ganger = new Ganger();

            _gangerManager.UpdateGanger(ganger);
            _mockGangerProvider.Verify(m => m.UpdateGanger(It.Is <Ganger>(g => g == ganger)), Times.Once);
        }
Пример #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,
            });
        }
Пример #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,
            });
        }
Пример #4
0
        private TerritoryIncomeReport ChemPit(TerritoryWorkStatus status)
        {
            if (status.Roll == 12)
            {
                // ganger gets horrible scars
                var scars = _injuryManager.GetInjury((int)InjuryEnum.HorribleScars);
                status.Ganger = scars.InjuryEffect(status.Ganger);
                _gangerManager.UpdateGanger(status.Ganger);

                return(new TerritoryIncomeReport()
                {
                    TerritoryName = status.TerritoryName,
                    Description = $"{status.Ganger.Name} has fallen into the chem pits and now has Horrible Scars. No income is collected.",
                    Income = 0,
                });
            }

            return(new TerritoryIncomeReport()
            {
                TerritoryName = status.TerritoryName,
                Income = status.Roll,
            });
        }
Пример #5
0
 public Ganger UpdateGanger(Ganger ganger)
 {
     return(_gangerManager.UpdateGanger(ganger));
 }