summaryrefslogtreecommitdiffstats
path: root/src/ui/camera_info.rs
blob: 35cd54b924f27af9894db4fdf9ab93eff604d904 (plain) (blame)
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
use std::cell::RefCell;

use crate::{GameState, eguictx::EguiCtx, solar_system, ui};


#[derive(Default, Clone)]
pub struct CameraWindowState
{
    pub camera_scale: f32,
    pub camera_pos: Option<cgmath::Vector3<f64>>,
    pub camera_rot: Option<cgmath::Vector2<cgmath::Rad<f32>>>,
    pub target: Option<solar_system::BodyId>,
}

impl CameraWindowState
{
    pub fn render(
        ui_state: &mut ui::State,
        game_state: &RefCell<GameState>,
        eguictx: &EguiCtx)
    {
        if ui_state.current_system.is_none() {
            return;
        }

        let camera_state = &mut ui_state.camera_info;
        let game_state = game_state.borrow();

        let current_system = &game_state.solar_systems()[ui_state.current_system.unwrap()];

        egui::Window::new("Camera Info").show(eguictx.context(), |ui| {
            ui.vertical(|ui| {
                let selected_body_label = match camera_state.target {
                    Some(id) => current_system.bodies()[id].name(),
                    None => ""
                };

                ui.separator();

                egui::ComboBox::from_label("Camera Target")
                    .selected_text(selected_body_label)
                    .show_ui(ui, |ui| {

                    for (i, body) in current_system.bodies().iter().enumerate() {
                        ui.selectable_value(
                            &mut camera_state.target,
                            Some(i),
                            body.name());
                    }
                });

                ui.label(format!("Scale: {}", camera_state.camera_scale));
                match camera_state.camera_pos {
                    Some(pos) => { ui.label(format!("Pos x:{:^10} y:{:^10} z:{:^10}", 
                            pos.x,
                            pos.y,
                            pos.z
                            )); },
                    None => {}
                }
                match camera_state.camera_rot {
                    Some(rot) => {
                        ui.label(format!("pitch:{:^10} yaw:{:^10}", 
                            rot.y.0,
                            rot.x.0,
                            )); 
                    },
                    None => {}
                }

            });
        });
    }
}