public void GetGangerTest() { var gangerId = "1"; _gangerManager.GetGanger(gangerId); _mockGangerProvider.Verify(m => m.GetByGangerId(It.Is <string>(s => s == gangerId)), 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, }); }
/// <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); }
public Ganger GetGanger([FromUri] string gangerId) { return(_gangerManager.GetGanger(gangerId)); }