use new modifier utils in unit components

This commit is contained in:
Justin Edmund 2025-09-25 00:26:17 -07:00
parent 739c415284
commit 6762c2dab4
2 changed files with 87 additions and 32 deletions

View file

@ -151,6 +151,7 @@
special={item.character?.special}
flb={item.character?.uncap?.flb}
ulb={item.character?.uncap?.ulb}
transcendence={!item.character?.special && item.character?.uncap?.ulb}
editable={ctx?.canEdit()}
updateUncap={async (level) => {
if (!item?.id || !ctx) return

View file

@ -8,6 +8,7 @@
import UncapIndicator from '$lib/components/uncap/UncapIndicator.svelte'
import { getWeaponImage } from '$lib/features/database/detail/image'
import { openDetailsSidebar } from '$lib/features/details/openDetailsSidebar.svelte'
import { getAwakeningImage, getWeaponKeyImages, getAxSkillImages } from '$lib/utils/modifiers'
interface Props {
item?: GridWeapon
@ -45,6 +46,23 @@
return getWeaponImage(item?.weapon?.granblueId, variant, element)
})
// Get awakening image URL using utility
let awakeningImage = $derived(getAwakeningImage(item?.awakening))
// Get weapon key images using utility
let weaponKeyImages = $derived(
getWeaponKeyImages(
item?.weaponKeys,
item?.weapon?.element,
item?.weapon?.proficiency,
item?.weapon?.series,
item?.weapon?.name
)
)
// Get AX skill images using utility
let axSkillImages = $derived(getAxSkillImages(item?.ax))
async function remove() {
if (!item?.id) return
try {
@ -88,20 +106,29 @@
class:editable={ctx?.canEdit()}
onclick={() => viewDetails()}
>
<div class="modifiers">
{#if awakeningImage}
<img
class="awakening"
src={awakeningImage}
alt={`${item?.awakening?.type?.name?.en || 'Awakening'} Lv${item?.awakening?.level || 0}`}
/>
{/if}
<div class="skills">
{#each axSkillImages as skill}
<img class="skill" src={skill.url} alt={skill.alt} />
{/each}
{#each weaponKeyImages as skill}
<img class="skill" src={skill.url} alt={skill.alt} />
{/each}
</div>
</div>
<img
class="image"
class:placeholder={!item?.weapon?.granblueId}
alt={displayName(item?.weapon)}
src={imageUrl}
/>
{#if ctx?.canEdit() && item?.id}
<div class="actions">
<button class="remove" title="Remove" onclick={(e) => { e.stopPropagation(); remove() }}>×</button>
</div>
{/if}
{#if item?.mainhand || position === -1}
<span class="badge">Main</span>
{/if}
</div>
{/key}
{/snippet}
@ -256,35 +283,62 @@
color: $grey-50;
}
.actions {
.modifiers {
position: absolute;
top: 6px;
right: 6px;
display: flex;
gap: 6px;
width: 100%;
height: 100%;
z-index: 3;
pointer-events: none;
.awakening {
position: absolute;
width: 30%;
height: auto;
}
.skills {
position: absolute;
display: flex;
gap: calc($unit / 4);
padding: calc($unit / 2);
.skill {
width: 20%;
height: auto;
}
}
}
.remove {
background: rgba(0,0,0,.6);
color: white;
border: none;
border-radius: 12px;
width: 24px;
height: 24px;
line-height: 24px;
cursor: pointer;
// Position modifiers for grid weapons
.frame.weapon.cell {
.awakening {
top: 14%;
left: -3.5%;
}
.skills {
bottom: 2%;
right: 2%;
justify-content: flex-end;
}
}
.badge {
position: absolute;
left: 6px;
top: 6px;
background: #333;
color: #fff;
font-size: 11px;
padding: 2px 6px;
border-radius: 10px;
z-index: 3;
// Position modifiers for main weapons
.frame.weapon.main {
.awakening {
width: 40%;
top: 67%;
left: -3.5%;
}
.skills {
bottom: 12%;
right: -3.5%;
justify-content: flex-end;
.skill {
width: 25%;
}
}
}
</style>