Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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);
        }