feat: 同步 pkmn Dex 全部 1025 只精灵,新增 SpeciesPicker 搜索选择器

- SpeciesId 从 10 项联合类型改为 string,动态从 @pkmn/sim Dex 加载 1025 只精灵
- getSpecies() 改用 Dex.species.get() 直接查找(gen wrapper 仅覆盖 733/1025)
- SUPPLEMENT/DEX_TO_SPECIES 动态生成,未收录 species 使用默认值兜底
- names/fallback 改为 partial records,缺失时回退到 Dex 英文名/通用 sprite
- 新增 SpeciesPicker 组件(基于 FuzzyPicker),支持中英文/编号搜索选择精灵
- BattleFlow configSelect 阶段替换为 SpeciesPicker,删除旧的上下翻页逻辑
- evolution 移除 ALL_SPECIES_IDS 限制,所有 Dex 物种均可进化

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
claude-code-best
2026-04-22 15:15:19 +08:00
parent 77e8d15482
commit 1217c453c4
11 changed files with 181 additions and 156 deletions

View File

@@ -71,9 +71,11 @@ describe('checkEvolution', () => {
expect(checkEvolution(creature)).toBeNull()
})
test('pikachu cannot evolve in MVP', () => {
test('pikachu does not evolve by level-up (needs item)', () => {
const creature = makeEvolutionCreature({ speciesId: 'pikachu', level: 50 })
expect(checkEvolution(creature)).toBeNull()
// Pikachu evolves via Thunder Stone, not level-up
const result = checkEvolution(creature)
expect(result).toBeNull()
})
test('level 100 bulbasaur can still evolve (level >= minLevel)', () => {
@@ -118,7 +120,7 @@ describe('canEvolveFurther', () => {
expect(canEvolveFurther('blastoise')).toBe(false)
})
test('pikachu cannot evolve in MVP', () => {
expect(canEvolveFurther('pikachu')).toBe(false)
test('pikachu can evolve into raichu', () => {
expect(canEvolveFurther('pikachu')).toBe(true)
})
})