Appearance
EnvState 单一源 Schema
系统概览
EnvState 全部字段的类型 + 默认值 + dispatch 分组单一来源。新增字段只需在此追加一处(type + default + group),types.ts / state.ts 自动派生,各子系统通过 getEnvKeys(group) 自动获取 key 列表,无需再手工维护 _SKY_KEYS / _GROUND_KEYS / _WATER_KEYS 等数组。
核心职责
- 每字段定义为
_FieldDef,按sky / ground / wind / particle / water / water-shader / underwater / clouds / mirror / fog / collision / lighting分组 group决定字段变化时触发哪些子系统回调;未指定则不触发enum类型附带values白名单(如skyMode: color|texture|procedural、groundType: flat|terrain)tuple3类型用于颜色/向量(写入需整体替换,经 Proxy 约定)
对外 API(节选)
ENV_STATE_SCHEMA— 字段名 →{ type, default, group?, values? }的完整映射getEnvKeys(group)— 取某 dispatch 分组下的全部字段 key(供 env-bridge 派发变更)buildDefaultEnvState()(在 state.ts 引用 schema.default 构造初始 state)
关键约定
envBrightness(ADR-132)作为天空/IBL/云/主光/环境光的全局明暗统一标量- 数组/tuple3 写入必须整体替换,不依赖内部索引赋值触发刷新(见
reactivity.tsProxy 约定)
UI 入口
- 无独立面板:经各环境菜单(env 菜单、场景菜单)间接读写,字段级 UI 见 menu-map.md。
与其他子系统关系
state.ts的buildDefaultEnvState()从本 schema.default 构造初始 EnvStatescene/env/各子系统按 group 订阅变更,实现「单一源 → 多子系统自动分发」