e2rcore/implement/ui/
ui_cam.rs1extern 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 },
125 }
126 }
127}
128