145 lines
5.7 KiB
Vue
145 lines
5.7 KiB
Vue
<script setup lang="ts">
|
|
const props = defineProps<{
|
|
builds: Builds
|
|
}>()
|
|
|
|
const {data : items} : ItemResponse = await useFetch(CDRAGON_BASE + "plugins/rcp-be-lol-game-data/global/default/v1/items.json")
|
|
const itemMap = reactive(new Map())
|
|
for(let item of items.value) {
|
|
itemMap.set(item.id, item)
|
|
}
|
|
|
|
watch(() => props.builds, () => trimBuilds(props.builds))
|
|
trimBuilds(props.builds)
|
|
|
|
function trimBuilds(builds : Builds) {
|
|
builds.tree.children.splice(1, builds.tree.children.length - 1)
|
|
if(builds.tree.children[0] != null && builds.tree.children[0] != undefined)
|
|
builds.tree.children[0].children.splice(1, builds.tree.children[0].children.length - 1)
|
|
}
|
|
|
|
</script>
|
|
|
|
<template>
|
|
<div id="iv-container">
|
|
|
|
<div>
|
|
<!-- Start items -->
|
|
<ItemBox title="start" :sizePerc="builds.suppItems != undefined && builds.suppItems != null ? 0.3 : undefined">
|
|
<div class="iv-items-container">
|
|
<div style="margin-left: 5px; margin-right: 5px;" v-for="item in builds.start" >
|
|
<NuxtImg v-if="item.data != null && item.data != undefined"
|
|
class="item-img" width="64" height="64" :alt="item.data.toString()"
|
|
:src="CDRAGON_BASE + mapPath(itemMap.get(item.data).iconPath)" />
|
|
<h3 style="width: fit-content; margin:auto; margin-bottom: 10px;">{{ (item.count/builds.tree.count * 100).toFixed(0) }}%</h3>
|
|
</div>
|
|
</div>
|
|
</ItemBox>
|
|
<!-- Supp items -->
|
|
<ItemBox v-if="builds.suppItems != undefined && builds.suppItems != null" title="supp" :sizePerc="0.68">
|
|
<div class="iv-items-container">
|
|
<div style="margin-left: 5px; margin-right: 5px;" v-for="item in builds.suppItems" >
|
|
<NuxtImg v-if="item.data != null && item.data != undefined"
|
|
class="item-img" width="64" height="64" :alt="item.data.toString()"
|
|
:src="CDRAGON_BASE + mapPath(itemMap.get(item.data).iconPath)" />
|
|
<h3 style="width: fit-content; margin:auto; margin-bottom: 10px;">{{ (item.count/builds.tree.count * 100).toFixed(0) }}%</h3>
|
|
</div>
|
|
</div>
|
|
</ItemBox>
|
|
</div>
|
|
|
|
<!-- Boots first : when champion rush boots -->
|
|
<ItemBox v-if="builds.bootsFirst > 0.5" title="boots rush" :bootsFirst="builds.bootsFirst">
|
|
<div class="iv-items-container">
|
|
<div style="margin-left: 5px; margin-right: 5px;" v-for="item in builds.boots" >
|
|
<NuxtImg v-if="item.data != null && item.data != undefined"
|
|
class="item-img" width="64" height="64" :alt="item.data.toString()"
|
|
:src="CDRAGON_BASE + mapPath(itemMap.get(item.data).iconPath)" />
|
|
<h3 style="width: fit-content; margin:auto; margin-bottom: 10px;">{{ (item.count/builds.tree.count * 100).toFixed(0) }}%</h3>
|
|
</div>
|
|
</div>
|
|
</ItemBox>
|
|
|
|
<!-- Core items -->
|
|
<ItemBox title="core">
|
|
<ItemTree style="margin:auto; width: fit-content;" :tree="builds.tree" />
|
|
</ItemBox>
|
|
|
|
<!-- Boots -->
|
|
<ItemBox v-if="builds.bootsFirst <= 0.5" title="boots">
|
|
<div class="iv-items-container">
|
|
<div style="margin-left: 5px; margin-right: 5px;" v-for="item in builds.boots.slice(0, 4)" >
|
|
<NuxtImg v-if="item.data != null && item.data != undefined"
|
|
class="item-img" width="64" height="64" :alt="item.data.toString()"
|
|
:src="CDRAGON_BASE + mapPath(itemMap.get(item.data).iconPath)" />
|
|
<h3 style="width: fit-content; margin:auto; margin-bottom: 10px;">{{ (item.count/builds.tree.count * 100).toFixed(0) }}%</h3>
|
|
</div>
|
|
</div>
|
|
</ItemBox>
|
|
|
|
<!-- Late game items -->
|
|
<ItemBox title="late game">
|
|
<div id="iv-late-game-container">
|
|
|
|
<div class="iv-items-container">
|
|
<div style="margin-left: 5px; margin-right: 5px;" v-for="item in builds.lateGame.slice(0, 4)" >
|
|
<NuxtImg v-if="item.data != null && item.data != undefined"
|
|
class="item-img" width="64" height="64" :alt="item.data.toString()"
|
|
:src="CDRAGON_BASE + mapPath(itemMap.get(item.data).iconPath)" />
|
|
<h3 style="width: fit-content; margin:auto; margin-bottom: 10px;">{{ (item.count/builds.tree.count * 100).toFixed(0) }}%</h3>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="iv-items-container">
|
|
<div style="margin-left: 5px; margin-right: 5px;" v-for="item in builds.lateGame.slice(4, 8)" >
|
|
<NuxtImg v-if="item.data != null && item.data != undefined"
|
|
class="item-img" width="64" height="64" :alt="item.data.toString()"
|
|
:src="CDRAGON_BASE + mapPath(itemMap.get(item.data).iconPath)" />
|
|
<h3 style="width: fit-content; margin:auto; margin-bottom: 10px;">{{ (item.count/builds.tree.count * 100).toFixed(0) }}%</h3>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</ItemBox>
|
|
</div>
|
|
</template>
|
|
|
|
<style>
|
|
#iv-container {
|
|
display: flex;
|
|
width: fit-content;
|
|
height: fit-content;
|
|
}
|
|
.iv-items-container {
|
|
display: flex;
|
|
flex-direction: column;
|
|
width: fit-content;
|
|
height: fit-content;
|
|
margin:auto;
|
|
}
|
|
.item-img {
|
|
border: 1px solid var(--color-on-surface);
|
|
margin: 10px;
|
|
}
|
|
#iv-late-game-container {
|
|
display: flex;
|
|
}
|
|
|
|
@media only screen and (max-width: 1000px) {
|
|
#iv-container {
|
|
flex-direction: column;
|
|
width: 100%;
|
|
}
|
|
.iv-items-container {
|
|
flex-direction: row;
|
|
}
|
|
.item-img {
|
|
width: 48px;
|
|
height: 48px;
|
|
}
|
|
#iv-late-game-container {
|
|
flex-direction: column;
|
|
}
|
|
}
|
|
</style>
|