e2rcore/implement/ui/
ui_cam.rs

1extern crate mazth;
2
3use self::mazth::mat;
4
5use implement::cam::trackball::TrackBall;
6
7use interface::i_ui::{ InputFiltered, KeyCode, State, Coord };
8
9pub struct UiCam {
10    pub _trackball: TrackBall,
11    pub _mouse_r_down: bool,
12    pub _mouse_pos_down: (f32,f32),
13    pub _mouse_pos: (f32,f32),
14    pub _move: (isize, isize, isize),
15}
16
17impl Default for UiCam {
18    fn default() -> Self {
19        Self {
20            _trackball: Default::default(),
21            _mouse_r_down: false,
22            _mouse_pos_down: ( 0., 0.),
23            _mouse_pos: ( 0., 0. ),
24            _move: ( 0, 0, 0 ),
25        }
26    }
27}
28
29impl UiCam {
30    pub fn process( & mut self, i: & InputFiltered, win_offset: (i32,i32), win_size: (u32,u32) ) {
31        match i {
32            &InputFiltered::Button { key: KeyCode::MouseR, state: State::Press } => {
33                self._mouse_r_down = true;
34                self._mouse_pos_down = self._mouse_pos;
35                info!( "mouse r down" );
36            },
37            &InputFiltered::Button { key: KeyCode::MouseR, state: State::Release } => {
38                self._mouse_r_down = false;
39                self._mouse_pos_down = self._mouse_pos;
40                info!( "mouse r up" );
41            },
42            &InputFiltered::Button { key: KeyCode::W, state: State::Press } => {
43                self._move.0 += 1;
44                info!( "W pressed" );
45            },
46            &InputFiltered::Button { key: KeyCode::S, state: State::Press } => {
47                self._move.0 -= 1;
48                info!( "S pressed" );
49            },
50            &InputFiltered::Button { key: KeyCode::A, state: State::Press } => {
51                self._move.1 -= 1;
52                info!( "A pressed" );
53            },
54            &InputFiltered::Button { key: KeyCode::D, state: State::Press } => {
55                self._move.1 += 1;
56                info!( "D pressed" );
57            },
58            &InputFiltered::Button { key: KeyCode::Z, state: State::Press } => {
59                self._move.2 -= 1;
60                info!( "Z pressed" );
61            },
62            &InputFiltered::Button { key: KeyCode::X, state: State::Press } => {
63                self._move.2 += 1;
64                info!( "X pressed" );
65            },
66            &InputFiltered::MouseCoord( c, v) => {
67                match c {
68                    Coord::X => {
69
70                        let old_mouse_pos = mat::Mat2x1 { _val: [ self._mouse_pos.0,
71                                                                  self._mouse_pos.1
72                        ] };
73
74                        self._mouse_pos.0 = v;
75                        
76                        if self._mouse_r_down {
77
78                            let new_mouse_pos = mat::Mat2x1 { _val: [ self._mouse_pos.0,
79                                                                      self._mouse_pos.1
80                            ] };
81                            
82                            self._trackball.move_motion( & old_mouse_pos, & new_mouse_pos, win_size );
83                        }
84                    },
85                    Coord::Y => {
86
87                        let old_mouse_pos = mat::Mat2x1 { _val: [ self._mouse_pos.0,
88                                                                  self._mouse_pos.1
89                        ] };
90
91                        self._mouse_pos.1 = v;
92
93                        if self._mouse_r_down {
94
95                            let new_mouse_pos = mat::Mat2x1 { _val: [ self._mouse_pos.0,
96                                                                      self._mouse_pos.1
97                            ] };
98                            
99                            self._trackball.move_motion( & old_mouse_pos, & new_mouse_pos, win_size );
100                        }
101                    },
102                    _ => {}
103                }
104            },
105            &InputFiltered::MouseCoord2( x, y) => {
106
107                let old_mouse_pos = mat::Mat2x1 { _val: [ self._mouse_pos.0,
108                                                          self._mouse_pos.1
109                ] };
110
111                self._mouse_pos = (x,y);
112
113                if self._mouse_r_down {
114
115                    let new_mouse_pos = mat::Mat2x1 { _val: [ self._mouse_pos.0,
116                                                              self._mouse_pos.1
117                    ] };
118                    
119                    self._trackball.move_motion( & old_mouse_pos, & new_mouse_pos, win_size );
120                }
121            },
122            _ => {
123                // info!( "{:?}", _ );
124            },
125        }        
126    }
127}
128