From bfbca08d7259b41020fba905e0814a0ee48e5466 Mon Sep 17 00:00:00 2001 From: Blizzard Date: Thu, 16 Jul 2026 11:17:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(desktop):=20=E5=8A=9E=E5=85=AC=E5=AE=A4?= =?UTF-8?q?=E6=8D=A2=20AI=20=E6=88=BF=E9=97=B4=E8=83=8C=E6=99=AF=EF=BC=8C?= =?UTF-8?q?=E6=89=8B=E7=BB=98=20SVG=20=E5=9C=BA=E6=99=AF=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E9=80=80=E5=BD=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 第三版房间才可用。前两版地板都只占画面 13%,而场景需要 ~60% 的地面 才摆得下工位——但那不怪模型,是我提示词自相矛盾:同时要求"正面平视"和 "下方 60% 是地板",几何上不可能同时成立(平视时地板向地平线收缩)。 改成"俯视 30 度、娃娃屋视角"后一次就对(实测地板 53% / 墙 47%)。 参考项目的 office.png 本来就是俯视娃娃屋 + 正面角色,它早验证过这个组合。 不拉伸图去迁就场景,而是改场景去迁就图:VB 720×510 → 940×512,正好是 房间图的比例(1.835)。拉伸 30% 的话墙上挂钟会变成椭圆,一眼假。 所有坐标按图里量出的百分比换算:FLOOR_Y=242(地平线 47.3%)、 DOOR_X=279(门中心 29.7%,角色从画上那扇真门里走出来)。 量着修的两个碰撞: - 白板压住门和窗。实测墙上被门 214~343、钟 443~515、窗 612~791、 绿植 863~932 占着,最大空白段仅 214 宽,放不下 340 的白板。选择盖掉 挂钟(静态装饰、零信息量),白板落在门与窗之间的 347~613。 - 协调者的桌子撞上正下方工位的气泡。可行区间只有 (242, 276): 低于 242 会飘到墙上,高于 276 撞气泡。取 268。 字号 ×1.3 补偿:viewBox 从 720 加宽到 940 后,同样单位在真实面板 (~520px)里会缩小 28%,不补的话白板正文只有 7px。验收也是在 520px 下做的,不是在预览页那个宽容的尺寸下。 顺带清掉 4 个死常量(WALL/FLOOR/DESK_TOP/DESK_FRONT)——房间换贴图后没人用了。 资源合计 148 KB(7 立绘 + 1 房间,全 WebP)。 Co-Authored-By: Claude Opus 4.8 --- .../frontend/src/assets/office/room.webp | Bin 0 -> 31702 bytes .../frontend/src/components/OfficeView.tsx | 77 ++++++------------ 2 files changed, 23 insertions(+), 54 deletions(-) create mode 100644 sundynix-desktop/frontend/src/assets/office/room.webp diff --git a/sundynix-desktop/frontend/src/assets/office/room.webp b/sundynix-desktop/frontend/src/assets/office/room.webp new file mode 100644 index 0000000000000000000000000000000000000000..4f0f13737d019f709fcdad3c6aaf856cf958ac21 GIT binary patch literal 31702 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 - - {fitText(name, (w - 62) / 16)} + + {fitText(name, (w - 62) / 20)} - + {sub} @@ -376,40 +375,10 @@ function Actor({ cue, reduced, hasLead }: { cue: Cue; reduced: boolean; hasLead: ); } -// 场景道具 +// 场景道具:整间房是一张贴图(AI 生成),门/窗/挂钟/绿植都在图里。 +// 原来这里是手绘 SVG 的墙地门窗,被立绘一衬托就露怯,整段换掉。 function Room() { - return ( - - - - - {/* 地毯 */} - - {/* 门:专家从这里进场 */} - - - - - - {/* 挂钟 */} - - - - - {/* 窗 */} - - - - - - {/* 绿植 */} - - - - - - - ); + return ; } export function OfficeView({ events, output, phase }: { events: ExecEvent[]; output?: string; phase?: RunPhase }) { @@ -426,7 +395,7 @@ export function OfficeView({ events, output, phase }: { events: ExecEvent[]; out // 排位:≤5 人一排(前排),否则拆两排,后排小、前排大 —— 用缩放造纵深。 // 两排时后排不出头顶气泡:气泡很高,会顶到协调者的桌子;状态仍由显示器辉光和铭牌圆点表达。 const rows: TeamSeat[][] = seats.length <= 5 ? [seats] : [seats.slice(0, Math.ceil(seats.length / 2)), seats.slice(Math.ceil(seats.length / 2))]; - const rowCfg = rows.length === 1 ? [{ y: 452, s: 1 }] : [{ y: 330, s: 0.58 }, { y: 460, s: 0.8 }]; + const rowCfg = rows.length === 1 ? [{ y: 470, s: 1 }] : [{ y: 358, s: 0.62 }, { y: 478, s: 0.85 }]; // 档期:直播时事件到哪演到哪(延迟一律 0);复盘时按时间戳排,整段压进 PLAY_MS。 const rate = streaming ? 0 : Math.min(1, PLAY_MS / span); @@ -524,11 +493,11 @@ export function OfficeView({ events, output, phase }: { events: ExecEvent[]; out {/* 白板:协调者的思考/综合过程 */} - - - + + +
-
+
{lead ? streaming ? "综合中…" @@ -543,7 +512,7 @@ export function OfficeView({ events, output, phase }: { events: ExecEvent[]; out