Files
Oxide/engine/src/asset/mod.rs
T
Homer d6cb9947b2 Asset database file ops + script-file creation helpers
Groundwork for the Stage-10 editor-UX batch (file explorer, New Script
button), all pure logic proven by unit tests:

- `AssetDatabase::move_asset` / `move_folder` / `delete_asset`: perform
  the disk operation and the uid-map update together, so renaming or
  moving an asset (or a whole folder) keeps its uid and every saved
  `AssetRef` resolving. Kinds re-classify from the new path; `..` and
  existing destinations are refused via the new `AssetDbError` enum;
  deleted uids are never reused.
- Editor `assets.rs`: `script_template` (compiles under the sandboxed
  ScriptEngine — covered by a test), `sanitize_script_stem`, and
  `create_script_file` which writes a collision-free
  `assets/scripts/<stem>.rhai` and returns the relative path for
  database registration.
- docs/assets.md: new "File operations" section + the missing Script
  row in the typed-folder table.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 20:29:08 +02:00

34 lines
1.4 KiB
Rust

//! Asset loading and management.
//!
//! Stage 4 introduced the first importer: a static-mesh [`glTF`](gltf) loader
//! that turns a `.gltf`/`.glb` file into engine [`Mesh`](crate::render::Mesh)es,
//! [`Material`](crate::render::Material)s, and placement [`Transform`](crate::math::Transform)s.
//!
//! Stage 5 adds the [`AssetServer`]: a central registry that loads assets through
//! pluggable [`AssetLoader`]s, deduplicates by path+type, and hands out
//! reference-counted [`Handle`]s (an asset lives as long as a handle to it does).
//! It supports synchronous and background loading and in-place [reload](AssetServer::reload),
//! the foundation later stages build live reload, streaming, and export packing
//! on. The standalone [`load_gltf`] importer stays available; the server reaches
//! it through the built-in [`GltfLoader`].
mod database;
mod gltf;
mod handle;
mod server;
pub use database::{
asset_ref_target, AssetDatabase, AssetDbError, AssetEntry, AssetKind, AssetRef, AssetUid,
ASSET_MANIFEST_FILE,
};
pub use gltf::{load_gltf, load_gltf_slice, GltfError, GltfLoader, GltfMesh, GltfModel};
pub use handle::{AssetId, Handle, LoadState};
pub use server::{AssetError, AssetLoader, AssetServer};
/// Registers the engine's built-in asset loaders on `server`. Called by
/// [`AssetServer::new`].
pub(crate) fn register_default_loaders(server: &AssetServer) {
server.register_loader(GltfLoader);
server.register_loader(crate::ui::FontLoader);
}