trail rendering basics
[carveJwlIkooP6JGAAIwe30JlM.git] / freecam.c
1 #include "skaterift.h"
2 #include "input.h"
3
4 static void freecam_preupdate(void){
5 camera *cam = &skaterift.replay_freecam;
6 v3f angles;
7 v3_copy( cam->angles, angles );
8 player_look( angles, 1.0f );
9
10 f32 decay = vg_maxf(0.0f,1.0f-vg.time_frame_delta*10.0f);
11
12 v3f d;
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,
17 cam->angles );
18 cam->angles[1] = vg_clampf( cam->angles[1], -VG_PIf*0.5f,VG_PIf*0.5f);
19
20 camera_update_transform( cam );
21
22 v3f lookdir = { 0.0f, 0.0f, -1.0f },
23 sidedir = { 1.0f, 0.0f, 0.0f };
24
25 m3x3_mulv( cam->transform, lookdir, lookdir );
26 m3x3_mulv( cam->transform, sidedir, sidedir );
27
28 v2f input;
29 joystick_state( k_srjoystick_steer, input );
30 v2_muls( input, vg.time_frame_delta*6.0f*20.0f, input );
31
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 );
36
37 v3_muls( skaterift.freecam_v, decay, skaterift.freecam_v );
38 v3_muladds( cam->pos,
39 skaterift.freecam_v, vg.time_frame_delta, cam->pos );
40 }
41
42 static int freecam_cmd( int argc, const char *argv[] ){
43 if( argc ){
44 skaterift.freecam = atoi(argv[0]);
45
46 if( skaterift.freecam ){
47 camera_copy( &skaterift.cam, &skaterift.replay_freecam );
48 }
49 }
50 return 0;
51 }