4 static void freecam_preupdate(void){
5 camera
*cam
= &skaterift
.replay_freecam
;
7 v3_copy( cam
->angles
, angles
);
8 player_look( angles
, 1.0f
);
10 f32 decay
= vg_maxf(0.0f
,1.0f
-vg
.time_frame_delta
*10.0f
);
13 v3_sub( angles
, cam
->angles
, d
);
14 v3_muladds( skaterift
.freecam_w
, d
, 20.0f
, skaterift
.freecam_w
);
15 v3_muls( skaterift
.freecam_w
, decay
, skaterift
.freecam_w
);
16 v3_muladds( cam
->angles
, skaterift
.freecam_w
, vg
.time_frame_delta
,
18 cam
->angles
[1] = vg_clampf( cam
->angles
[1], -VG_PIf
*0.5f
,VG_PIf
*0.5f
);
20 camera_update_transform( cam
);
22 v3f lookdir
= { 0.0f
, 0.0f
, -1.0f
},
23 sidedir
= { 1.0f
, 0.0f
, 0.0f
};
25 m3x3_mulv( cam
->transform
, lookdir
, lookdir
);
26 m3x3_mulv( cam
->transform
, sidedir
, sidedir
);
29 joystick_state( k_srjoystick_steer
, input
);
30 v2_muls( input
, vg
.time_frame_delta
*6.0f
*20.0f
, input
);
32 v3_muladds( skaterift
.freecam_v
, lookdir
, -input
[1],
33 skaterift
.freecam_v
);
34 v3_muladds( skaterift
.freecam_v
, sidedir
, input
[0],
35 skaterift
.freecam_v
);
37 v3_muls( skaterift
.freecam_v
, decay
, skaterift
.freecam_v
);
39 skaterift
.freecam_v
, vg
.time_frame_delta
, cam
->pos
);
42 static int freecam_cmd( int argc
, const char *argv
[] ){
44 skaterift
.freecam
= atoi(argv
[0]);
46 if( skaterift
.freecam
){
47 camera_copy( &skaterift
.cam
, &skaterift
.replay_freecam
);