Files
Oxide/docs
Homer c47efa876f Editor: Unity-style file explorer in the Project panel
The last item of the Stage-10 editor-UX batch. The Project panel's
fixed typed-folder listing becomes a real file explorer over assets/:

- breadcrumbs + double-click folder navigation, " New Folder", inline
  rename rows, context menus (Open / Rename / Delete), drag a row onto
  a folder (or "..") to move it, drag files in from the OS to import
  into the current folder, double-click to open (scripts via the
  external-editor flow, others via xdg-open).
- All behavior lives egui-free in editor/src/explorer.rs (listing,
  breadcrumbs, name validation/uniquing, create/rename/move/delete/
  import) and is unit-tested; the shell only renders it. Renames and
  moves ride the uid-preserving AssetDatabase ops so saved AssetRefs
  keep resolving; unregistered files fall back to fs::rename. Folders
  delete only when empty — no recursive asset deletion.
- Engine: AssetDatabase::scan now walks the WHOLE assets/ tree instead
  of just the typed folders, so assets organised into custom folders
  register and survive rescans (covered by updated unit tests).

File operations act immediately and bypass the undo stack, like the
hierarchy's structural edits. GUI piece — needs an eye-check before
promotion to main.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 21:01:05 +02:00
..

Oxide Engine Documentation

This directory is the canonical, in-depth documentation for the Oxide engine. The top-level README.md is a short overview; everything detailed — usage guides, API references, and explanations of how the engine works internally — lives here and grows with the engine at every stage.

How this documentation is organized

Document What it covers
getting-started.md Installing the toolchain, building, running examples, running tests and benchmarks
architecture.md Workspace layout, crate responsibilities, design philosophy, staged development model
conventions.md Coordinate system, handedness, units, color space, and other cross-cutting conventions
development.md Branch workflow (dev/main), testing protocol, documentation policy, how to add a stage
math.md Full reference for the oxide_engine::math module (Stage 1)
windowing.md Window creation, the App trait and event loop, raw input events (Stage 2)
render-context.md GPU acquisition, surface configuration, the clear-color frame loop (Stage 2)
scene.md Scene graph, entities, the transform hierarchy, and serialization (Stage 3)
rendering.md Meshes, materials, camera, and the forward renderer (Stage 4)
layers.md Layers, groups & tags: single-valued Layer + multi-valued Tags/GroupRegistry, the shared LayerMask filter primitive (Stage 5)
reflection.md Reflection / type registry: generic name-keyed component access for dual-editability (Stage 5)
prefabs.md Prefabs: data-driven named spawn templates (component specs applied via the registry) (Stage 8.5)
assets.md Asset server & handles: ref-counted loading, dedup, loaders, background load, reload (Stage 5)
modules.md App, modules & scheduling: composing the engine, system phases, fixed timestep, enable/disable/remove (Stage 5)
render-pipeline.md Data-driven render pass pipeline: composable passes, scalable fidelity, camera layer visibility (Stage 5)
projects.md Project system: project file, folder layout, create/open/save, recent projects (Stage 6)
settings.md Settings & preferences framework: typed sections, export/import, per-module/per-project settings (Stage 6)
file-watching.md File-watcher foundation: debounced/deduplicated change events; asset live-reload wiring (Stage 6)
editor-extensions.md Module → editor extension API: how a module contributes menus, panels, tools, inspectors, settings pages (Stage 6)
editor-shell.md Editor docking shell: menu bar, dockable panels, status bar, Preferences window, command stack + file watcher wiring (Stage 6)
input.md Input system: per-frame InputState with edge detection, named action mapping (ActionMap/Binding) with defaults + remapping + RON persistence, 1D/2D directional axes (Stage 7)
ui.md In-game UI: widget tree, layout (stack/grid/anchor), DPI-aware sizing, per-widget visual styles + named-style themes, RON dual-edit, ab_glyph-backed text shaping + R8 glyph atlas, screen-space + world-space UiOverlayPass, hit-test + hover/focus/press Router, immediate-mode event queries + typed WidgetValues (Stage 8 — pieces 16, GUI tail coming)
play-mode.md Editor play mode: PlayState, registry-aware SceneSnapshot snapshot/restore, the tick_for decision + App::step, the scene-swap runner, toolbar/shortcuts/viewport tint (Stage 8.7)
physics.md Physics module (oxide-physics, rapier3d): RigidBody/Collider components, LayerMask-filtered collision, the ECS-as-source-of-truth model, module wiring (Stage 9)
scripting.md Scripting module (oxide-script, rhai): the Script component, ScriptAsset + .rhai loader, the sandboxed ScriptEngine wrapper, module wiring; ECS-as-source-of-truth + live-reload model (Stage 10)

Documentation status by stage

Documentation is written alongside the code. A stage is not considered done until its docs exist here.

Stage Subject Docs
0 Project foundation architecture.md, getting-started.md
1 Math & core primitives math.md
2 Window & render context windowing.md, render-context.md
3 Scene graph & entity system scene.md
4 Basic 3D rendering rendering.md
5 Engine core framework modules.md, layers.md, reflection.md, assets.md, render-pipeline.md
6 Editor framework & project system projects.md, settings.md, file-watching.md, editor-extensions.md, editor-shell.md
7 Input system input.md
8 Comprehensive UI system (in progress) ui.md
8.7 Editor play mode play-mode.md
9 Physics integration (in progress) physics.md
10 Scripting, live reload & editor terminal (in progress) scripting.md
11+ added as each stage lands

Conventions for these files

  • One topic per file; keep files focused and link between them rather than duplicating content.
  • Every public type or system gets: a one-line summary, when to use it, and at least one runnable code snippet.
  • Code snippets are written so they would compile against the current API. When the API changes, update the snippet in the same change.
  • Prefer explaining the why (design intent, trade-offs) over restating the what (which the rustdoc comments already cover).