Skip to content

Commit 2d5dc82

Browse files
committed
web: Add win streaks
1 parent 82a9966 commit 2d5dc82

File tree

10 files changed

+114
-13
lines changed

10 files changed

+114
-13
lines changed

cube/model/cube.js

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
/* generated on 2025-05-11T10:41:28.067Z */
2+
/* generated on 2025-10-28T16:12:47.471Z */
33

44
cube('brawler', {
55
refreshKey: {
@@ -192,6 +192,20 @@ measures: {
192192
type: 'max',
193193
},
194194

195+
winStreak_measure: {
196+
title: 'Win Streak',
197+
description: 'The current win streak with this Brawler.',
198+
sql: "brawler_win_streak",
199+
type: 'max',
200+
},
201+
202+
highestWinStreak_measure: {
203+
title: 'Highest Win Streak',
204+
description: 'The highest win streak achieved with this Brawler.',
205+
sql: "brawler_highest_win_streak",
206+
type: 'max',
207+
},
208+
195209
hours_measure: {
196210
title: 'Hours',
197211

@@ -252,7 +266,7 @@ dimensions: {
252266
}
253267
})
254268

255-
/* generated on 2025-05-11T10:41:28.068Z */
269+
/* generated on 2025-10-28T16:12:47.471Z */
256270

257271
cube('battle', {
258272
refreshKey: {
@@ -445,6 +459,20 @@ measures: {
445459
type: 'max',
446460
},
447461

462+
winStreak_measure: {
463+
title: 'Win Streak',
464+
description: 'The current win streak with this Brawler.',
465+
sql: "brawler_win_streak",
466+
type: 'max',
467+
},
468+
469+
highestWinStreak_measure: {
470+
title: 'Highest Win Streak',
471+
description: 'The highest win streak achieved with this Brawler.',
472+
sql: "brawler_highest_win_streak",
473+
type: 'max',
474+
},
475+
448476
hours_measure: {
449477
title: 'Hours',
450478

@@ -648,7 +676,7 @@ dimensions: {
648676
}
649677
})
650678

651-
/* generated on 2025-05-11T10:41:28.068Z */
679+
/* generated on 2025-10-28T16:12:47.472Z */
652680

653681
cube('map', {
654682
refreshKey: {
@@ -819,7 +847,7 @@ dimensions: {
819847
}
820848
})
821849

822-
/* generated on 2025-05-11T10:41:28.068Z */
850+
/* generated on 2025-10-28T16:12:47.472Z */
823851

824852
cube('gadget', {
825853
refreshKey: {
@@ -991,7 +1019,7 @@ dimensions: {
9911019
}
9921020
})
9931021

994-
/* generated on 2025-05-11T10:41:28.068Z */
1022+
/* generated on 2025-10-28T16:12:47.472Z */
9951023

9961024
cube('starpower', {
9971025
refreshKey: {
@@ -1163,7 +1191,7 @@ dimensions: {
11631191
}
11641192
})
11651193

1166-
/* generated on 2025-05-11T10:41:28.068Z */
1194+
/* generated on 2025-10-28T16:12:47.472Z */
11671195

11681196
cube('gear', {
11691197
refreshKey: {
@@ -1335,7 +1363,7 @@ dimensions: {
13351363
}
13361364
})
13371365

1338-
/* generated on 2025-05-11T10:41:28.068Z */
1366+
/* generated on 2025-10-28T16:12:47.472Z */
13391367

13401368
cube('brawlerAllies', {
13411369
refreshKey: {
@@ -1441,7 +1469,7 @@ dimensions: {
14411469
}
14421470
})
14431471

1444-
/* generated on 2025-05-11T10:41:28.068Z */
1472+
/* generated on 2025-10-28T16:12:47.472Z */
14451473

14461474
cube('brawlerEnemies', {
14471475
refreshKey: {
@@ -1547,7 +1575,7 @@ dimensions: {
15471575
}
15481576
})
15491577

1550-
/* generated on 2025-05-11T10:41:28.068Z */
1578+
/* generated on 2025-10-28T16:12:47.472Z */
15511579

15521580
cube('survey', {
15531581
refreshKey: {
@@ -1566,15 +1594,15 @@ measures: {
15661594
},
15671595

15681596
picks_measure: {
1569-
title: 'Votes',
1597+
title: 'Picks recorded',
15701598

15711599
sql: "",
15721600
type: 'count',
15731601
},
15741602

15751603
pickRate_measure: {
1576-
title: 'Vote Rate',
1577-
1604+
title: 'Pick Rate',
1605+
description: 'The Pick Rate tells you the % of battles this Brawler appears in.',
15781606
sql: "",
15791607
type: 'count',
15801608
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
-- migrate:up
2+
ALTER TABLE brawltime.battle
3+
ADD COLUMN `brawler_win_streak` Nullable(UInt16) CODEC(LZ4HC(0)),
4+
ADD COLUMN `brawler_highest_win_streak` Nullable(UInt16) CODEC(LZ4HC(0));
5+
6+
-- migrate:down
7+
ALTER TABLE brawltime.battle
8+
DROP COLUMN `brawler_win_streak`,
9+
DROP COLUMN `brawler_highest_win_streak`;

web/api/services/ClickerService.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@ export default class ClickerService {
170170
brawler_power: brawler.power,
171171
brawler_trophies: myBrawlerTrophies,
172172
brawler_highest_trophies: myBrawler?.highestTrophies ?? myBrawlerTrophies,
173+
brawler_win_streak: myBrawler?.currentWinStreak,
174+
brawler_highest_win_streak: myBrawler?.maxWinStreak,
173175
// calculated
174176
brawler_trophyrange: trophyRange,
175177
/* brawler starpower */
@@ -273,6 +275,8 @@ export default class ClickerService {
273275
brawler_power: brawler.power,
274276
brawler_trophies: brawler.trophies,
275277
brawler_highest_trophies: brawler.highestTrophies,
278+
brawler_win_streak: brawler.currentWinStreak,
279+
brawler_highest_win_streak: brawler.maxWinStreak,
276280
/* starpowers (nested) */
277281
'brawler_starpowers.id': brawler.starPowers.map(sp => sp.id),
278282
'brawler_starpowers.name': brawler.starPowers.map(sp => sp.name),

web/assets/images/icon/flame.png

49.2 KB
Loading
5.31 KB
Loading

web/components/player/player-brawler-card.vue

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,14 @@
7676
{{ value }}
7777
</template>
7878

79+
<template v-slot:winStreak="{ value }: { value: number }">
80+
<img
81+
:src="flameIcon"
82+
class="inline h-4 mr-1"
83+
>
84+
{{ value }}
85+
</template>
86+
7987
<template v-slot:power="{ value }: { value: number }">
8088
<img
8189
:src="value < 10 ? powerpointIcon : starpowerIcon"
@@ -111,6 +119,7 @@ import { useKlicker } from '@schneefux/klicker/composables'
111119
import { useAsync } from '~/composables/compat'
112120
import leaderboardsIcon from '~/assets/images/icon/leaderboards_optimized.png'
113121
import trophyIcon from '~/assets/images/icon/trophy_optimized.png'
122+
import flameIcon from '~/assets/images/icon/flame_optimized.png'
114123
import powerpointIcon from '~/assets/images/icon/powerpoint_optimized.png'
115124
import starpowerIcon from '~/assets/images/icon/starpower_optimized.png'
116125
import masteryIcon from '~/assets/images/icon/mastery.png'
@@ -205,6 +214,18 @@ export default defineComponent({
205214
slot: 'trophies',
206215
})
207216
217+
rows.push({
218+
title: i18n.t('metric.win-streak'),
219+
key: 'currentWinStreak',
220+
slot: 'winStreak',
221+
})
222+
223+
rows.push({
224+
title: i18n.t('metric.max-win-streak'),
225+
key: 'maxWinStreak',
226+
slot: 'winStreak',
227+
})
228+
208229
if (data.value != undefined && data.value.picks > 0) {
209230
rows.push({
210231
title: i18n.t('metric.winRate'),
@@ -234,6 +255,8 @@ export default defineComponent({
234255
trophies: props.brawler.trophies,
235256
power: props.brawler.power,
236257
highestTrophies: props.brawler.highestTrophies,
258+
currentWinStreak: props.brawler.currentWinStreak,
259+
maxWinStreak: props.brawler.maxWinStreak,
237260
...(data.value != undefined ? {
238261
winRate: data == undefined ? 0 : Math.floor(data.value.winrate * 100) + '%',
239262
wins: data == undefined ? 0 : Math.floor(data.value.winrate * data.value.picks),
@@ -253,6 +276,7 @@ export default defineComponent({
253276
powerpointIcon,
254277
starpowerIcon,
255278
masteryIcon,
279+
flameIcon,
256280
}
257281
},
258282
})

web/lib/klicker.cubes.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,34 @@ const gearsMetric: Metric = {
737737
},
738738
}
739739

740+
const winStreakMetric: Metric = {
741+
id: 'winStreak',
742+
name: 'Win Streak',
743+
description: 'The current win streak with this Brawler.',
744+
formatter: '.0f',
745+
d3formatter: '.0f',
746+
sign: -1,
747+
type: 'quantitative',
748+
config: {
749+
sql: 'brawler_win_streak',
750+
type: 'max',
751+
},
752+
}
753+
754+
const highestWinStreakMetric: Metric = {
755+
id: 'highestWinStreak',
756+
name: 'Highest Win Streak',
757+
description: 'The highest win streak achieved with this Brawler.',
758+
formatter: '.0f',
759+
d3formatter: '.0f',
760+
sign: -1,
761+
type: 'quantitative',
762+
config: {
763+
sql: 'brawler_highest_win_streak',
764+
type: 'max',
765+
},
766+
}
767+
740768
const timestampMetric: Metric = {
741769
// TODO
742770
id: 'timestamp',
@@ -1662,6 +1690,8 @@ const playerBrawlerMetrics = [
16621690
starpowersMetric,
16631691
gadgetsMetric,
16641692
gearsMetric,
1693+
winStreakMetric,
1694+
highestWinStreakMetric,
16651695
hoursMetric,
16661696
]
16671697

web/locales/en.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -678,5 +678,7 @@
678678
"component.dashboard.long": "Brawl Stars Dashboard",
679679
"action.manage-consent": "Manage Consent",
680680
"metric.record-points": "Record Points",
681-
"metric.record-level": "Record Level"
681+
"metric.record-level": "Record Level",
682+
"metric.win-streak": "Current Win Streak",
683+
"metric.max-win-streak": "Max Win Streak"
682684
}

web/model/Api.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ export interface Brawler {
1818
highestTrophies: number;
1919
power: number;
2020
rank: number;
21+
currentWinStreak: number;
22+
maxWinStreak: number;
2123
starPowers: StarPower[];
2224
gadgets: Gadget[];
2325
gears: Gear[];

web/model/Brawlstars.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ export interface Brawler {
55
rank: number;
66
trophies: number;
77
highestTrophies: number;
8+
maxWinStreak: number;
9+
currentWinStreak: number;
810
gears: {
911
id: number;
1012
name: string;

0 commit comments

Comments
 (0)