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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//! Scene management for Hoplite.
//!
//! This module provides a scene-based architecture for organizing independent
//! rendering contexts, each with its own camera, render graph, and state.
//!
//! # Overview
//!
//! Scenes are self-contained units of game content. Each scene can have:
//! - Its own camera (position, orientation, FOV)
//! - Its own render pipeline (different post-processing effects)
//! - Its own frame logic (update closure)
//! - Optional lifecycle hooks (`on_enter`, `on_exit`)
//!
//! # Example
//!
//! ```ignore
//! use hoplite::*;
//!
//! fn main() {
//! run_with_scenes(|ctx| {
//! ctx.default_font(16.0);
//! let cube = ctx.mesh_cube();
//!
//! // External ship view
//! ctx.scene("external", |scene| {
//! scene.hot_effect_world("shaders/space.wgsl");
//! scene.enable_mesh_rendering();
//!
//! let mut orbit = OrbitCamera::new();
//!
//! move |frame| {
//! orbit.update(frame.input, frame.dt);
//! frame.set_camera(orbit.camera());
//! frame.mesh(cube).draw();
//!
//! if frame.input.key_pressed(KeyCode::Enter) {
//! frame.switch_to("cockpit");
//! }
//! }
//! });
//!
//! // Cockpit view
//! ctx.scene("cockpit", |scene| {
//! scene.background_color(Color::BLACK);
//! scene.enable_mesh_rendering();
//!
//! let mut freelook = FreelookCamera::new();
//!
//! move |frame| {
//! freelook.update(frame.input, frame.dt);
//! frame.set_camera(freelook.camera());
//!
//! if frame.input.key_pressed(KeyCode::Escape) {
//! frame.switch_to_with("external", Transition::fade_to_black(0.5));
//! }
//! }
//! });
//!
//! ctx.start_scene("external");
//! });
//! }
//! ```
pub use SceneManager;
pub use ;
pub use SceneSetupContext;
pub use ;
pub use TransitionPass;