summaryrefslogtreecommitdiff
path: root/src/gfx/debug_menu.rs
blob: daca08d3282be61a9526704d9e04eca1a8450967 (plain)
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
use super::{camera::Camera, font::Font};
use cgmath::{Deg, Rad};
use wgpu_glyph::{Section, Text};

pub struct DebugMenu {
    pub enabled: bool,
    pub fps: usize,
}

impl DebugMenu {
    pub fn new() -> Self {
        Self {
            enabled: false,
            fps: 0,
        }
    }

    pub fn render(&self, bounds: (f32, f32), camera: &Camera, font: &mut Font) {
        if !self.enabled {
            return;
        }

        let mut offset = 0.0;

        let mut add_text = |txt: &str| {
            offset += 2.0;

            font.add(Section {
                screen_position: (2.0, offset),
                bounds,
                text: vec![Text::new(txt)
                    .with_color([1.0, 1.0, 1.0, 1.0])
                    .with_scale(20.0)],
                ..Section::default()
            });

            offset += 20.0;
        };

        let angle = |x| Deg::from(Rad(x)).0;

        let pos = camera.first_person.position;

        add_text(&format!(
            "{} {}",
            env!("CARGO_PKG_NAME"),
            env!("CARGO_PKG_VERSION")
        ));
        add_text(&format!("{} FPS", self.fps));
        add_text(&format!("({:.1}, {:.1}, {:.1})", pos[0], pos[1], pos[2]));
        add_text(&format!(
            "yaw: {:.1}°",
            (angle(camera.first_person.yaw) + 360.0) % 360.0
        ));
        add_text(&format!("pitch: {:.1}°", angle(camera.first_person.pitch)));
    }
}