private bool CheckLevelCap(IPerk perk) { var currentLevel = perk.CurrentLevel; if (currentLevel == null) { return(false); } var nextLevel = PerkHelper.GetNextLevel(perk.Scheme, currentLevel); var maxLevel = perk.Scheme.Levels.Length - 1; var nextLevelOutOfRange = nextLevel.Primary > maxLevel; if (nextLevelOutOfRange) { return(true); } else { var currentSubLevelIsMax = currentLevel.Sub >= perk.Scheme.Levels[currentLevel.Primary].MaxValue; if (currentSubLevelIsMax) { return(true); } else { return(false); } } }
public void GetNextLevel_FromTestCases_ReturnsCorrectNextLevel(IPerkScheme perkScheme, PerkLevel currentLevel, PerkLevel expectedNextLevel) { // ACT var nextLevel = PerkHelper.GetNextLevel(perkScheme, currentLevel); // ASSERT nextLevel.Primary.Should().Be(expectedNextLevel.Primary); nextLevel.Sub.Should().Be(expectedNextLevel.Sub); }
private static PerkLevel GetFirstOrNextLevel(IPerk perk) { if (perk.CurrentLevel is null) { // Perk is not leveled yet return(new PerkLevel(1, 1)); } return(PerkHelper.GetNextLevel(perk.Scheme, perk.CurrentLevel)); }
public void PerkLevelUp(IPerk perk) { var activePerkIsValid = Perks.Contains(perk); if (!activePerkIsValid) { throw new InvalidOperationException("Указанный перк не является активным для текущего актёра."); } var nextLevel = PerkHelper.GetNextLevel(perk.Scheme, perk.CurrentLevel); perk.CurrentLevel = nextLevel; UpdatePerks(); DoPerkArchieved(perk); }