BusinessLogic.Logic.Points.PointsCalculator.GiveEveryoneNormalPoints C# (CSharp) Method

GiveEveryoneNormalPoints() private method

private GiveEveryoneNormalPoints ( IList playerRanks, PointsScorecard>.Dictionary playerToPoints ) : void
playerRanks IList
playerToPoints PointsScorecard>.Dictionary
return void
        internal virtual void GiveEveryoneNormalPoints(
            IList<PlayerRank> playerRanks, 
            Dictionary<int, PointsScorecard> playerToPoints)
        {
            int totalNumberOfPlayers = playerRanks.Count;
            int totalPointsToAllocate = totalNumberOfPlayers * POINTS_PER_PLAYER;
            decimal denominator = FibonacciSum(totalNumberOfPlayers);

            const int fibonacciOffset = 1;
            int highestRankSlotNotConsumed = 1;

            for (int rank = 1; rank <= totalNumberOfPlayers; rank++)
            {
                List<PlayerRank> playersWithThisRank = playerRanks.Where(x => x.GameRank == rank).ToList();
                int numberOfPlayersWithThisRank = playersWithThisRank.Count;
                if (numberOfPlayersWithThisRank > 0)
                {
                    int finoacciEndIndex = totalNumberOfPlayers + fibonacciOffset - highestRankSlotNotConsumed;
                    int fibonacciStartIndex = finoacciEndIndex + fibonacciOffset - numberOfPlayersWithThisRank;
                    decimal numerator = FibonacciSum(fibonacciStartIndex, finoacciEndIndex) / numberOfPlayersWithThisRank;
                    int points = RoundUpIfNonNegligible(totalPointsToAllocate * (numerator / denominator));

                    foreach (var playerRank in playersWithThisRank)
                    {
                        playerToPoints.Add(playerRank.PlayerId, new PointsScorecard { BasePoints = points });
                    }
                }

                highestRankSlotNotConsumed += numberOfPlayersWithThisRank;
            }
        }