X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=b05714e4e893209fe2198628700419d72c600c50;hb=fe76a19eea0fd2564ab931ec2f0c7cfba768d8b8;hp=2860d1934cbbf217bb652ffcb8562255f168da38;hpb=1c97cb161f885ad24d3356d92c8f4fd0e252bc61;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index 2860d19..b05714e 100644 --- a/player.h +++ b/player.h @@ -33,7 +33,7 @@ static int walk_grid_iterations = 1; static struct gplayer { /* Physics */ - rigidbody rb, collide_front, collide_back; + rigidbody rb, collide_front, collide_back, rb_gate_frame; v3f a, v_last, m, bob, vl; @@ -450,39 +450,6 @@ static void player_physics(void) len += rb_sphere_vs_scene( rbf, &world.rb_geo, manifold+len ); len += rb_sphere_vs_scene( rbb, &world.rb_geo, manifold+len ); -#if 0 - for( int i=0; i= vg_list_size(manifold)) - { - vg_error("Manifold overflow!\n"); - break; - } - - rb_ct *ct = &manifold[manifold_count]; - v3_copy( poles[j], player.rb.co ); - - manifold_count += rb_sphere_vs_triangle( &player.rb, tri, ct ); - } - - v3_copy( temp, player.rb.co ); - } -#endif - rb_presolve_contacts( manifold, len ); v3f surface_avg = {0.0f, 0.0f, 0.0f}; @@ -493,8 +460,19 @@ static void player_physics(void) else { for( int i=0; i 0.5f ) @@ -624,9 +602,10 @@ static void player_do_motion(void) /* * Gate intersection, by tracing a line over the gate planes */ - for( int i=0; igate; if( gate_intersect( gate, player.rb.co, prevco ) ) { @@ -640,7 +619,9 @@ static void player_do_motion(void) v4f transport_rotation; m3x3_q( gate->transport, transport_rotation ); q_mul( transport_rotation, player.rb.q, player.rb.q ); - + + world_routes_activate_gate( i ); + player.rb_gate_frame = player.rb; break; } } @@ -2004,6 +1985,8 @@ static int reset_player( int argc, char const *argv[] ) rb_update_transform( &player.rb ); m3x3_mulv( player.rb.to_world, (v3f){ 0.0f, 0.0f, -1.2f }, player.rb.v ); + + player.rb_gate_frame = player.rb; return 1; } @@ -2014,7 +1997,15 @@ static void player_update(void) player.land_target_colours[i], 0.25f); if( vg_get_axis("grabl")>0.0f) - reset_player(0,NULL); + { + player.rb = player.rb_gate_frame; + player.is_dead = 0; + player.in_air = 1; + m3x3_identity( player.vr ); + + player.mdl.shoes[0] = 1; + player.mdl.shoes[1] = 1; + } if( vg_get_button_down( "switchmode" ) ) {