diff --git a/docs/technical/BIG_FISH_CREATION_AND_RUNTIME_MINIMAL_IMPLEMENTATION_2026-04-22.md b/docs/technical/BIG_FISH_CREATION_AND_RUNTIME_MINIMAL_IMPLEMENTATION_2026-04-22.md index dfb720dc..00df4ac5 100644 --- a/docs/technical/BIG_FISH_CREATION_AND_RUNTIME_MINIMAL_IMPLEMENTATION_2026-04-22.md +++ b/docs/technical/BIG_FISH_CREATION_AND_RUNTIME_MINIMAL_IMPLEMENTATION_2026-04-22.md @@ -241,6 +241,7 @@ 1. 展示会话、草稿、资产槽位、运行快照。 2. 发送聊天、action 和摇杆输入。 3. 根据后端 snapshot 渲染实体。 +4. 当后端 snapshot 返回 `won` 或 `failed` 时,必须在玩法舞台中央显示清晰结算浮层;通关与失败都不能只依赖顶部状态标签或事件日志。 前端禁止: diff --git a/src/components/big-fish-runtime/BigFishRuntimeShell.tsx b/src/components/big-fish-runtime/BigFishRuntimeShell.tsx index e49471d1..10088c99 100644 --- a/src/components/big-fish-runtime/BigFishRuntimeShell.tsx +++ b/src/components/big-fish-runtime/BigFishRuntimeShell.tsx @@ -108,6 +108,24 @@ function resolveRuntimeEntityAsset( ); } +function resolveSettlementCopy(run: BigFishRuntimeSnapshotResponse) { + if (run.status === 'won') { + return { + title: '通关完成', + message: `已成长到 Lv.${run.playerLevel},本轮生态征服完成。`, + tone: 'from-emerald-300/28 via-cyan-300/18 to-white/10', + }; + } + if (run.status === 'failed') { + return { + title: '本轮失败', + message: '己方鱼群已经耗尽,重新调整路线再来一次。', + tone: 'from-rose-300/30 via-orange-300/16 to-white/10', + }; + } + return null; +} + function BigFishEntityDot({ entity, run, @@ -241,6 +259,7 @@ export function BigFishRuntimeShell({ const statusLabel = run.status === 'won' ? '通关' : run.status === 'failed' ? '失败' : '进行中'; + const settlementCopy = resolveSettlementCopy(run); const backgroundAsset = findBigFishAssetSlot(assetSlots, 'stage_background')?.assetUrl?.trim() || null; @@ -298,6 +317,21 @@ export function BigFishRuntimeShell({ ))} + {settlementCopy ? ( +
+
+
+ {settlementCopy.title} +
+
+ {settlementCopy.message} +
+
+
+ ) : null} +
{isBusy ?
同步中...
: null} {error ?
{error}
: null}