feat(game): 更新游戏数据结构并优化历史记录显示

- 将动物图片资源配置重构为统一的花朵资源管理模块
- 添加奖励图片资源支持,实现动物和奖励图片的双重映射
- 在游戏历史记录中显示实际数字对应的奖励图标
- 修复历史记录中数字显示的空值处理逻辑
- 更新GitNexus项目索引统计信息
- 优化桌面游戏中花朵选择组件的渲染性能
This commit is contained in:
JiaJun
2026-05-29 16:47:41 +08:00
parent 15c519a42c
commit f388aabfda
43 changed files with 97 additions and 26 deletions

View File

@@ -12,27 +12,11 @@ import refreshIcon from '@/assets/system/refresh.webp'
import { SmartBackground } from '@/components/smart-background.tsx'
import { SmartImage } from '@/components/smart-image'
import { useAnimalVm } from '@/features/game/hooks/use-animal-vm'
import { FLOWER_IMAGE_LIST } from '@/features/game/shared'
import { cn } from '@/lib/utils'
import { useAuthStore } from '@/store/auth'
import { useGameAutoHostingStore, useGameRoundStore } from '@/store/game'
const animalModules = import.meta.glob('../../../../assets/animal/*.webp', {
eager: true,
import: 'default',
}) as Record<string, string>
const animalImageList = Object.entries(animalModules)
.map(([path, url]) => {
const match = path.match(/\/(\d+)\.webp$/)
return {
id: Number(match?.[1] ?? 0),
url,
}
})
.filter((item) => item.id > 0)
.sort((left, right) => left.id - right.id)
const SETTLEMENT_REVEAL_RANDOM_DURATION_MS = 4_000
const SETTLEMENT_REVEAL_RESULT_HOLD_MS = 1_000
const SETTLEMENT_REVEAL_MIN_STEP_MS = 90
@@ -82,7 +66,7 @@ export function DesktopAnimal({
}: DesktopAnimalProps) {
const { i18n, t } = useTranslation()
const prefersReducedMotion = useReducedMotion()
const animalIds = useMemo(() => animalImageList.map((item) => item.id), [])
const animalIds = useMemo(() => FLOWER_IMAGE_LIST.map((item) => item.id), [])
const containerRef = useRef<HTMLElement | null>(null)
const cellRefs = useRef(new Map<number, HTMLButtonElement>())
const [revealCellId, setRevealCellId] = useState<number | null>(null)
@@ -241,7 +225,7 @@ export function DesktopAnimal({
className,
)}
>
{animalImageList.map((item) => {
{FLOWER_IMAGE_LIST.map((item) => {
const selectionMeta = selectionByCell[item.id]
const hasPlacedSelection = Boolean(selectionMeta)
const isMarqueeActive = showStandbyState && item.id === marqueeId
@@ -355,7 +339,7 @@ export function DesktopAnimal({
/>
) : null}
<SmartImage
src={item.url}
src={item.animalUrl}
alt={`animal-${item.id}`}
className={cn(
'absolute left-[1.5%] right-[1.5%] top-[2.9%] bottom-[2.9%] z-10 overflow-hidden rounded-[calc(var(--design-unit)*14)]',