d6cb9947b2
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>
34 lines
1.4 KiB
Rust
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);
|
|
}
|