X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=freecam.c;fp=freecam.c;h=2e79ff1fefed3e57175736f4c61aa7016cf66ad5;hb=2dbc6f4022802b89c934ba78e7085cc7ee81799b;hp=0000000000000000000000000000000000000000;hpb=47bdc07d1a3e268f7926b5849ea751b0ef63289b;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/freecam.c b/freecam.c new file mode 100644 index 0000000..2e79ff1 --- /dev/null +++ b/freecam.c @@ -0,0 +1,51 @@ +#include "skaterift.h" +#include "input.h" + +static void freecam_preupdate(void){ + camera *cam = &skaterift.replay_freecam; + v3f angles; + v3_copy( cam->angles, angles ); + player_look( angles, 1.0f ); + + f32 decay = vg_maxf(0.0f,1.0f-vg.time_frame_delta*10.0f); + + v3f d; + v3_sub( angles, cam->angles, d ); + v3_muladds( skaterift.freecam_w, d, 20.0f, skaterift.freecam_w ); + v3_muls( skaterift.freecam_w, decay, skaterift.freecam_w ); + v3_muladds( cam->angles, skaterift.freecam_w, vg.time_frame_delta, + cam->angles ); + cam->angles[1] = vg_clampf( cam->angles[1], -VG_PIf*0.5f,VG_PIf*0.5f); + + camera_update_transform( cam ); + + v3f lookdir = { 0.0f, 0.0f, -1.0f }, + sidedir = { 1.0f, 0.0f, 0.0f }; + + m3x3_mulv( cam->transform, lookdir, lookdir ); + m3x3_mulv( cam->transform, sidedir, sidedir ); + + v2f input; + joystick_state( k_srjoystick_steer, input ); + v2_muls( input, vg.time_frame_delta*6.0f*20.0f, input ); + + v3_muladds( skaterift.freecam_v, lookdir, -input[1], + skaterift.freecam_v ); + v3_muladds( skaterift.freecam_v, sidedir, input[0], + skaterift.freecam_v ); + + v3_muls( skaterift.freecam_v, decay, skaterift.freecam_v ); + v3_muladds( cam->pos, + skaterift.freecam_v, vg.time_frame_delta, cam->pos ); +} + +static int freecam_cmd( int argc, const char *argv[] ){ + if( argc ){ + skaterift.freecam = atoi(argv[0]); + + if( skaterift.freecam ){ + camera_copy( &skaterift.cam, &skaterift.replay_freecam ); + } + } + return 0; +}