public void ProcessMatchDetail(MatchDetail detail) { if (!_matches.Summaries.ContainsKey(detail.MatchId)) { return; } int heroIdx = detail.HeroId - _minHeroId; if (heroIdx < 0 || heroIdx >= _totals.Length) { return; } WinRateBuilder.Increment(ref _totals[heroIdx], detail.Winner); }
public void ProcessMatchDetail(MatchDetail detail) { if (!_matches.Summaries.TryGetValue(detail.MatchId, out MatchSummary summary)) { return; } int heroIdx = detail.HeroId - _minHeroId; if (heroIdx < 0 || heroIdx >= _totalsByHero.Length) { return; } WinRateBuilder.Increment(ref _totalsByHero[heroIdx], detail.Winner); int mapIdx = summary.MapId - _minMapId; if (mapIdx < 0 || mapIdx >= _totalsByHeroAndMap.GetLength(1)) { return; } WinRateBuilder.Increment(ref _totalsByHeroAndMap[heroIdx, mapIdx], detail.Winner); }
public void ProcessMatchDetails(MatchDetail[] detail) { if (detail.Length != 10 || !_matches.Summaries.ContainsKey(detail[0].MatchId)) { return; } for (int i = 0; i < 10; i++) { var detail1 = detail[i]; int hero1Idx = detail1.HeroId - _minHeroId; if (hero1Idx < 0 || hero1Idx >= _baseWinRates.Length || detail1.MirrorMatch) { continue; } WinRateBuilder.Increment(ref _baseWinRates[hero1Idx], detail[i].Winner); for (int j = 0; j < i; j++) { var detail2 = detail[j]; int hero2Idx = detail2.HeroId - _minHeroId; if (hero2Idx < 0 || hero2Idx >= _baseWinRates.Length || detail2.MirrorMatch) { continue; } bool ordered = hero1Idx < hero2Idx; (int heroA, int heroB)key = ordered ? (hero1Idx, hero2Idx) : (hero2Idx, hero1Idx); if (detail1.Winner == detail2.Winner) { WinRateBuilder.Increment(ref _allyWinRates[key.heroA, key.heroB], detail1.Winner); } else { WinRateBuilder.Increment(ref _enemyWinRates[key.heroA, key.heroB], ordered ? detail1.Winner : detail2.Winner); } } } }