147 lines
8.3 KiB
Markdown
147 lines
8.3 KiB
Markdown
# 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.
|