X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=34ed46944337270ec1f571bac991ee02a9d37222;hb=cb16ccb05a796178c879ea8d5091663d215a5217;hp=6c819801b01f664310d73f91144bc1be1911ab92;hpb=dfee9022b3513fddec36f7ea70867ee5961a44da;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index 6c81980..34ed469 100644 --- a/player.h +++ b/player.h @@ -1,6 +1,7 @@ #ifndef PLAYER_H #define PLAYER_H +#include "audio.h" #include "common.h" #include "character.h" #include "bvh.h" @@ -63,8 +64,7 @@ static void player_transform_update(void) static int reset_player( int argc, char const *argv[] ) { - v3_copy( (v3f){ 0.0f, -2.0f, 0.0f }, player.co ); - + v3_copy( world.tutorial, player.co ); if( argc == 1 ) { if( !strcmp( argv[0], "tutorial" )) @@ -1626,12 +1626,17 @@ static void player_animate(void) character_final_pose( &player.mdl, (v3f){0.0f,0.0f,0.0f}, &pose_fly, amt_air ); + + static float fupper = 0.0f; + fupper = vg_lerpf( fupper, -vg_get_axis("horizontal")*0.2f, 0.1f ); + character_yaw_upper( &player.mdl, fupper ); /* Camera position */ v3_lerp( player.smooth_localcam, player.mdl.cam_pos, 0.08f, player.smooth_localcam ); v3_muladds( player.smooth_localcam, offset, 0.7f, player.camera_pos ); player.camera_pos[1] = vg_clampf( player.camera_pos[1], 0.3f, kheight ); + m4x3_mulv( player.to_world, player.camera_pos, player.camera_pos ); player.air_blend = vg_lerpf( player.air_blend, player.in_air, 0.04f ); @@ -2008,6 +2013,51 @@ static void player_do_collision( rigidbody *rb ) } } +static void player_audio(void) +{ + float speed = vg_minf(v3_length( player.v )*0.1f,1.0f), + attn = v3_dist( player.co, player.camera[3] )+1.0f; + attn = (1.0f/(attn*attn)) * speed; + + static float air = 0.0f; + air = vg_lerpf(air, player.in_air? 1.0f: 0.0f, 0.7f); + + v3f ears = { 1.0f,0.0f,0.0f }; + v3f delta; + + v3_sub( player.co, player.camera[3], delta ); + v3_normalize( delta ); + m3x3_mulv( player.camera, ears, ears ); + + float pan = v3_dot( ears, delta ); + audio_player0.pan = pan; + audio_player1.pan = pan; + audio_player2.pan = pan; + + if( freecam ) + { + audio_player0.vol = 0.0f; + audio_player1.vol = 0.0f; + audio_player2.vol = 0.0f; + } + else + { + if( player.is_dead ) + { + audio_player0.vol = 0.0f; + audio_player1.vol = 0.0f; + audio_player2.vol = 0.0f; + } + else + { + float slide = vg_clampf( fabsf(player.slip), 0.0f, 1.0f ); + audio_player0.vol = (1.0f-air)*attn*(1.0f-slide); + audio_player1.vol = air *attn; + audio_player2.vol = (1.0f-air)*attn*slide; + } + } +} + static void player_update(void) { for( int i=0; i