-#ifndef PLAYER_COMMON_C
-#define PLAYER_COMMON_C
-
#include "ent_skateshop.h"
#include "player.h"
#include "input.h"
#include "menu.h"
#include "vg/vg_perlin.h"
-static float player_get_heading_yaw(void){
+float player_get_heading_yaw(void)
+{
v3f xz;
q_mulv( localplayer.rb.q, (v3f){ 0.0f,0.0f,1.0f }, xz );
return atan2f( xz[0], xz[2] );
}
-static void player_camera_portal_correction(void){
+static void player_camera_portal_correction(void)
+{
if( localplayer.gate_waiting ){
/* construct plane equation for reciever gate */
v4f plane;
localplayer.final_mtx );
/* record and re-put things again */
- if( cleared ){
- skaterift_record_frame( &skaterift.replay, 1 );
+ if( cleared )
+ {
+ skaterift_record_frame( &player_replay.local, 1 );
localplayer.deferred_frame_record = 1;
skeleton_apply_transform( &localplayer.skeleton,
}
}
-static void player__cam_iterate(void){
+void player__cam_iterate(void)
+{
struct player_cam_controller *cc = &localplayer.cam_control;
if( localplayer.subsystem == k_player_subsystem_walk ){
v3_copy( (v3f){-0.1f,1.8f,0.0f}, cc->fpv_viewpoint );
v3_copy( (v3f){0.0f,0.0f,0.0f}, cc->fpv_offset );
- v3_copy( (v3f){0.0f,1.4f,0.0f}, cc->tpv_offset );
+ v3_copy( (v3f){0.0f,1.8f,0.0f}, cc->tpv_offset );
+ }
+ else if( localplayer.subsystem == k_player_subsystem_glide ){
+ v3_copy( (v3f){-0.15f,1.75f,0.0f}, cc->fpv_viewpoint );
+ v3_copy( (v3f){0.0f,0.0f,0.0f}, cc->fpv_offset );
+ v3_copy( (v3f){0.0f,-1.0f,0.0f}, cc->tpv_offset );
+ v3_add( cc->tpv_offset_extra, cc->tpv_offset, cc->tpv_offset );
}
else{
v3_copy( (v3f){-0.15f,1.75f,0.0f}, cc->fpv_viewpoint );
/* lerping */
+ if( localplayer.cam_dist_smooth == 0.0f ){
+ localplayer.cam_dist_smooth = localplayer.cam_dist;
+ }
+ else {
+ localplayer.cam_dist_smooth = vg_lerpf(
+ localplayer.cam_dist_smooth,
+ localplayer.cam_dist,
+ vg.time_frame_delta * 8.0f );
+ }
+
localplayer.cam_velocity_influence_smooth = vg_lerpf(
localplayer.cam_velocity_influence_smooth,
localplayer.cam_velocity_influence,
inf_tpv = localplayer.cam_velocity_influence_smooth *
(1.0f-cc->camera_type_blend);
- camera_lerp_angles( localplayer.angles, velocity_angles,
+ vg_camera_lerp_angles( localplayer.angles, velocity_angles,
inf_fpv,
localplayer.angles );
float ya = atan2f( -cc->cam_velocity_smooth[1], 30.0f );
follow_angles[1] = 0.3f + ya;
- camera_lerp_angles( localplayer.angles, follow_angles,
+ vg_camera_lerp_angles( localplayer.angles, follow_angles,
inf_tpv,
localplayer.angles );
/* now move into world */
v3f tpv_pos, tpv_offset, tpv_origin;
+ /* TODO: whats up with CC and not CC but both sets of variables are doing
+ * the same ideas just saved in different places?
+ */
/* origin */
q_mulv( pq, cc->tpv_offset_smooth, tpv_origin );
v3_add( tpv_origin, cc->tpv_lpf, tpv_origin );
/* offset */
- v3_muls( camera_follow_dir, 1.8f, tpv_offset );
+ v3_muls( camera_follow_dir, localplayer.cam_dist_smooth, tpv_offset );
v3_muladds( tpv_offset, cc->cam_velocity_smooth, -0.025f, tpv_offset );
v3_add( tpv_origin, tpv_offset, tpv_pos );
+#if 0
+ if( localplayer.subsystem == k_player_subsystem_walk )
+ {
+ v3f fwd, right;
+ v3_angles_vector( localplayer.angles, fwd );
+ v3_cross( fwd, (v3f){0,1.001f,0}, right );
+ right[1] = 0.0f;
+ v3_normalize( right );
+ v3_muladds( tpv_pos, right, 0.5f, tpv_pos );
+ }
+#endif
+
/*
* Blend cameras
*/
localplayer.cam_trackshake +=
speed*k_cam_shake_trackspeed*vg.time_frame_delta;
- v2f rnd = {perlin1d( localplayer.cam_trackshake, 1.0f, 4, 20 ),
- perlin1d( localplayer.cam_trackshake, 1.0f, 4, 63 ) };
+ v2f rnd = {vg_perlin_fract_1d( localplayer.cam_trackshake, 1.0f, 4, 20 ),
+ vg_perlin_fract_1d( localplayer.cam_trackshake, 1.0f, 4, 63 ) };
v2_muladds( localplayer.cam.angles, rnd, strength, localplayer.cam.angles );
v3f Fd, Fs, F;
v3_add( localplayer.cam_land_punch, localplayer.cam.pos,
localplayer.cam.pos );
- if( k_cinema >= 0.0001f ){
- ent_camera *cam = NULL;
- f32 min_dist = k_cinema;
-
- world_instance *world = world_current_instance();
- for( u32 i=0; i<mdl_arrcount(&world->ent_camera); i++ ){
- ent_camera *c = mdl_arritm(&world->ent_camera,i);
-
- f32 dist = v3_dist( c->transform.co, localplayer.rb.co );
-
- if( dist < min_dist ){
- min_dist = dist;
- cam = c;
- }
- }
-
- if( cam ){
- localplayer.cam.fov = cam->fov;
- v3_copy( cam->transform.co, localplayer.cam.pos );
- v3f v0;
- if( k_cinema_fixed )
- mdl_transform_vector( &cam->transform, (v3f){0.0f,-1.0f,0.0f}, v0 );
- else
- v3_sub( localplayer.rb.co, cam->transform.co, v0 );
-
- v3_angles( v0, localplayer.cam.angles );
- }
- }
-
/* portal transitions */
player_camera_portal_correction();
}
-static void player_look( v3f angles, float speed ){
+void player_look( v3f angles, float speed )
+{
if( vg_ui.wants_mouse ) return;
angles[2] = 0.0f;
angles[1] += input_y * speed;
angles[1] = vg_clampf( angles[1], -VG_PIf*0.5f, VG_PIf*0.5f );
}
-
-#endif /* PLAYER_COMMON_C */