@@ -56,6 +56,7 @@ fn main() {
5656 let floor = floor ( ) ;
5757 let crates = crates ( ) ;
5858
59+ let mut target_vel_z = 0.0 ;
5960 let mut cam_vel = Vec3 :: zero ( ) ;
6061 let ( mut p, mut y, mut r) = ( degs ( 0.0 ) , degs ( 0.0 ) , degs ( 0.0 ) ) ;
6162 win. run ( |frame| {
@@ -74,8 +75,8 @@ fn main() {
7475 for key in ep. keyboard_state ( ) . pressed_scancodes ( ) {
7576 use sdl2:: keyboard:: Scancode as Sc ;
7677 match key {
77- Sc :: W => cam_vel [ 2 ] += 0.1 ,
78- Sc :: S => cam_vel [ 2 ] -= 0.05 ,
78+ Sc :: W => target_vel_z += 0.1 ,
79+ Sc :: S => target_vel_z -= 0.05 ,
7980 Sc :: A => tr = rv,
8081 Sc :: D => tr = -rv,
8182
@@ -88,13 +89,23 @@ fn main() {
8889 }
8990 }
9091
91- p = p. lerp ( & tp, dt) ;
92- y = y. lerp ( & ty, dt) ;
93- r = r. lerp ( & tr, dt) ;
92+ let ra = 4.0 ;
93+ p = p. lerp ( & tp, ra * dt) ;
94+ y = y. lerp ( & ty, ra * dt) ;
95+ r = r. lerp ( & tr, ra * dt) ;
96+
97+ let target_vel = cam
98+ . transform
99+ . view_to_world ( )
100+ . apply ( & ( target_vel_z * Vec3 :: Z ) ) ;
101+
102+ let acc = 8.0 ;
103+ cam_vel = cam_vel. lerp ( & target_vel, acc * dt) ;
94104
95105 cam. transform . rotate ( p, y, r) ;
96106
97- cam. transform . translate ( cam_vel * dt) ;
107+ cam. transform
108+ . translate_to ( cam. transform . pos + cam_vel * dt) ;
98109
99110 //
100111 // Render
0 commit comments