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

2.7 KiB
Raw Permalink Blame History

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.jsthree.js 渲染世界 + 500ms 轮询 state.dspy
  • wwwroot/index.ui:模块入口卡片

安装 / 集成Sage 宿主)

  1. pip install .(模块包)
  2. app/sage.pyfrom demo.init import load_demo + load_demo() 于 init()
  3. build.sh:安装循环加入 demoln -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/