8.3 KiB
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 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, 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, RenderingCapabilities |
| Post FX + rendering profile assets | Done | assets/post_fx/, assets/rendering_profiles/ |
| Showcase level + docs | Done | rendering_showcase.scn.ron, 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 |
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 |
CI: shared hydration, scene migration + allowlist |
Done | See .github/workflows/ci.yml |
Documentation maintenance
When you ship editor behavior changes:
- Update this roadmap status table.
- Update architecture.md if subsystems or data flow change.
- Update root README controls and editor README module index.