From b7a276d54ae88fde32cd1fba0ec4bb1ac41cab55 Mon Sep 17 00:00:00 2001 From: schneefux Date: Mon, 21 May 2018 16:28:24 +0200 Subject: Support talentless modes --- src/Highlights.vue | 6 +++++- src/ModeTab.vue | 14 +++++++++++--- src/ReportTable.vue | 18 ++++++++++-------- src/TopTalentsBox.vue | 15 ++++++++++++++- src/maps/maps.js | 10 ++++++++++ src/report-service.js | 17 +++++++++-------- 6 files changed, 59 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/Highlights.vue b/src/Highlights.vue index 02392ee..c4d288d 100644 --- a/src/Highlights.vue +++ b/src/Highlights.vue @@ -14,7 +14,7 @@ title="Trending" type="Total Pick Rate" label="%" - :value="(100 * 6 * stats.topPick.Count / stats.totalPicks).toFixed(2)" + :value="(100 * playersPerMatch * stats.topPick.Count / stats.totalPicks).toFixed(2)" :entry="stats.topPick" /> @@ -77,6 +77,7 @@ import Vue from 'vue'; import TalentBox from './TalentBox.vue'; import RouterParamMixin from './RouterParamMixin.js'; +import * as maps from './maps/maps.js'; export default Vue.component('highlights', { props: [ 'reportService' ], @@ -95,6 +96,9 @@ export default Vue.component('highlights', { lowestLevelAvg: this.reportService.getLowestLevelAvg(this.selectedMode), }; }, + playersPerMatch: function() { + return maps.playersPerMatch(this.selectedMode); + }, }, components: { TalentBox, diff --git a/src/ModeTab.vue b/src/ModeTab.vue index e629ef0..09bc343 100644 --- a/src/ModeTab.vue +++ b/src/ModeTab.vue @@ -1,18 +1,18 @@ @@ -87,6 +83,12 @@ export default Vue.component('report-table', { totalPicks: function() { return this.reportService.getTotalPicks(this.selectedMode); }, + playersPerMatch: function() { + return maps.playersPerMatch(this.selectedMode); + }, + hasTalents: function() { + return maps.hasTalents(this.selectedMode); + }, }, components: { HeroImage, diff --git a/src/TopTalentsBox.vue b/src/TopTalentsBox.vue index eb73ef0..44a4e16 100644 --- a/src/TopTalentsBox.vue +++ b/src/TopTalentsBox.vue @@ -7,13 +7,17 @@ - +
{{ getTalentName(props.row.Talent) }}
+ + {{ Math.round(100 * playersPerMatch * props.row.Count / totalPicks) }}% + + {{ Math.round(100 * props.row.Winner) }}% @@ -42,6 +46,15 @@ export default Vue.component('top-talents-box', { top10Talents: function() { return this.reportService.getTop10Picks(this.selectedMode); }, + hasTalents: function() { + return maps.hasTalents(this.selectedMode); + }, + totalPicks: function() { + return this.reportService.getTotalPicks(this.selectedMode); + }, + playersPerMatch: function() { + return maps.playersPerMatch(this.selectedMode); + }, }, components: { TalentImage, diff --git a/src/maps/maps.js b/src/maps/maps.js index cc6ee4b..9bd252e 100644 --- a/src/maps/maps.js +++ b/src/maps/maps.js @@ -55,10 +55,20 @@ function getMode(mode) { return modes[mode]; } +function hasTalents(mode) { + return ['blitz_pvp_ranked', 'casual_aral'].includes(mode); +} + +function playersPerMatch(mode) { + return mode.includes('5v5')? 10 : 6; +} + module.exports = { getTalentName, getTalentRarity, getTalentRarityIndex, getHero, getMode, + hasTalents, + playersPerMatch, }; diff --git a/src/report-service.js b/src/report-service.js index 8b6ed23..7443672 100644 --- a/src/report-service.js +++ b/src/report-service.js @@ -1,11 +1,11 @@ import * as maps from './maps/maps'; -const MODES = [ 'casual_aral', 'blitz_pvp_ranked' ]; +const MODES = [ 'casual_aral', 'blitz_pvp_ranked', 'ranked', '5v5_pvp_ranked' ]; const POPULAR_THRESHOLD = 0.1; export default class ReportService { constructor() { - this.report = require('../data/98aae7f0/report.json') + this.report = require('../data/95fb1cdb/report.json') .filter((entry) => entry.Actor != undefined); // bad data from API downtime this.reports = new Map(); @@ -22,8 +22,9 @@ export default class ReportService { this.actors = []; this.modes = MODES; - for(let mode of MODES) { + for(let mode of this.modes) { const relevancy = (entry) => (entry.Count / this.totalPicks.get(mode)) * entry.Winner; + const playersPerMatch = maps.playersPerMatch(mode); this.reports.set(mode, this.report.filter((entry) => entry.Mode == mode)); this.totalPicks.set(mode, this.report.map((entry) => entry.Count).reduce((agg, cur) => agg + cur, 0)); @@ -32,19 +33,19 @@ export default class ReportService { .slice(0, 10)); this.topPicks.set(mode, this.reports.get(mode).sort((entry1, entry2) => entry2.Count - entry1.Count)[0]); this.topWins.set(mode, this.reports.get(mode) - .filter((entry) => 100 * 6 * entry.Count / this.totalPicks.get(mode) > POPULAR_THRESHOLD) + .filter((entry) => 100 * playersPerMatch * entry.Count / this.totalPicks.get(mode) > POPULAR_THRESHOLD) .sort((entry1, entry2) => entry2.Winner - entry1.Winner)[0]); this.topUnpopularWins.set(mode, this.reports.get(mode) - .filter((entry) => 100 * 6 * entry.Count / this.totalPicks.get(mode) <= POPULAR_THRESHOLD) + .filter((entry) => 100 * playersPerMatch * entry.Count / this.totalPicks.get(mode) <= POPULAR_THRESHOLD) .sort((entry1, entry2) => entry2.Winner - entry1.Winner)[0]); this.topRareWins.set(mode, this.reports.get(mode) - .filter((entry) => maps.getTalentRarity(entry.Talent) == 'Rare' && 100 * 6 * entry.Count / this.totalPicks.get(mode) > POPULAR_THRESHOLD) + .filter((entry) => maps.getTalentRarity(entry.Talent) == 'Rare' && 100 * playersPerMatch * entry.Count / this.totalPicks.get(mode) > POPULAR_THRESHOLD) .sort((entry1, entry2) => entry2.Winner - entry1.Winner)[0]); this.topEpicWins.set(mode, this.reports.get(mode) - .filter((entry) => maps.getTalentRarity(entry.Talent) == 'Epic' && 100 * 6 * entry.Count / this.totalPicks.get(mode) > POPULAR_THRESHOLD) + .filter((entry) => maps.getTalentRarity(entry.Talent) == 'Epic' && 100 * playersPerMatch * entry.Count / this.totalPicks.get(mode) > POPULAR_THRESHOLD) .sort((entry1, entry2) => entry2.Winner - entry1.Winner)[0]); this.topLegendaryWins.set(mode, this.reports.get(mode) - .filter((entry) => maps.getTalentRarity(entry.Talent) == 'Legendary' && 100 * 6 * entry.Count / this.totalPicks.get(mode) > POPULAR_THRESHOLD) + .filter((entry) => maps.getTalentRarity(entry.Talent) == 'Legendary' && 100 * playersPerMatch * entry.Count / this.totalPicks.get(mode) > POPULAR_THRESHOLD) .sort((entry1, entry2) => entry2.Winner - entry1.Winner)[0]); this.topLeveledUp.set(mode, this.reports.get(mode).sort((entry1, entry2) => { if (!entry1.Level) return 1; -- cgit v1.3.1