X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_physics.h;h=bb79b850e84f8ac66e4af3ead166d54763a612bf;hb=0ae443b3f6b4b753f9a2eba58da597ae8cb14b4f;hp=90ea030a7bd2adab89cd6dc61a9de61155b32f93;hpb=47941822dae18a018c985847b052e70214a3ccc6;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_physics.h b/player_physics.h index 90ea030..bb79b85 100644 --- a/player_physics.h +++ b/player_physics.h @@ -81,7 +81,8 @@ VG_STATIC void player_start_air(void) u32 scolour = (u8)(vg_minf(-land_delta * 2.0f, 255.0f)); /* Bias prediction towords ramps */ - if( ray_hit_is_ramp( &contact ) ) + if( ray_hit_material( &contact )->info.flags + & k_material_flag_skate_surface ) { land_delta *= 0.1f; scolour |= 0x0000a000; @@ -168,7 +169,7 @@ VG_STATIC void player_physics_control(void) push_thresh_last = push_thresh; - if( !vg_get_button("break") && push_thresh ) + if( !vg_get_button("jump") && push_thresh ) { player.phys.pushing = 1.0f; player.phys.push_time = vg.time - player.phys.start_push; @@ -359,7 +360,14 @@ VG_STATIC void player_walk_physics(void) } } - phys->in_air = len==0?1:0; + if( len == 0 ) + phys->in_air = 1; + else + { + phys->in_air = 0; + struct world_material *surface_mat = world_contact_material( manifold ); + player.surface_prop = surface_mat->info.surface_prop; + } if( !phys->in_air ) { @@ -633,16 +641,19 @@ VG_STATIC void player_do_motion(void) float horizontal = vg_get_axis("horizontal"), vertical = vg_get_axis("vertical"); - if( (phys->rb.co[1] < 0.0f) && !player.is_dead ) + if( world.water.enabled ) { - audio_lock(); - audio_player_set_flags( &audio_player_extra, AUDIO_FLAG_SPACIAL_3D ); - audio_player_set_position( &audio_player_extra, phys->rb.co ); - audio_player_set_vol( &audio_player_extra, 20.0f ); - audio_player_playclip( &audio_player_extra, &audio_splash ); - audio_unlock(); - - player_kill(); + if( (phys->rb.co[1] < 0.0f) && !player.is_dead ) + { + audio_lock(); + audio_player_set_flags( &audio_player_extra, AUDIO_FLAG_SPACIAL_3D ); + audio_player_set_position( &audio_player_extra, phys->rb.co ); + audio_player_set_vol( &audio_player_extra, 20.0f ); + audio_player_playclip( &audio_player_extra, &audio_splash ); + audio_unlock(); + + player_kill(); + } } if( phys->on_board ) @@ -832,10 +843,20 @@ VG_STATIC int reset_player( int argc, char const *argv[] ) player.is_dead = 0; + m3x3f the_long_way; + q_m3x3( rp->q, the_long_way ); + + v3f delta = {1.0f,0.0f,0.0f}; + m3x3_mulv( the_long_way, delta, delta ); + + player.angles[0] = atan2f( delta[0], -delta[2] ); + player.angles[1] = -asinf( delta[1] ); + + v4_copy( rp->q, phys->rb.q ); v3_copy( rp->co, phys->rb.co ); v3_zero( phys->rb.v ); - + phys->vswitch = 1.0f; phys->slip_last = 0.0f; phys->in_air = 1;