- 新增 ui/shared.ts 统一 getStatColor 函数 - CompanionCard/SpeciesDetail 改用共享函数,消除重复 - 移除 data/evolution.ts 中已废弃的 EVOLUTION_CHAINS 常量 - 清理 index.ts 导出 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
38 lines
1.0 KiB
TypeScript
38 lines
1.0 KiB
TypeScript
import { Dex } from '@pkmn/sim'
|
|
import type { SpeciesId } from '../types'
|
|
import { ALL_SPECIES_IDS } from '../types'
|
|
|
|
|
|
|
|
export interface EvolutionChainStep {
|
|
from: SpeciesId
|
|
to: SpeciesId
|
|
trigger: 'level_up' | 'item' | 'trade' | 'friendship'
|
|
minLevel?: number
|
|
}
|
|
|
|
/** Find the next evolution for a species, dynamically from Dex */
|
|
export function getNextEvolution(speciesId: SpeciesId): EvolutionChainStep | undefined {
|
|
const dex = Dex.species.get(speciesId)
|
|
if (!dex?.evos?.length) return undefined
|
|
|
|
// Take the first evolution target (most species have single evo path)
|
|
const target = dex.evos[0]!.toLowerCase()
|
|
if (!ALL_SPECIES_IDS.includes(target as SpeciesId)) return undefined
|
|
|
|
const targetDex = Dex.species.get(target)
|
|
if (!targetDex?.exists) return undefined
|
|
|
|
const trigger = dex.evoType === 'trade' ? 'trade'
|
|
: dex.evoType === 'useItem' ? 'item'
|
|
: dex.evoType === 'levelFriendship' ? 'friendship'
|
|
: 'level_up'
|
|
|
|
return {
|
|
from: speciesId,
|
|
to: target as SpeciesId,
|
|
trigger,
|
|
minLevel: targetDex.evoLevel ?? undefined,
|
|
}
|
|
}
|