1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//! WasserXR is the foundational ECS runtime for the WasserXR engine.
//!
//! WasserXR is built for dynamic, modular applications where components,
//! systems, and asset types can live in reloadable plugins. The main runtime
//! object is [`scene::Scene`]. A scene owns entities, components, systems,
//! assets, resources, and loaded plugins, and `Scene::tick` runs the active
//! systems.
//!
//! The full engine is usually split into two parts:
//!
//! - **WasserXR**: this crate, the foundational ECS and plugin runtime.
//! - **WasserXR-Core**: the standard set of engine components, systems, and
//! asset types.
//!
//! A minimal application usually creates a scene, loads the core plugin, adds a
//! system, and ticks the scene:
//!
//! ```ignore
//! use wasserxr::scene::{logging::file_logger, Scene};
//!
//! fn main() {
//! let mut scene = Scene::new();
//! scene.register_callback_logger(file_logger);
//!
//! scene
//! .load_plugin("./libwasserxr_core.so".to_owned())
//! .expect("Failed to load core plugin");
//!
//! scene
//! .add_system("console".to_owned(), 100)
//! .expect("Failed to add system `console`");
//!
//! while scene.tick() {}
//! let _ = scene.reset();
//! }
//! ```
//!
//! This crate also re-exports the procedural macros used by Rust plugins, such
//! as [`component`], [`component_creator`], [`system`], [`attacher`],
//! [`detacher`], [`asset_type`], and [`asset_type_creator`].
//!
//! For tutorials and getting-started guides, see <https://wasserxr.com>.
extern crate self as wasserxr;
/// Small utility modules used by the runtime and applications.
pub use Uuid;
pub use ;