public CsgoCalculatorResult(CsgoCalculatorResultBuilder builder) { FirstTeamName = builder.FirstTeamName; SecondTeamName = builder.SecondTeamName; FirstTeamId = builder.FirstTeamId; SecondTeamId = builder.SecondTeamId; Maps = builder.Maps; FirstTeamChance = builder.FirstTeamChance; }
//TODO: Вычислять значения очков команд и матчей с помощью ладдера. private CsgoCalculatorResult ConstructResult() { int firstTeamId = Teams.First(t => t.Name == FirstTeamName).Id; int secondTeamId = Teams.First(t => t.Name == SecondTeamName).Id; int firstTeamLadderPoints = Teams.Find(t => t.Id == firstTeamId).Points; int secondTeamLadderPoints = Teams.Find(t => t.Id == secondTeamId).Points; int firstTeamPoints = GetFirstTeam().MapStats.Sum(m => m.Points) + GetFirstTeam().Points; int secondTeamPoints = GetSecondTeam().MapStats.Sum(m => m.Points) + GetSecondTeam().Points; /*firstTeamPoints += Convert.ToInt32(((float)firstTeamPoints / 4f) * ((float)firstTeamLadderPoints / (float)secondTeamLadderPoints)); secondTeamPoints += Convert.ToInt32(((float)secondTeamPoints / 4f) * ((float)secondTeamPoints / (float)firstTeamPoints));*/ int firstTeamMapPointsSum = GetFirstTeam().MapStats .Sum(m => MapPull.Contains(m.Map) ? m.Points : 0); int secondTeamMapPointsSum = GetSecondTeam().MapStats .Sum(m => MapPull.Contains(m.Map) ? m.Points : 0); firstTeamPoints += firstTeamMapPointsSum; secondTeamPoints += secondTeamMapPointsSum; float firstTeamChance = (float)Math.Round((float)firstTeamPoints / ((float)firstTeamPoints + (float)secondTeamPoints), 2) * 100f; CsgoCalculatorResultBuilder builder = new CsgoCalculatorResultBuilder(); builder.FirstName(FirstTeamName) .SecondName(SecondTeamName) .FirstId(firstTeamId) .SecondId(secondTeamId) .FirstChance(firstTeamChance); foreach (string map in MapPull) { float chance = (float)Math.Round((float)GetFirstTeam().MapStats .Find(m => m.Map == map).Points / ((float)GetSecondTeam().MapStats .Find(m => m.Map == map).Points + (float)GetFirstTeam().MapStats .Find(m => m.Map == map).Points), 2) * 100f; builder.AddMap(map, chance); } //TODO: Пофиксить на расчет очков с правильных карт, а не со всех. DONE. //TODO: Возможно уменьшить влияние ладдерного коэффициента с трети до четверти. DONE. //TODO: Учитывать ладдерную позицию во времени во время расчета очков карт и командд. return builder.Build(); }