v0.14: 放置系统 (Idle Operations) — 采矿无人机舰队 + 6放置工程 + 永久产能加成 + idle徽章
This commit is contained in:
Regular → Executable
+75
@@ -445,3 +445,78 @@ Stage Summary:
|
||||
- ✅ P1-b 信标链: 4里程碑(3/7/14/30天) + grace续命, amber→rose渐变
|
||||
- ✅ 在线游玩 v0.8.1: https://gitea-pages.atdunbg.xyz/Super_Z/echo-nexus/
|
||||
- 下一阶段工单: P2 UI样式细节打磨 / P2 云存档+云排行榜 / P3 全纪元叙事
|
||||
|
||||
---
|
||||
Task ID: v0.14-reimpl
|
||||
Agent: full-stack-developer
|
||||
Task: 放置系统 (Idle Operations) — 采矿无人机舰队 + 6放置工程 + 永久产能加成 + idle徽章
|
||||
|
||||
Work Log:
|
||||
- 阅读 worklog.md 了解 v0.8.1 项目状态(10 大系统 + 四色全息规范 + 8 标签页架构)
|
||||
- 类型扩展 `src/lib/game/types.ts`:
|
||||
- 新增 `IdleProjectDef` 接口(id/name/desc/durationSec/reward/minAscensions/minCrystalsPerSec/icon/color/order)
|
||||
- 新增 `IdleProjectSlot` 接口(projectId/startedAt/finishesAt/remainingSec/completed)
|
||||
- GameState 接口新增 4 字段:idleProjectSlots (3 槽位数组) / idleProjectHistory / idlePermanentBonus / idleStats
|
||||
- 新建 `src/lib/game/idle.ts` (~290 行):
|
||||
- 6 个放置工程定义(idle_scan 60s / idle_refine 180s / idle_archive 600s / idle_anchor 1200s / idle_drones 1800s / idle_resonance 3600s)
|
||||
- 奖励类型:crystals / insights / energy / contact / crystalsPerSecPermanent / randomFragment
|
||||
- 解锁逻辑:minAscensions 与 minCrystalsPerSec 为 OR 关系(满足任一已设置条件即可)
|
||||
- 工具函数:getIdleProject / getUnlockedIdleProjects / getLockedIdleProjects / isIdleProjectUnlocked / formatRemaining (12s/3m 45s/1h 12m) / formatReward / deriveMinerFleet (派生 min_1..min_5 采矿无人机,icon: ⛏️🌋🤖💠☀️,无任何采矿技术时返回休眠 min_1)
|
||||
- 颜色映射:IDLE_COLOR_CLASSES (text/border/bg/bgSoft/glow/ring/dot) + COLOR_HEX (用于 inline style 绕过 Tailwind 动态类限制)
|
||||
- 引擎集成 `src/lib/game/engine.ts`:
|
||||
- recomputeStats() 末尾 `crystalsPerSec += state.idlePermanentBonus ?? 0` (放置永久加成叠加)
|
||||
- performPrestige() 清空 idleProjectSlots (中断当前周目工程),保留 idlePermanentBonus/idleProjectHistory/idleStats (跨周目永久);recomputeStats 调用传 idlePermanentBonus
|
||||
- createInitialState() 新增 4 字段默认值
|
||||
- Store 集成 `src/store/gameStore.ts` (核心改造):
|
||||
- 新增 4 action:startIdleProject (校验+写入槽位) / cancelIdleProject (置 null) / claimIdleProject (应用奖励 + permBonus 累加 + randomFragment 解锁 + history 追加 + Toast 提示) / tickIdleProjects (每 tick 更新 remainingSec,归零标记 completed)
|
||||
- **persist migrate 函数**:persist 配置增加 `version: 1` + `migrate` 函数自动补全 4 个 idle 字段,旧存档加载不崩溃
|
||||
- 14 处 syncStats 调用全部更新为传入 `idlePermanentBonus: s.idlePermanentBonus ?? 0`,确保 recomputeStats 计算时纳入永久加成
|
||||
- init() 中也补全 4 个 idle 字段(defense in depth)
|
||||
- 主循环 `src/hooks/useGameLoop.ts`:新增 tickIdleProjects 选择器,setInterval 回调中 autoDecodeTick 后调用,visibilitychange 也调用
|
||||
- 新建 `src/components/game/IdleOperationsPanel.tsx` (~490 行):
|
||||
- 4 section 在 max-h-[520px] overflow-y-auto 容器中:
|
||||
1. 放置收益概览:3 stat tiles (放置产能/永久加成/完成工程) + 离线效率 progress bar + 累计放置晶体统计
|
||||
2. 采矿无人机舰队:grid 展示 deriveMinerFleet,每卡 emoji+name+Lv+output/s+状态点 (active=emerald ping 脉冲, dormant=灰)
|
||||
3. 放置工程槽位:3 张卡(空槽=虚线占位,运行中=大字号倒计时+自定义进度条+取消按钮,已完成=奖励预览+领取按钮带 glow)
|
||||
4. 可派遣工程:2 列 grid 展示已解锁工程(icon+name+duration+desc+reward+3 数字派遣按钮 1/2/3),下方列出未解锁工程及解锁条件
|
||||
- useShallow 订阅 + 本地 now state 每 1s 刷新倒计时
|
||||
- 严格 4 色全息,自定义 fuchsia 滚动条
|
||||
- 新建 `src/components/game/IdleStatusBadge.tsx` (~100 行):
|
||||
- 紧凑徽章 h-8 px-2.5 text-[11px]:脉冲点 (emerald 若 cps>0) + "放置中 +X/s" (或 "休眠中")
|
||||
- Tooltip 悬停展示分解:基础产能/永久加成/运行中工程/待领取工程数
|
||||
- data-tut="idle-status-badge" 锚点 + onClick 切换到放置 tab
|
||||
- 新建 `src/components/game/IdleProjectBar.tsx` (~90 行):
|
||||
- 晶体球下方细长进度条,最多 3 个工程 mini pill `[icon] name 12s ▓▓▓░░`
|
||||
- 完成时显示 "✓ 待领取" + glow 辉光;无工程返回 null
|
||||
- 进度条颜色用 inline style (COLOR_HEX) 控制,每 1s 刷新倒计时
|
||||
- 主页面集成 `src/app/page.tsx`:
|
||||
- 引入 3 新组件 + Clock 图标 + getUnlockedIdleProjects
|
||||
- 新增 activeTab/tabInited state + controlled Tabs (`value={activeTab} onValueChange={setActiveTab}`)
|
||||
- 挂载后 useEffect 一次性设置默认 tab:hasActiveExpedition→"expedition",hasPendingPerk→"constellation",否则→"idle"
|
||||
- 版本号 v0.8 → v0.14
|
||||
- Header 在 StarTideIndicator 后加 IdleStatusBadge
|
||||
- 左侧 CrystalOrb 后加 IdleProjectBar
|
||||
- TabsList grid-cols-8 → grid-cols-9,新增 value="idle" 的 TabsTrigger 作为第一个 tab(Clock 图标,emerald 主题,待领取时显示数量红点)
|
||||
- 新增 TabsContent value="idle" 渲染 IdleOperationsPanel
|
||||
- 新增 idle 相关 goal 提示(高优先级):待领取 > 0 → "✦ 放置工程已完成 X 项,请前往「放置」标签领取奖励";全空+有解锁+时长>60s → "「放置」标签可派遣工程项目,离线自动产出"
|
||||
- StatsPanel 新增 3 行:放置永久加成 / 完成放置工程 / 放置产出晶体
|
||||
- 教程更新 `src/lib/game/tutorial.ts`:TUTORIAL_STEPS 在 decode 与 tech 之间插入新步骤 (id="idle", target="tab-idle", 标题"③ 放置工程 · 离线产出"),原 tech/expedition/prestige 编号顺延为 ④⑤⑥
|
||||
- 写入 `agent-ctx/v0.14-reimpl-full-stack-developer.md` 工作记录
|
||||
- 最终验证:
|
||||
- lint 零错误零警告 ✅
|
||||
- dev 服务器 HTTP 200,编译 < 250ms ✅
|
||||
- agent-browser 烟雾测试全流程通过(默认 idle tab + 头部徽章 + 4 section + 派遣→倒计时→完成→领取→永久加成应用) ✅
|
||||
|
||||
Stage Summary:
|
||||
- ✅ v0.14 放置系统 (Idle Operations) 全部完成
|
||||
- ✅ 新增 4 文件(idle.ts 290行 + IdleOperationsPanel.tsx 490行 + IdleStatusBadge.tsx 100行 + IdleProjectBar.tsx 90行),修改 6 文件(types/engine/gameStore/useGameLoop/page/tutorial)
|
||||
- ✅ 6 个放置工程:勘探扫描 / 精炼校准 / 碎片整理 / 锚点部署 / 无人机扩编 / 谐振标定
|
||||
- ✅ 3 个槽位并行 + 6 工程解锁逻辑 (OR) + 永久产能加成 (permBonus 累加跨周目)
|
||||
- ✅ 采矿无人机舰队派生 (min_1..min_5) + 休眠状态显示
|
||||
- ✅ 头部 idle 徽章 + 默认放置 tab + 晶体球下方进度条 (5 秒内可见三要素)
|
||||
- ✅ persist migrate 函数 (version 1) 旧存档兼容
|
||||
- ✅ 14 处 syncStats 调用全部传 idlePermanentBonus,recomputeStats 永久加成不丢失
|
||||
- ✅ 飞升时清空活跃槽位但保留永久加成 / 历史 / 统计
|
||||
- ✅ 严格 4 色全息 (emerald/rose/amber/fuchsia),零蓝/靛
|
||||
- ✅ lint 零错误 + HTTP 200 + agent-browser 全流程烟雾测试通过
|
||||
- ✅ 9 标签页 (新增"放置"为第一个) + 巡航按钮 + 教程新增 idle 步骤
|
||||
|
||||
Reference in New Issue
Block a user