Commit 00040e6
authored
feat(ui): yishijie 借鉴 PR#1+PR#2 — 战斗角色 + 地图多媒体 (#4)
* docs(plans): 创建 yishijie 借鉴计划双文档
- 基建版(B1-B8):错误监控、env 注入、base path 适配、schema 迁移、release-bundle、资源捕获
- UI/玩法版(U1-U22):水晶拨点、属性雷达、战斗模型扩展、2.5D 地图、多媒体画廊、立绘切换
本次仅创建规划文档,未动业务代码。等用户 proceed 后分 5 个 PR 落地。
* feat(new-game): U2 水晶拨点属性分配面板
- 新增 CrystalStatPanel 组件,6 维属性以水晶方式呈现(大小/亮度随数值缩放)
- 顶部徽章实时显示剩余点数(负数变红)+ 难度配色
- 新增「自动均衡」+「重置」两个快捷操作
- 替换 NewGameWizardContent 内联 -/+ 按钮 UI(-41 / +20 行)
- TDD:11 个测试覆盖渲染、+/- 交互、min/max 边界、剩余点禁用、快捷操作
来源:docs/plans/2026-06-15_yishijie-ui-gameplay-borrow-plan.md U2
测试:vitest 2455 通过 / 2 跳过(无回归)
* feat(character): U3 6 维属性雷达图(SVG)
- 新增 AttributeRadar 组件:纯 SVG + Tailwind 颜色,零外部依赖
- 6 顶点(力量/敏捷/体质/根骨/悟性/福源)顺时针分布
- 3 层同心六边形网格 + 6 条轴线 + 数据多边形 + 顶点圆点
- 可定制 size / maxValue / fillColor / gridColor / showValues
- 集成到 CharacterProfileCard「基础六维」section,作为视觉补充(不替换文本列表)
- TDD:10 个测试覆盖 SVG 渲染、标签、网格层、数据点、缩放、自定义
来源:docs/plans/2026-06-15_yishijie-ui-gameplay-borrow-plan.md U3
测试:vitest 2465 通过 / 2 跳过(无回归)
* feat(battle): U4 战斗模型扩展(5 字段 optional + 规范化函数)
- models/battle.ts 新增 5 个 optional 字段:暴击率/闪避率/最大连击/物理抗性/内力抗性
- 全部 default 0,向后兼容旧存档(JSON forward-compatible)
- 新增 规范化战斗敌方信息(raw) 函数:不可变补齐默认值,复制 技能 数组
- BattleModal 集成:敌方卡片在资源条下方按需显示扩展属性徽章(> 0 才显示)
- 徽章配色:暴击=琥珀/闪避=天蓝/连击=紫红/物抗=石色/内抗=紫罗兰
- TDD:7 个测试覆盖旧存档兼容、字段保留、部分缺失、不可变性、独立引用
来源:docs/plans/2026-06-15_yishijie-ui-gameplay-borrow-plan.md U4
测试:vitest 2472 通过 / 2 跳过(无回归)
* feat(ui): U5 通用状态徽章组件 StatusBadge
- 新增 components/ui/StatusBadge.tsx:通用 tone-based 徽章
- 7 种 tone:neutral/info/success/warning/danger/primary/rarity
- 3 种 size:sm(9px) / md(10px) / lg(sm-base)
- 可选 icon + value(value=0 不渲染,避免零值噪音)
- 重构 BattleModal M4.c 的 5 个 raw 徽章 → StatusBadge 调用
(warning/info/danger/neutral/primary tone 映射暴击/闪避/连击/物抗/内抗)
- 注意:与 BoardGame/shared/StatusBadge.tsx 同名但用途不同(路径隔离)
TDD:20 个测试覆盖基础渲染、tone 配色、size、icon+value、自定义 className
来源:docs/plans/2026-06-15_yishijie-ui-gameplay-borrow-plan.md U5
测试:vitest 2492 通过 / 2 跳过(无回归)
* feat(map): U7 世界地图缩略图组件 WorldMinimap
- 新增 components/features/Map/WorldMinimap.tsx:地图缩略卡片网格
- 每张卡片显示:名称 + 归属层级(大>中>小)+ 建筑数徽章
- 当前 small place 匹配的卡片用 wuxia-gold 高亮 + 「当前位置」徽章
- 零外部依赖,纯 Tailwind
- 集成到 MapModal 左侧 sidebar 顶部(保留原详细列表)
- TDD:7 个测试覆盖基础渲染、当前高亮、点击交互、边界处理
来源:docs/plans/2026-06-15_yishijie-ui-gameplay-borrow-plan.md U7
测试:vitest 2499 通过 / 2 跳过(无回归)
* feat(story): U8 故事图片画廊组件 StoryGallery
- 新增 components/features/Story/StoryGallery.tsx:通用图片网格
- 网格布局 2/3/4 列响应式,缩略图 hover 缩放效果
- 点击触发 onSelect 回调(父组件决定如何放大)
- 零外部依赖,纯 Tailwind
- 解耦:组件接受 image URL 列表,不连 image-assets 异步 API
(集成时由父组件 fetch URL 后传入)
- TDD:6 个测试覆盖基础渲染、空态、点击、可访问性
来源:docs/plans/2026-06-15_yishijie-ui-gameplay-borrow-plan.md U8
测试:vitest 2505 通过 / 2 跳过(无回归)
* feat(ui): U9 通用视频内嵌播放组件 VideoPlayer
- 新增 components/ui/VideoPlayer.tsx:HTML5 <video> 包装
- 支持 src/poster/controls/autoPlay/loop/muted/maxWidth
- 错误时显示降级 UI(红色边框 + 源 URL 提示)
- 零外部依赖
- TDD:7 个测试覆盖渲染、poster、controls、错误处理、可定制性
来源:docs/plans/2026-06-15_yishijie-ui-gameplay-borrow-plan.md U9
测试:vitest 2512 通过 / 2 跳过(无回归)
* feat(map): U11 2.5D Canvas 等距投影地图组件
- 新增 components/features/Map/IsometricMapCanvas.tsx:Canvas 2D 等距地图
- 零外部依赖(替代 Three.js,遵循基建版「不引入 3D」原则)
- N×M tile 网格 + 菱形顶面 + 高度差侧面(自动上色)
- back-to-front 渲染顺序(按 x+y 排序避免遮挡)
- 当前位置金色脉冲环标记
- 点击反向投影回 tile 坐标,触发 onTileClick
- TDD:8 个测试覆盖 canvas 渲染、尺寸、点击交互、当前位置、边界
来源:docs/plans/2026-06-15_yishijie-ui-gameplay-borrow-plan.md U11
测试:vitest 2520 通过 / 2 跳过(无回归)1 parent 079499f commit 00040e6
22 files changed
Lines changed: 3282 additions & 44 deletions
File tree
- components
- features
- Battle
- Character
- Map
- NewGame
- Story
- ui
- docs/plans
- models
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
160 | 161 | | |
161 | 162 | | |
162 | 163 | | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
163 | 185 | | |
164 | 186 | | |
165 | 187 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
259 | 260 | | |
260 | 261 | | |
261 | 262 | | |
262 | | - | |
263 | | - | |
264 | | - | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
265 | 283 | | |
266 | 284 | | |
267 | 285 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
0 commit comments