public void UpdateGangerTest() { var ganger = new Ganger(); _gangerManager.UpdateGanger(ganger); _mockGangerProvider.Verify(m => m.UpdateGanger(It.Is <Ganger>(g => g == ganger)), Times.Once); }
/// <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, }); }
/// <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, }); }
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, }); }
public Ganger UpdateGanger(Ganger ganger) { return(_gangerManager.UpdateGanger(ganger)); }