X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;ds=sidebyside;f=player_walk.c;h=75e3a379261e5ac7b1a8b0e44d9f94aa51e6ca14;hb=66b3ec9c538fefd79c2de08e0dcdf070b4331885;hp=6d020523d0cc1bb57451dc6dc3fb992b080bb291;hpb=d3d41f80ec992fe4e40b8531721b7874b8a7c400;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_walk.c b/player_walk.c index 6d02052..75e3a37 100644 --- a/player_walk.c +++ b/player_walk.c @@ -408,6 +408,8 @@ VG_STATIC void player__walk_update( player_instance *player ) if( w->state.activity != k_walk_activity_lockedmove ) w->state.activity = k_walk_activity_air; + w->surface = k_surface_prop_concrete; + for( int i=0; istate.activity = k_walk_activity_ground; v3_add( surface_avg, ct->n, surface_avg ); + + struct world_surface *surf = world_contact_surface( world, ct ); + if( surf->info.surface_prop > w->surface ) + w->surface = surf->info.surface_prop; } rb_prepare_contact( ct, k_rb_delta ); @@ -456,9 +462,6 @@ VG_STATIC void player__walk_update( player_instance *player ) } else{ player_friction( player->rb.v ); - - struct world_surface *surf = world_contact_surface( world, manifold ); - w->surface = surf->info.surface_prop; } } else{ @@ -633,6 +636,40 @@ VG_STATIC void player__walk_post_update( player_instance *player ) v3_add( player->rb.co, p1, p1 ); vg_line( player->rb.co, p1, VG__PINK ); + + + int walk_phase = 0; + if( vg_fractf(w->walk_timer) > 0.5f ) + walk_phase = 1; + else + walk_phase = 0; + + if( (w->step_phase != walk_phase) && + (w->state.activity == k_walk_activity_ground ) ) + { + audio_lock(); + if( w->surface == k_surface_prop_concrete ){ + audio_oneshot_3d( + &audio_footsteps[rand()%vg_list_size(audio_footsteps)], + player->rb.co, 40.0f, 1.0f + ); + } + else if( w->surface == k_surface_prop_grass ){ + audio_oneshot_3d( + &audio_footsteps_grass[rand()%vg_list_size(audio_footsteps_grass)], + player->rb.co, 40.0f, 1.0f + ); + } + else if( w->surface == k_surface_prop_wood ){ + audio_oneshot_3d( + &audio_footsteps_wood[rand()%vg_list_size(audio_footsteps_wood)], + player->rb.co, 40.0f, 1.0f + ); + } + audio_unlock(); + } + + w->step_phase = walk_phase; } VG_STATIC void player__walk_animate( player_instance *player, @@ -659,8 +696,7 @@ VG_STATIC void player__walk_animate( player_instance *player, player_pose apose, bpose; - if( w->move_speed > 0.025f ) - { + if( w->move_speed > 0.025f ){ /* TODO move */ float walk_norm = 30.0f/(float)w->anim_walk->length, run_norm = 30.0f/(float)w->anim_run->length, @@ -668,8 +704,7 @@ VG_STATIC void player__walk_animate( player_instance *player, w->walk_timer += walk_adv * vg.time_delta; } - else - { + else{ w->walk_timer = 0.0f; } @@ -812,6 +847,13 @@ VG_STATIC void player__walk_im_gui( player_instance *player ) "k_walk_activity_immobile", "k_walk_activity_lockedmove" } [w->state.activity] ); + player__debugtext( 1, "surface: %s\n", + (const char *[]){ "concrete", + "wood", + "grass", + "tiles", + "metal" } + [w->surface] ); if( w->state.outro_anim ) {