feat(perform): 演出配置页(模式切换) + 镜头可视框始终可见

P1 反馈两处修改:
- 顶部加「海选审核 / 演出配置」模式切换;演出配置=独立页,左列仅已确认事件,
  选中即内嵌白模预览(弃用原弹窗),为 P2 在此配置演出细节打底
- 修镜头框只在 dialogue 显式带 camera 时才画的 bug:改为镜头可视区域框始终可见,
  显式镜头点优先→跟随说话人→跟玩家→场景中心,框尺寸按世界单位随舞台缩放+焦点十字
- timeline.js 从弹窗固定ID重构为挂载到任意容器 Timeline.show(host,...);
  离线模型测试复跑两样张全过,重构未破坏逻辑
This commit is contained in:
2026-06-13 11:15:20 +08:00
parent dbf857769e
commit 2a3cf2c66b
4 changed files with 157 additions and 107 deletions

View File

@ -22,19 +22,22 @@
<header>
<h1>剧情事件协作编辑器 <span class="ver">M5</span></h1>
<div class="toolbar">
<div class="mode-switch">
<button id="mode-review" class="mode-btn active">海选审核</button>
<button id="mode-perform" class="mode-btn">演出配置</button>
</div>
<div class="toolbar" id="review-toolbar">
<button id="btn-save" class="primary" disabled>保存</button>
<button id="btn-validate" disabled>校验</button>
<button id="btn-playtest" disabled>试走</button>
<button id="btn-timeline" disabled>演出预览</button>
<span class="sep"></span>
<button id="btn-confirm" disabled>确认</button>
<button id="btn-discard" disabled>丢弃</button>
<span class="sep"></span>
<button id="btn-import">导入 IR</button>
<button id="btn-export">导出 confirmed</button>
<span class="who" id="who"></span>
</div>
<span class="who" id="who"></span>
</header>
<div id="wrap">
@ -74,6 +77,17 @@
</section>
</div>
<!-- 演出配置页(仅已确认事件;当前=预览P2 起在此配置演出细节)-->
<div id="perform-wrap" class="hidden">
<aside id="perform-list-pane">
<div class="perform-listhead">已确认事件 · 演出配置</div>
<div id="perform-list"></div>
</aside>
<main id="perform-main">
<div id="perform-empty" class="empty-center">从左侧选择一个已确认事件,预览其演出(后续在此配置细节)</div>
</main>
</div>
<!-- 校验结果遮罩 -->
<div id="validate-modal" class="overlay hidden">
<div class="modal">
@ -116,23 +130,6 @@
</div>
</div>
<!-- 演出预览遮罩:上=俯视白模舞台,下=时间线+playhead -->
<div id="tl-modal" class="overlay hidden">
<div class="modal huge">
<h3>演出预览(白模)<span id="tl-mapinfo" class="tl-mapinfo"></span><button class="modal-close" style="float:right">关闭</button></h3>
<div id="tl-stagewrap">
<canvas id="tl-stage" width="780" height="380"></canvas>
</div>
<div id="tl-controls">
<button id="tl-play" class="primary">▶ 播放</button>
<button id="tl-restart" class="mini">⏮ 重头</button>
<span id="tl-time" class="tl-time">0.0 / 0.0s</span>
<span class="tip">点时间轴任意处跳转 · 战斗/选择/随机仅标点不模拟 · 预览沿首出口主路径</span>
</div>
<div id="tl-tracks"></div>
</div>
</div>
<script src="vendor/drawflow.min.js"></script>
<script src="graph.js"></script>
<script src="form.js"></script>