geng_core/state/
mod.rs

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}