scense_demo/README.md
2026-08-29 21:10:23 +08:00

48 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# demo —— W-07 实时演示模块
## 用途
在元景scense平台中为世界world提供「实时演示」能力编辑器点击「演示」进入预览态
可在演示中实时编辑实体(前端 <1s 反映)、保存脚本即热加载切换视角/暂停继续/全屏
多人同时预览演示期间的任何改动只落在演示覆盖层结束演示后**正式数据不变**状态隔离)。
## 功能点W-07a ~ W-07j
| 编号 | 功能 | 接口 |
|------|------|------|
| W-07a | 开始演示进入预览态 | POST /demo/api/start.dspy |
| W-07b | 结束演示清理覆盖层 | POST /demo/api/stop.dspy |
| W-07c | 编辑实体实时反映(<1s) | POST /demo/api/entity_edit.dspy |
| W-07d | 脚本保存热加载 | POST /demo/api/hotload.dspy |
| W-07e | 视角切换 | POST /demo/api/camera.dspy |
| W-07f | 暂停/继续 | POST /demo/api/pause.dspy |
| W-07g | 全屏 | POST /demo/api/fullscreen.dspy |
| W-07h | 状态隔离演示改动不污染正式数据 | 覆盖层表 + stop 清理 |
| W-07i | 查看实体属性 | POST /demo/api/entity_attrs.dspy |
| W-07j | 多人预览 | POST /demo/api/presence.dspy |
| - | 状态轮询500ms<1s 反映 | POST /demo/api/state.dspy |
## 数据表models/*.json
- `demo_session`演示会话status=preview/paused/endedcamera_modeviewer_countextra_json
- `demo_session_state`实体状态覆盖层base_json=基线快照demo_json=演示中当前值)
- `demo_hot_script`演示中热加载脚本
- `demo_presence`多人预览在线表
## 状态隔离原理
演示开始把实体当前状态复制为 `base_json`只读基线演示中编辑只写 `demo_session_state.demo_json`
**从不写正式 entity/scene/world 表**`stop_demo` 删除会话+覆盖层+脚本+在线表 —— 正式数据零污染
## 前端
- `wwwroot/demo_viewer.ui` + `demo_viewer.js`three.js 渲染世界 + 500ms 轮询 state.dspy
- `wwwroot/index.ui`模块入口卡片
## 安装 / 集成Sage 宿主)
1. `pip install .`模块包
2. `app/sage.py``from demo.init import load_demo` + `load_demo()` init()
3. `build.sh`安装循环加入 demo`ln -sf <module>/wwwroot <sage>/wwwroot/demo`
4. `scripts/load_path.py`注册 RBAClogined中央 load_path.py 同步登记
5. `global_menu.ui``{"name":"demo","label":"实时演示","url":"{{entire_url('/demo/index.ui')}}","target":"app.sage_main_content"}`
6. 部署库名由宿主 `get_module_dbname('demo')` 决定模块内禁止硬编码 DBNAME
## 验收口径
- 启动/结束演示接口 200演示中编辑实体前端 <1s 反映500ms 轮询退出后正式 entity/world 数据不变
- 每个功能点正例 + 反例自测 skill/SKILL.md docs/