ready_paint/
lib.rs

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