-#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 );
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 );
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
*/
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 */