1use super::*;
2
3mod manager;
4
5pub use manager::*;
6
7pub enum Transition {
8 Pop,
9 Switch(Box<dyn State>),
10 Push(Box<dyn State>),
11}
12
13pub trait State: 'static {
14 #[allow(unused_variables)]
15 fn update(&mut self, delta_time: f64) {}
16 fn draw(&mut self, framebuffer: &mut ugli::Framebuffer);
17
18 #[allow(unused_variables)]
19 fn handle_event(&mut self, event: Event) {}
20
21 fn transition(&mut self) -> Option<Transition> {
22 None
23 }
24}
25
26pub struct EmptyState;
27
28impl State for EmptyState {
29 fn draw(&mut self, framebuffer: &mut ugli::Framebuffer) {
30 #![allow(unused_variables)]
31 }
32}
33
34impl<T: State + ?Sized> State for Box<T> {
35 fn update(&mut self, delta_time: f64) {
36 <T as State>::update(self, delta_time);
37 }
38 fn draw(&mut self, framebuffer: &mut ugli::Framebuffer) {
39 <T as State>::draw(self, framebuffer);
40 }
41 fn handle_event(&mut self, event: Event) {
42 <T as State>::handle_event(self, event);
43 }
44 fn transition(&mut self) -> Option<Transition> {
45 <T as State>::transition(self)
46 }
47}