1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
use super::*; mod console; mod fps_counter; use console::*; use fps_counter::*; struct Data { fps_counter: FpsCounter, console: Console, } impl Data { fn new(geng: &Rc<Geng>) -> Self { Self { fps_counter: FpsCounter::new(geng), console: Console::new(geng), } } fn before_draw(&mut self) { self.fps_counter.before_draw(); self.console.before_draw(); } fn ui(&mut self) -> impl ui::Widget + '_ { use ui::*; ui::column![ self.fps_counter.ui().align(vec2(0.0, 1.0)), self.console.ui(), ] } } pub struct DebugOverlay { ui_controller: ui::Controller, data: Data, state: Box<dyn State>, enabled: bool, } impl DebugOverlay { pub fn new(geng: &Rc<Geng>, state: impl State) -> Self { Self { ui_controller: ui::Controller::new(), data: Data::new(geng), state: Box::new(state), enabled: false, } } } impl State for DebugOverlay { fn update(&mut self, delta_time: f64) { if self.enabled { self.ui_controller.update(&mut self.data.ui(), delta_time); } self.state.update(delta_time); } fn draw(&mut self, framebuffer: &mut ugli::Framebuffer) { self.state.draw(framebuffer); if self.enabled { self.data.before_draw(); self.ui_controller.draw(&mut self.data.ui(), framebuffer); } } fn handle_event(&mut self, event: Event) { if let Event::KeyDown { key: Key::F3 } = event { self.enabled = !self.enabled; } if !self.enabled || !self .ui_controller .handle_event(&mut self.data.ui(), event.clone()) { self.state.handle_event(event); } } fn transition(&mut self) -> Option<Transition> { match self.state.transition() { Some(Transition::Pop) => Some(Transition::Pop), None => None, _ => unreachable!(), } } }