1pub mod gfx;
2pub mod multi;
3pub mod scene;
4pub mod time;
5use crate::gfx::Gfx;
6use crate::scene::{Queue, Scene};
7
8#[derive(Default)]
9pub enum RenderEntry {
10 #[default]
11 NotReady,
12 Ready(Gfx),
13}
14
15#[derive(Default)]
16pub struct Render {
17 pub entry: RenderEntry,
18 pub scenes: Vec<Scene>,
19}
20
21impl Render {
22 pub fn new() -> Self {
23 Render {
24 entry: RenderEntry::NotReady,
25 scenes: Vec::new(),
26 }
27 }
28
29 pub fn ready(&mut self) {
30 println!("Render::ready");
31 match &self.entry {
32 RenderEntry::Ready(ref gfx) => {
33 for scene in self.scenes.iter_mut() {
34 scene.ready(gfx);
35 }
36 }
37 _ => panic!("Render::get_gfx called before gfx is ready"),
38 }
39 }
40
41 pub fn paint(&mut self) {
42 match &self.entry {
43 RenderEntry::Ready(ref gfx) => {
44 for scene in self.scenes.iter_mut() {
45 scene.paint(gfx);
46 }
47 }
48 _ => panic!("Render::get_gfx called before gfx is ready"),
49 }
50 }
51
52 pub fn add_scene<T: Queue>(&mut self, name: impl Into<String> + Clone) -> &mut Self {
53 println!("add_scene: {}", name.clone().into());
54 let mut s = Scene::new(name.into());
55 T::introduce(&mut s);
56 self.scenes.push(s);
57 self
58 }
59}