# Editor Framework Roadmap Phased work for the in-process editor (`crates/editor`). Status reflects the current codebase; update this file when closing a phase. ## Production editor program (complete — P5 partial) **Goal:** Zero-debt authoring loop — hydration modules, mandatory `ActorKind`, actor inspector only, schema v2 migrations. See [ADR 0009–0012](../adr/0009-authoring-vs-hydrated.md) and `.cursor/plans/editor_rendering_and_ux_*.plan.md`. | Phase | Status | Notes | |-------|--------|-------| | P0 Hydration + lighting | **Done** | `shared/hydration/*`, strip-on-save, schema v2 migrate, live ambient/sun, Rendering Diagnostics | | P1 Actor model | **Done** | `ActorKind`, `validate_actor`, history snapshots, ADRs 0009–0012 | | P2 Actor inspector | **Done** | `ui/actor_inspector/`; removed `DefaultInspectorConfigPlugin` + ECS dump on Inspector tab | | P3 Hierarchy tree + sibling order | **Done** | `HierarchySiblingIndex`, tree outliner, DnD reorder, visibility/lock | | P4 Viewport modes | **Done** | Lit / Unlit / Collider toolbar, light gizmo overlays, Tab pick cycle | | P5 Assets + prefabs | **Partial** | `MaterialAsset`, `assets/thumbnails/sources/`; prefab overrides v1; delete legacy `fbx_preview` when cache fully unified | | P6 Extensibility + CI | **Done** | `ActorInspectorSection`, palette commands, BRP policy, hydration/scene CI | | P7 Docs + debt audit | **Done** | ADRs 0009–0012, [debt-audit.md](debt-audit.md), CI matrix | ## M1.5 — Foundations **Goal:** Shared project settings, WYSIWYG rendering profile, and PIE possess/eject. | Item | Status | Notes | |------|--------|-------| | `settings` crate + `assets/project.ron` | Done | Serde types, `ProjectSettingsPlugin`, `SimTuning` | | Project Settings panel (`settings_ui.rs`) | Done | Edit → Project Settings; draft buffer + **Apply** / Save / Revert | | Shared camera FX (`ProjectRenderCamera`) | Done | Unified viewport target + editor/player cameras | | PIE possess/eject (F8) | Done | `SimEnabled` while playing; input only when possessed | | Player-only PIE snapshot | Done | Scene edits retained on stop; not full-scene rollback | | Split UI vs data | Done | Panel open state in editor; paths/dirty in `ProjectSettingsIo` | ## Phase 1 — Project workspace **Goal:** Treat the repo as a project root with user vs project prefs. | Item | Status | Notes | |------|--------|-------| | `ProjectWorkspace` resource | Done | Root, settings path, dirty flags | | User prefs (`~/.config/bevy-fps/editor_prefs.ron`) | Done | Recent levels, load on startup | | Window title from project + scene | Done | `project_io::window_title` | | New/Open project menu | Done | File → Project; distinct from level New/Open | | Dock layout persistence | Done | RON in `editor_prefs.ron`; View → Reset Layout | ## Phase 2 — Viewport excellence **Goal:** Viewport parity with DCC-style navigation aids. | Item | Status | Notes | |------|--------|-------| | `viewport.rs` module | Done | Physical viewport, ground raycast, snap | | Grid overlay (Ctrl+G) | Done | Tied to snap increment | | Focus selection (F) | Done | Frames editor camera on selection | | Camera bookmarks | Done | Ctrl+Shift+1/2 + viewport buttons | | Scene visualizers | Done | Colliders, lights, spawns, prefab/model anchors, Project Sun, runtime player/camera markers | | Viewport Lit / Unlit / Collider modes | Done | `EditorViewportMode` + toolbar; unlit material override | | Clean game-view overlay | Done | `G` hides editor chrome, grid, visualizers, proxies, gizmos, and selection outlines | | Tab cycle overlapping picks | Done | `ViewportPickStack` + Tab in viewport | | Multi-viewport | Scaffolded | Primary viewport state is separated from render ownership; secondary viewports remain future work | ## Phase 2b — Advanced rendering **Goal:** Tiered GI + local post-process volumes with full editor workflow. | Item | Status | Notes | |------|--------|-------| | ADR 0013 + `GiMode` / volume schema | Done | `settings`, `shared`, `game_hot` resolver | | Post-process volume authoring + undo | Done | `SetPostProcessVolume`, catalog spawn, scene save | | Rendering panel (Active / Project / Volumes) | Done | Replaces Diagnostics-only view | | Volume inspector inherit/override | Done | `post_process_volume_ui.rs` | | Viewport GI badge + volume HUD + gizmos | Done | `viewport_chrome`, `visualizers` | | Solari + Forward fallback | Done | `bevy_solari`, RT fallback, point/spot LightDesc disabled while Solari is active | | Post FX + rendering profile assets | Done | `assets/post_fx/`, `assets/rendering_profiles/` | | Showcase level + docs | Done | `rendering_showcase.scn.ron`, [rendering.md](rendering.md) | ## Phase 3 — PIE polish **Goal:** Predictable play sessions while editing. | Item | Status | Notes | |------|--------|-------| | Unified render-to-texture viewport | Done | Avoids HDR/atmosphere breakage; player/editor cameras share one target | | Game input focus gating | Done | `GameInputFocused` while Play-possessed | | Gameplay hot reload (`game_hot` dylib) | Done | `--features dev`; see [ADR 0004](../adr/0004-editor-hot-reload.md) | ## Phase 4 — Inspector & history **Goal:** Authoring ergonomics at component granularity. | Item | Status | Notes | |------|--------|-------| | Hierarchy search filter | Done | Filter box in Hierarchy tab | | Multi-select | Done | Hierarchy + viewport additive; multi-entity gizmo delta | | Per-field undo | Partial | Typed inspectors + material/light/rigid-body/collider/primitive/static-mesh | | Add/remove components | Done | Registry-driven Inspector Add Component footer | ## Phase 4b — Editor chrome (follow-up) **Goal:** DCC-style hierarchy/inspector/asset browser depth (after shell polish). | Item | Status | Notes | |------|--------|-------| | Dark pro theme + Phosphor icons | Done | `ui/theme.rs`, `ui/fonts.rs`, high-contrast selection states, overlay toolbars | | Fixed status bar | Done | Replaces Status dock tab | | Viewport overlay toolbar | Done | Gizmo/grid/focus/options/game-view toggle (play moved to main toolbar) | | Main toolbar transport | Done | Centered Play/Pause/Stop/Eject; taller bar (~52px) | | Pause in PIE | Done | `PlayPaused` freezes sim while staying in Play (`F6`) | | Dock layout persistence | Done | `ui/layout.rs` + `UserPreferences.dock_layout` | | Hierarchy tree + type icons | Partial | Authored + generated/runtime rows with icons; expand/collapse state still future | | Actor inspector (authoring-only) | Done | Transform + `LightDesc`/`MaterialDesc`/…; no bevy_inspector dump | | Inspector component headers | Done | Header + Transform + component cards + Add Component footer | | Asset browser project/file views | Done | Folder tree, breadcrumb, search/filter/sort, grid/list, details pane, texture + model thumbnails | ## Phase 5 — Asset pipeline **Goal:** Stable asset IDs and import metadata (aligns M5). | Item | Status | Notes | |------|--------|-------| | `asset_db.rs` registry | Done | Stable UUIDs by path; import settings in details | | Model import formats | Done | glTF/GLB + FBX (binary); `.fbm` sidecar copy on import | | Thumbnails | Done | Textures via asset load; glTF albedo fast-path; FBX/untextured models via offscreen studio | | Import settings per asset | Done | Scale/collider/LOD in registry + details pane | | Prefab workflow | Partial | `PrefabInstance`, save-as-prefab, unpack; **Revert Transform** v1 in inspector; full override apply/revert future | ## Phase 6 — Extensibility **Goal:** Third-party and game-specific panels without editing core UI. | Item | Status | Notes | |------|--------|-------| | `ActorInspectorSection` registry | Done | `ext/extensibility.rs` + `game_inspector.rs` | | Command registry | Done | Play, lighting reset, group, focus | | Command palette (Ctrl+P) | Done | Executes registered commands | | `EditorPlugin` trait | Done | `register_editor_plugin`; dogfood panel from `game::editor_ext` | | Undo: `SetActorKind`, add/remove component | Done | `SetActorKind` + `AddComponent` / `RemoveComponent` | | BRP authoring-only policy | Done | [brp.md](brp.md) | | CI: `shared` hydration, `scene` migration + allowlist | Done | See `.github/workflows/ci.yml` | ## Documentation maintenance When you ship editor behavior changes: 1. Update this roadmap status table. 2. Update [architecture.md](architecture.md) if subsystems or data flow change. 3. Update root [README](../../README.md) controls and [editor README](README.md) module index.