ready_paint/
lib.rs

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}