Skip to main content

buttery_engine/
renderer.rs

1use std::any::Any;
2
3use crate::{ui::ButteryUIModel, world_model::ButteryWorldModel};
4
5pub trait ButteryRenderer: Send + Sync + Any {
6    fn load_model(&mut self, path: &str);
7
8    fn on_update(&mut self, world_model: &ButteryWorldModel);
9
10    fn render(&mut self);
11
12    fn resize(&mut self, width: u32, height: u32);
13
14    fn update_ui_model(&mut self, ui_model: Option<ButteryUIModel>);
15
16    fn as_any(&self) -> &dyn Any;
17
18    fn as_any_mut(&mut self) -> &mut dyn Any;
19}
20
21pub struct FallbackRenderer {}
22
23impl ButteryRenderer for FallbackRenderer {
24    fn load_model(&mut self, _path: &str) {}
25
26    fn on_update(&mut self, _world_model: &ButteryWorldModel) {}
27
28    fn render(&mut self) {}
29
30    fn resize(&mut self, _width: u32, _height: u32) {}
31
32    fn update_ui_model(&mut self, _ui_model: Option<ButteryUIModel>) {}
33
34    fn as_any(&self) -> &dyn Any {
35        self
36    }
37
38    fn as_any_mut(&mut self) -> &mut dyn Any {
39        self
40    }
41}