handle null element weapon images in frontend

This commit is contained in:
Justin Edmund 2025-12-16 21:17:00 -08:00
parent 696d792a8b
commit 90ea38e15f
4 changed files with 18 additions and 13 deletions

View file

@ -13,13 +13,16 @@
// Get transformation suffix for transcendence
const transformation = $derived(weapon.transcendenceStep > 0 ? '02' : undefined)
// Use instance element for element-changeable weapons
const displayElement = $derived(weapon.weapon?.element === 0 ? weapon.element : undefined)
// Use instance element for element-changeable weapons, default to 0 (no element image) if not set
const displayElement = $derived(weapon.weapon?.element === 0 ? (weapon.element ?? 0) : undefined)
const imageUrl = $derived(
getWeaponImage(weapon.weapon?.granblueId, 'grid', displayElement, transformation)
)
// Get awakening image URL
const awakeningImage = $derived(getAwakeningImage(weapon.awakening ?? undefined))
const displayName = $derived.by(() => {
const name = weapon.weapon?.name
if (!name) return '—'

View file

@ -15,8 +15,8 @@
// Get transformation suffix for transcendence
const transformation = $derived(weapon.transcendenceStep > 0 ? '02' : undefined)
// Use instance element for element-changeable weapons
const displayElement = $derived(weapon.weapon?.element === 0 ? weapon.element : undefined)
// Use instance element for element-changeable weapons, default to 0 (no element image) if not set
const displayElement = $derived(weapon.weapon?.element === 0 ? (weapon.element ?? 0) : undefined)
const imageUrl = $derived(
getWeaponImage(weapon.weapon?.granblueId, 'grid', displayElement, transformation)

View file

@ -46,8 +46,8 @@
const isMain = position === -1 || item?.mainhand
const variant = isMain ? 'main' : 'grid'
// For weapons with null element that have an instance element, use it
const element = item?.weapon?.element === 0 && item?.element ? item.element : undefined
// For element-changeable weapons (element === 0), use instance element or default to 0 (no element image)
const element = item?.weapon?.element === 0 ? (item?.element ?? 0) : undefined
return getWeaponImage(item?.weapon?.granblueId, variant, element)
})

View file

@ -93,8 +93,8 @@ export function getImageUrl(
return `${basePath}/${id}_${pose}${extension}`
}
// Handle weapon grid element variants
if (type === 'weapon' && variant === 'grid' && options?.element && options.element > 0) {
// Handle weapon grid element variants (including element 0 for null-element weapons)
if (type === 'weapon' && variant === 'grid' && options?.element !== undefined && options.element >= 0) {
return `${basePath}/${id}_${options.element}${extension}`
}
@ -143,8 +143,8 @@ export function getWeaponImage(
const extension = getFileExtension('weapon', variant)
const basePath = `${getBasePath()}/${directory}`
// Handle element-specific weapon grids
if (variant === 'grid' && element && element > 0) {
// Handle element-specific weapon grids (including element 0 for null-element weapons)
if (variant === 'grid' && element !== undefined && element >= 0) {
return `${basePath}/${id}_${element}${extension}`
}
@ -238,15 +238,17 @@ export function getCharacterImageWithPose(
/**
* Get weapon grid image with element support
* For element-changeable weapons (element === 0), uses instanceElement or defaults to 0 (no element image)
*/
export function getWeaponGridImage(
id: string | number | null | undefined,
element?: number,
instanceElement?: number
): string {
// Handle element-specific weapons (primal weapons)
if (id && element === 0 && instanceElement) {
return getImageUrl('weapon', id, 'grid', { element: instanceElement })
// Handle element-changeable weapons (element 0 means null/changeable)
// Use instance element if set, otherwise default to 0 (no element selected image)
if (id && element === 0) {
return getImageUrl('weapon', id, 'grid', { element: instanceElement ?? 0 })
}
return getImageUrl('weapon', id, 'grid')
}