mirror of
https://github.com/vkaelin/LeagueStats.git
synced 2026-03-25 21:07:27 +00:00
feat: add bg color according to stats in match details
This commit is contained in:
parent
0bf6ebb518
commit
5fd8800b73
4 changed files with 57 additions and 49 deletions
|
|
@ -1,14 +1,14 @@
|
||||||
<template>
|
<template>
|
||||||
<transition name="slide">
|
<transition name="slide">
|
||||||
<div v-if="data.status === 'loaded' && detailsOpen" class="bg-blue-800 rounded-b-lg">
|
<div v-if="data.status === 'loaded' && detailsOpen" class="bg-blue-800 rounded-b-lg">
|
||||||
<DetailedMatchTeam :data="allyTeam" />
|
<DetailedMatchTeam :data="allyTeam" :all-players="[...allyTeam.players, ...enemyTeam.players]" />
|
||||||
|
|
||||||
<div class="px-3 py-2 flex justify-between">
|
<div class="px-3 py-2 flex justify-between">
|
||||||
<DetailedMatchGlobalStats :team="allyTeam" :ally-team="true" />
|
<DetailedMatchGlobalStats :team="allyTeam" :ally-team="true" />
|
||||||
<DetailedMatchGlobalStats :team="enemyTeam" :ally-team="false" />
|
<DetailedMatchGlobalStats :team="enemyTeam" :ally-team="false" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<DetailedMatchTeam :data="enemyTeam" />
|
<DetailedMatchTeam :data="enemyTeam" :all-players="[...allyTeam.players, ...enemyTeam.players]" />
|
||||||
</div>
|
</div>
|
||||||
<div v-else-if="data.status === 'loading' && detailsOpen">
|
<div v-else-if="data.status === 'loading' && detailsOpen">
|
||||||
<p class="bg-blue-800 py-5 text-blue-100 text-lg font-semibold">Loading...</p>
|
<p class="bg-blue-800 py-5 text-blue-100 text-lg font-semibold">Loading...</p>
|
||||||
|
|
|
||||||
|
|
@ -117,45 +117,45 @@
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td
|
<td
|
||||||
:class="{'border-b border-blue-700': displayBorderbottom(index)}"
|
:style="bgColor(player, '71, 132, 116', 'kills')"
|
||||||
class="p-2 text-white text-xs font-semibold"
|
class="p-2 text-white text-sm"
|
||||||
>{{ player.kills }}</td>
|
>{{ player.stats.kills }}</td>
|
||||||
<td
|
<td
|
||||||
:class="{'border-b border-blue-700': displayBorderbottom(index)}"
|
:style="bgColor(player, '156, 71, 109', 'deaths')"
|
||||||
class="p-2 text-white text-xs font-semibold"
|
class="p-2 text-white text-sm"
|
||||||
>{{ player.deaths }}</td>
|
>{{ player.stats.deaths }}</td>
|
||||||
<td
|
<td
|
||||||
:class="{'border-b border-blue-700': displayBorderbottom(index)}"
|
:style="bgColor(player, '146, 100, 79', 'assists')"
|
||||||
class="p-2 text-white text-xs font-semibold"
|
class="p-2 text-white text-sm"
|
||||||
>{{ player.assists }}</td>
|
>{{ player.stats.assists }}</td>
|
||||||
<td
|
<td
|
||||||
:class="{'border-b border-blue-700': displayBorderbottom(index)}"
|
class="p-2 text-white text-sm"
|
||||||
class="p-2 text-white text-xs font-semibold"
|
:style="bgColor(player, '140, 101, 182', 'minions')"
|
||||||
>{{ player.percentStats.minions }}</td>
|
>{{ player.percentStats.minions }}</td>
|
||||||
<td
|
<td
|
||||||
:class="{'border-b border-blue-700': displayBorderbottom(index)}"
|
class="p-2 text-white text-sm"
|
||||||
class="p-2 text-white text-xs font-semibold"
|
:style="bgColor(player, '55, 118, 179', 'vision')"
|
||||||
>{{ player.percentStats.vision }}</td>
|
>{{ player.percentStats.vision }}</td>
|
||||||
<td
|
<td
|
||||||
:class="{'border-b border-blue-700': displayBorderbottom(index)}"
|
class="p-2 text-white text-sm"
|
||||||
class="p-2 text-white text-xs font-semibold"
|
:style="bgColor(player, '146, 100, 79', 'gold')"
|
||||||
>{{ player.stats.gold }}</td>
|
>{{ player.stats.gold }}</td>
|
||||||
<td
|
<td
|
||||||
:class="{'border-b border-blue-700': displayBorderbottom(index)}"
|
:style="bgColor(player, '156, 71, 109', 'dmgChamp')"
|
||||||
class="p-2 text-white text-xs font-semibold"
|
class="p-2 text-white text-sm"
|
||||||
>{{ player.stats.dmgChamp }}</td>
|
>{{ player.stats.dmgChamp }}</td>
|
||||||
<td
|
<td
|
||||||
:class="{'border-b border-blue-700': displayBorderbottom(index)}"
|
:style="bgColor(player, '156, 71, 109', 'dmgObj')"
|
||||||
class="p-2 text-white text-xs font-semibold"
|
class="p-2 text-white text-sm text-red"
|
||||||
>{{ player.stats.dmgObj }}</td>
|
>{{ player.stats.dmgObj }}</td>
|
||||||
<td
|
<td
|
||||||
:class="{'border-b border-blue-700': displayBorderbottom(index)}"
|
:style="bgColor(player, '146, 145, 106', 'dmgTaken')"
|
||||||
class="p-2 text-white text-xs font-semibold"
|
class="p-2 text-white text-sm"
|
||||||
>{{ player.stats.dmgTaken }}</td>
|
>{{ player.stats.dmgTaken }}</td>
|
||||||
<td
|
<td
|
||||||
:class="{'border-b border-blue-700': displayBorderbottom(index)}"
|
:style="bgColor(player, '71, 132, 116', 'kp')"
|
||||||
class="p-2 text-white text-xs font-semibold"
|
class="p-2 text-white text-sm"
|
||||||
>{{ player.kp }}</td>
|
>{{ player.stats.kp }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
@ -166,6 +166,10 @@ import { mapGetters } from 'vuex'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
|
allPlayers: {
|
||||||
|
type: Array,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
data: {
|
data: {
|
||||||
type: Object,
|
type: Object,
|
||||||
required: true
|
required: true
|
||||||
|
|
@ -183,6 +187,16 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
bgColor(player, rgb, stats) {
|
||||||
|
const value = parseFloat(player.stats[stats])
|
||||||
|
const biggestValue = Math.max(...this.allPlayers.map(p => parseFloat(p.stats[stats])), 0)
|
||||||
|
const opacity = (value / biggestValue).toFixed(2)
|
||||||
|
|
||||||
|
return {
|
||||||
|
backgroundColor: `rgba(${rgb}, ${opacity})`,
|
||||||
|
boxShadow: value === biggestValue ? '#abb4d0 0px 0px 0px 2px inset' : ''
|
||||||
|
}
|
||||||
|
},
|
||||||
displayBorderbottom(index) {
|
displayBorderbottom(index) {
|
||||||
return this.allyTeam || index !== this.data.players.length - 1
|
return this.allyTeam || index !== this.data.players.length - 1
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,13 +49,13 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="mx-auto flex flex-col justify-center items-center leading-none">
|
<div class="mx-auto flex flex-col justify-center items-center leading-none">
|
||||||
<div class="text-xl font-extrabold text-teal-500">
|
<div class="text-xl font-extrabold text-teal-500">
|
||||||
<span class>{{ data.kills }}</span>
|
<span class>{{ data.stats.kills }}</span>
|
||||||
<span class>/</span>
|
<span class>/</span>
|
||||||
<span class>{{ data.deaths }}</span>
|
<span class>{{ data.stats.deaths }}</span>
|
||||||
<span class>/</span>
|
<span class>/</span>
|
||||||
<span class>{{ data.assists }}</span>
|
<span class>{{ data.stats.assists }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-2 text-white text-xs font-extrabold">{{ data.kda }} KDA</div>
|
<div class="mt-2 text-white text-xs font-extrabold">{{ data.stats.kda }} KDA</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -100,7 +100,7 @@
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<img src="@/assets/img/icons/KillParticipation.svg" alt="KillParticipation" />
|
<img src="@/assets/img/icons/KillParticipation.svg" alt="KillParticipation" />
|
||||||
<div class="ml-1 kp text-sm font-bold">
|
<div class="ml-1 kp text-sm font-bold">
|
||||||
{{ data.kp }}
|
{{ data.stats.kp }}
|
||||||
<!-- <span class="font-normal">kp</span> -->
|
<!-- <span class="font-normal">kp</span> -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -34,20 +34,13 @@ class MatchTransformer {
|
||||||
const name = identity.player.summonerName
|
const name = identity.player.summonerName
|
||||||
const champion = (({ id, name }) => ({ id, name }))(Object.entries(this.champions).find(([, champion]) => Number(champion.key) === player.championId)[1])
|
const champion = (({ id, name }) => ({ id, name }))(Object.entries(this.champions).find(([, champion]) => Number(champion.key) === player.championId)[1])
|
||||||
const role = this.MatchHelper.getRoleName(player.timeline)
|
const role = this.MatchHelper.getRoleName(player.timeline)
|
||||||
|
|
||||||
const kills = player.stats.kills
|
|
||||||
const deaths = player.stats.deaths
|
|
||||||
const assists = player.stats.assists
|
|
||||||
let kda
|
|
||||||
if (kills + assists !== 0 && deaths === 0) {
|
|
||||||
kda = '∞'
|
|
||||||
} else {
|
|
||||||
kda = +(deaths === 0 ? 0 : ((kills + assists) / deaths)).toFixed(2)
|
|
||||||
}
|
|
||||||
const level = player.stats.champLevel
|
const level = player.stats.champLevel
|
||||||
|
|
||||||
// Regular stats / Full match stats
|
// Regular stats / Full match stats
|
||||||
const stats = {
|
const stats = {
|
||||||
|
kills: player.stats.kills,
|
||||||
|
deaths: player.stats.deaths,
|
||||||
|
assists: player.stats.assists,
|
||||||
minions: player.stats.totalMinionsKilled + player.stats.neutralMinionsKilled,
|
minions: player.stats.totalMinionsKilled + player.stats.neutralMinionsKilled,
|
||||||
vision: player.stats.visionScore,
|
vision: player.stats.visionScore,
|
||||||
gold: +(player.stats.goldEarned / 1000).toFixed(1) + 'k',
|
gold: +(player.stats.goldEarned / 1000).toFixed(1) + 'k',
|
||||||
|
|
@ -56,19 +49,25 @@ class MatchTransformer {
|
||||||
dmgTaken: +(player.stats.totalDamageTaken / 1000).toFixed(1) + 'k',
|
dmgTaken: +(player.stats.totalDamageTaken / 1000).toFixed(1) + 'k',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (stats.kills + stats.assists !== 0 && stats.deaths === 0) {
|
||||||
|
stats.kda = '∞'
|
||||||
|
} else {
|
||||||
|
stats.kda = +(stats.deaths === 0 ? 0 : ((stats.kills + stats.assists) / stats.deaths)).toFixed(2)
|
||||||
|
}
|
||||||
|
|
||||||
// Percent stats / Per minute stats : only for detailed match
|
// Percent stats / Per minute stats : only for detailed match
|
||||||
let percentStats
|
let percentStats
|
||||||
let kp
|
|
||||||
if (detailed) {
|
if (detailed) {
|
||||||
percentStats = {
|
percentStats = {
|
||||||
minions: +(stats.minions / (this.match.gameDuration / 60)).toFixed(2),
|
minions: +(stats.minions / (this.match.gameDuration / 60)).toFixed(2),
|
||||||
vision: +(stats.vision / (this.match.gameDuration / 60)).toFixed(2),
|
vision: +(stats.vision / (this.match.gameDuration / 60)).toFixed(2),
|
||||||
|
gold: +(player.stats.goldEarned * 100 / teamStats.gold).toFixed(1) + '%',
|
||||||
dmgChamp: +(player.stats.totalDamageDealtToChampions * 100 / teamStats.dmgChamp).toFixed(1) + '%',
|
dmgChamp: +(player.stats.totalDamageDealtToChampions * 100 / teamStats.dmgChamp).toFixed(1) + '%',
|
||||||
dmgObj: +(player.stats.damageDealtToObjectives * 100 / teamStats.dmgObj).toFixed(1) + '%',
|
dmgObj: +(player.stats.damageDealtToObjectives * 100 / teamStats.dmgObj).toFixed(1) + '%',
|
||||||
dmgTaken: +(player.stats.totalDamageTaken * 100 / teamStats.dmgTaken).toFixed(1) + '%',
|
dmgTaken: +(player.stats.totalDamageTaken * 100 / teamStats.dmgTaken).toFixed(1) + '%',
|
||||||
}
|
}
|
||||||
|
|
||||||
kp = teamStats.kills === 0 ? '0%' : +((kills + assists) * 100 / teamStats.kills).toFixed(1) + '%'
|
stats.kp = teamStats.kills === 0 ? '0%' : +((stats.kills + stats.assists) * 100 / teamStats.kills).toFixed(1) + '%'
|
||||||
} else {
|
} else {
|
||||||
const totalKills = this.match.participants.reduce((prev, current) => {
|
const totalKills = this.match.participants.reduce((prev, current) => {
|
||||||
if (current.teamId !== player.teamId) {
|
if (current.teamId !== player.teamId) {
|
||||||
|
|
@ -77,7 +76,7 @@ class MatchTransformer {
|
||||||
return prev + current.stats.kills
|
return prev + current.stats.kills
|
||||||
}, 0)
|
}, 0)
|
||||||
|
|
||||||
kp = totalKills === 0 ? '0%' : +((kills + assists) * 100 / totalKills).toFixed(1) + '%'
|
stats.kp = totalKills === 0 ? '0%' : +((stats.kills + stats.assists) * 100 / totalKills).toFixed(1) + '%'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -111,12 +110,7 @@ class MatchTransformer {
|
||||||
role,
|
role,
|
||||||
primaryRune,
|
primaryRune,
|
||||||
secondaryRune,
|
secondaryRune,
|
||||||
kills,
|
|
||||||
deaths,
|
|
||||||
assists,
|
|
||||||
kda,
|
|
||||||
level,
|
level,
|
||||||
kp,
|
|
||||||
items,
|
items,
|
||||||
firstSum,
|
firstSum,
|
||||||
secondSum,
|
secondSum,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue