/// <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); }
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)); } } }
private GangerLevelUpReport DoAdvanceRoll(Ganger ganger, GangHouse house) { GangerStatistics stat = 0; int roll = DiceRoller.RollDice(6, 2); int statToIncrease = DiceRoller.RollDie(); switch (roll) { case 2: case 12: return(new GangerLevelUpReport() { Description = "Pick any skill", GangerName = ganger.Name, NewSkillFromCategory = new[] { SkillType.AGILITY, SkillType.COMBAT, SkillType.FEROCITY, SkillType.MUSCLE, SkillType.SHOOTING, SkillType.STEALTH, SkillType.TECHNO } }); case 3: case 4: case 10: case 11: return(new GangerLevelUpReport() { Description = "New gang skill", GangerName = ganger.Name, NewSkillFromCategory = GetGangSkill(ganger.GangerType, house) }); case 5: stat = (statToIncrease <= 3) ? GangerStatistics.STRENGTH : GangerStatistics.ATTACK; _gangerFactory.IncreaseStat(ganger, stat, null); return(new GangerLevelUpReport() { Description = Enum.GetName(typeof(GangerStatistics), stat) + " increased", GangerName = ganger.Name, NewSkillFromCategory = null }); case 6: case 8: stat = (statToIncrease <= 3) ? GangerStatistics.WEAPON_SKILL : GangerStatistics.BALLISTIC_SKILL; _gangerFactory.IncreaseStat(ganger, stat, null); return(new GangerLevelUpReport() { Description = Enum.GetName(typeof(GangerStatistics), stat) + " increased", GangerName = ganger.Name, NewSkillFromCategory = null }); case 7: stat = (statToIncrease <= 3) ? GangerStatistics.INITIATIVE : GangerStatistics.LEADERSHIP; _gangerFactory.IncreaseStat(ganger, stat, null); return(new GangerLevelUpReport() { Description = Enum.GetName(typeof(GangerStatistics), stat) + " increased", GangerName = ganger.Name, NewSkillFromCategory = null }); case 9: stat = (statToIncrease <= 3) ? GangerStatistics.WOUNDS : GangerStatistics.ATTACK; _gangerFactory.IncreaseStat(ganger, stat, null); return(new GangerLevelUpReport() { Description = Enum.GetName(typeof(GangerStatistics), stat) + " increased", GangerName = ganger.Name, NewSkillFromCategory = null }); } return(null); }
/// <summary> /// Do an advance roll /// </summary> /// <param name="ganger">Ganger advancing</param> /// <param name="house">Ganger's house</param> /// <returns>Ganger level up report</returns> public GangerLevelUpReport DoAdvanceRoll(Ganger ganger, GangHouse house) { GangerStatistics stat = 0; int roll = _diceRoller.RollDice(6, 2); int statToIncrease = _diceRoller.RollDie(); switch (roll) { case 2: case 12: var advancementId = _gangerManager.RegisterGangerAdvancement(ganger.GangerId); return(new GangerLevelUpReport() { Description = "Pick any skill", GangerName = ganger.Name, GangerId = ganger.GangerId, NewSkillFromCategory = new[] { SkillType.Agility, SkillType.Combat, SkillType.Ferocity, SkillType.Muscle, SkillType.Shooting, SkillType.Stealth, SkillType.Techno }, AdvancementId = advancementId, }); case 3: case 4: case 10: case 11: advancementId = _gangerManager.RegisterGangerAdvancement(ganger.GangerId); return(new GangerLevelUpReport() { Description = "New gang skill", GangerName = ganger.Name, GangerId = ganger.GangerId, NewSkillFromCategory = GetGangSkill(ganger.GangerType, house), AdvancementId = advancementId, }); case 5: stat = (statToIncrease <= 3) ? GangerStatistics.Strength : GangerStatistics.Attack; _gangerManager.IncreaseStat(ganger, stat); return(new GangerLevelUpReport() { Description = Enum.GetName(typeof(GangerStatistics), stat) + " increased", GangerName = ganger.Name, GangerId = ganger.GangerId, NewSkillFromCategory = null, }); case 6: case 8: stat = (statToIncrease <= 3) ? GangerStatistics.WeaponSkill : GangerStatistics.BallisticSkill; _gangerManager.IncreaseStat(ganger, stat); return(new GangerLevelUpReport() { Description = Enum.GetName(typeof(GangerStatistics), stat) + " increased", GangerName = ganger.Name, GangerId = ganger.GangerId, NewSkillFromCategory = null, }); case 7: stat = (statToIncrease <= 3) ? GangerStatistics.Initiative : GangerStatistics.Leadership; _gangerManager.IncreaseStat(ganger, stat); return(new GangerLevelUpReport() { Description = Enum.GetName(typeof(GangerStatistics), stat) + " increased", GangerName = ganger.Name, GangerId = ganger.GangerId, NewSkillFromCategory = null, }); case 9: stat = (statToIncrease <= 3) ? GangerStatistics.Wounds : GangerStatistics.Attack; _gangerManager.IncreaseStat(ganger, stat); return(new GangerLevelUpReport() { Description = Enum.GetName(typeof(GangerStatistics), stat) + " increased", GangerName = ganger.Name, GangerId = ganger.GangerId, NewSkillFromCategory = null, }); } return(null); }