X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=1e667ca777d0b0d95b3c86c95bb24dbee6a0517c;hb=4f4458d229e40a852708319861224b7cc48ad0b9;hp=b70717eb5076b0fbc8aa3cae33f07f47fe5f29c3;hpb=d57b7661518800479c00300ce57407378696eec9;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index b70717e..1e667ca 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; @@ -162,10 +162,7 @@ static void player_start_air(void) player.in_air = 1; float pstep = ktimestep*10.0f; - - float best_velocity_mod = 0.0f, - best_velocity_delta = -9999.9f; - + float best_velocity_delta = -9999.9f; float k_bias = 0.96f; v3f axis; @@ -228,7 +225,6 @@ static void player_start_air(void) if( (land_delta < 0.0f) && (land_delta > best_velocity_delta) ) { best_velocity_delta = land_delta; - best_velocity_mod = vmod; v3_copy( contact.pos, player.land_target ); @@ -463,12 +459,14 @@ static void player_physics(void) { v3_add( manifold[i].n, surface_avg, surface_avg ); +#if 0 if( manifold[i].element_id <= world.sm_geo_std_oob.vertex_count ) { player.is_dead = 1; character_ragdoll_copypose( &player.mdl, player.rb.v ); return; } +#endif } v3_normalize( surface_avg ); @@ -600,9 +598,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 ) ) { @@ -616,7 +615,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; } } @@ -1011,6 +1012,7 @@ static void player_walkgrid_iter(struct walkgrid *wg, int iter) pa[0] = wg->region[0][0] + (float)wg->cell_id[0] *k_gridscale; pa[1] = (wg->region[0][1] + wg->region[1][1]) * 0.5f + k_gridscale; pa[2] = wg->region[0][2] + (float)wg->cell_id[1] *k_gridscale; +#if 0 pb[0] = pa[0]; pb[1] = pa[1]; pb[2] = pa[2] + k_gridscale; @@ -1020,7 +1022,6 @@ static void player_walkgrid_iter(struct walkgrid *wg, int iter) pd[0] = pa[0] + k_gridscale; pd[1] = pa[1]; pd[2] = pa[2]; -#if 0 /* if you want to draw the current cell */ vg_line( pa, pb, 0xff00ffff ); vg_line( pb, pc, 0xff00ffff ); @@ -1980,6 +1981,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; } @@ -1990,7 +1993,17 @@ 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; + + world_routes_notify_reset(); + } if( vg_get_button_down( "switchmode" ) ) {