为什么:地图功能已全通但缺"游戏手感"——点击有反馈(toast)却看不到 画面上的动静,时间流动也只在倒计时数字里。这一轮全部补上。 - 动作粒子特效(webui):act() 成功后在目标位置喷粒子 + 上浮表情小字 (浇水💧水花、播种🌱扬土、收获/收取✨金点、喂食🍽)。粒子受重力、 按寿命衰减,失败动作不触发(api() 返回 null 时 mapJuice 不执行)。 - 昼夜色温:一天的进度(1 - seconds_to_tick/tick_seconds)映射成 清晨淡金 → 正午不叠色 → 黄昏橙 → 入夜靛紫的半透明覆盖层, 让"40 分钟一天"在画面光色上也流动。tick_seconds 完整快照里有、 brief 里没有,靠 refreshFromBrief 的合并语义保留。 - 成熟作物金光改呼吸式(shadowBlur 随 sin 起伏),悬停可交互对象时 指针变手型。 验证:532 项测试全绿、ruff/pyright 干净;真机 headless Chrome 实测 粒子注入 23 枚 2 秒内衰减归零、失败动作不产生特效、dayTint 三时段 数值正确、截图目检清晨色调正常、控制台零报错。
4.3 KiB
4.3 KiB
2026-09-25 四座自动化设施
- 用户要「添加自动化设施」,AskUserQuestion 给了 4 个候选,用户全选: 喷灌系统 / 自动收割机 / 自动售货机 / 饲料磨坊。
- 设计上沿用既有建筑哲学:只替代行动点动作,绝不自动花钱。
_run_buildings扩成六段流水线(顺序即依赖): 水井 → 喷灌 → 收割机 → 磨坊 → 喂食器 → 售货机。 磨坊刻意排在喂食器前——早上磨的饲料当天就能喂上; 收割机遇满仓停摆、作物留地(同喂食器缺料停摆)。 - 数值:喷灌 2800/限1/全量浇水;收割机 900/限3/每天各收 2 块熟地、 刻意不给经验(机器收的不算劳动,给手动玩法留价值); 售货机 1200/限1/市价>基准价才卖、每天上限 5 份、越贵越先卖 (_earn 复用 sell 的入账逻辑);磨坊 500/限1/1 份最便宜的作物磨 3 份饲料 (FEED_UNIT_PRICE=6,小麦 14 磨 18 金的料,微赚但吃掉作物)。
- 架构红利:config.BUILDINGS 驱动一切(build 动作、catalog、网页建筑区、 可用动作推荐),新增建筑 engine 之外零改动。
- 测试 +6,途中确认两个既有行为:引擎自带 START_FEED=5(feed 断言要先清零); advance_day 牲畜阶段末尾会把 fed 复位(「喂到了」的证据是 pending 累计, 鸡 cycle=1 当天喂到就 pending=1)。
- 门禁 534 项 OK(skip 39)、ruff/pyright 全绿;提交
cb4c1e7已推送。 服务器已重启到新代码,catalog 8 座建筑齐全。
2026-09-25 Canvas 二维农场地图
- 用户问「能不能做成二维的」,AskUserQuestion 三选一:CSS 农田视图 / Canvas 像素农场 / 网页+TUI 都改,用户选 Canvas 像素农场。
- 实现:全在 webui.py(服务端零改动,state 里现成的 plots/animals/buildings 够用)。页首插一张全宽 canvas 卡片:逻辑坐标绘制(456×152 起,随地块数变)、 实际像素 = 容器宽 × dpr,命中检测自己算(逻辑坐标 = clientX × MAP.w/rect.width)。 农田 4 列方阵(>12 块改 6 列)土壤颜色随水分插值、作物 emoji 随生长放大、 成熟金光、干裂画裂纹;牧场围栏里牲畜随机漫步回弹、待收产物金泡、没喂 💢; 底部建筑带(owned>0 才画);天气五種各有天色+雨滴/云/烈日。 交互复用 openCropPick/act():空地点击弹选种、熟地收获、缺水浇水、 牲畜收取优先于喂食。下方卡片面板全保留(地图负责沉浸,卡片负责精确)。
- 踩坑:rAF 循环首帧同步执行。updateMap 原顺序 bind→layout,首帧
f.ts在 MAP.field=null 上 TypeError,把 requestAnimationFrame 注册一起吞掉, 表现是「画布全白但点击命中正常」(命中是纯数学不经过画布)。 修复:layout→sync→bind→fit 顺序 + mapStep/mapDraw 空值护栏。 排查手法:截图空白先别信,getImageData读像素 + 探针 rAF 计数 + 云位移 三连定位「画了没」和「循环活着没」。 - 真机验收:登录、canvas 点击浇水(AP 4→3、水分 2→3、toast)、 悬停 tooltip、截图目检全过;errors/console 干净。534 项测试全绿。
2026-09-25 移除行动点系统
- 用户拍板:「谁家浇水还要体力啊 体力删掉 都已经有时间了」——时间 (40 分钟一天、只能自然流动)本身就是唯一节奏阀门,AP 是重复惩罚。
- 连根拔的触点:config(START_AP/AP_COST)、models(ap/max_ap 字段,旧档 payload 的 ap 键 from_dict 自然忽略)、engine(_spend_ap + 8 调用点 + 每日恢复)、bot(AP 分支)、client/TUI/main/README/规则文本。
- SQLite 老库迁移:ap 是标量 NOT NULL 列,connect() 里
PRAGMA table_info发现即ALTER TABLE farms DROP COLUMN ap(Python 3.13 的 SQLite ≥3.35 支持)。实测 saves/farm.db 自动迁完。 - 网页端:删"行动点"统计卡;"下一天"倒计时改客户端本地走秒 (render 记 tickLeft/tickStamp 基点,1s 定时器补 SSE 推送间隙); 字体栈补 MiSans/HarmonyOS Sans/PingFang、正文 15px、数字 tabular-nums、canvas 小字加粗。
- 测试 -2(AP 专属用例没了)改 5,532 项全绿;提交
15d290a已推送。 真机:老库迁移 ✅、无行动点卡 ✅、倒计时 39:04→39:02 走秒 ✅。