X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=46c7dd4de0d416836bbe1b05d3b358fe80d71216;hb=4b222b13c504e5c21a743b7aeb02a692ce16da01;hp=b70717eb5076b0fbc8aa3cae33f07f47fe5f29c3;hpb=d57b7661518800479c00300ce57407378696eec9;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index b70717e..46c7dd4 100644 --- a/player.h +++ b/player.h @@ -29,11 +29,12 @@ static float static int freecam = 0; static int walk_grid_iterations = 1; +static float fc_speed = 10.0f; 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; @@ -100,13 +101,13 @@ static void player_mouseview(void) v2_sub( vg_mouse, mouse_last, delta ); v2_copy( vg_mouse, mouse_last ); - v2_muladds( view_vel, delta, 0.005f, view_vel ); + v2_muladds( view_vel, delta, 0.001f, view_vel ); } v2_muladds( view_vel, (v2f){ vg_get_axis("h1"), vg_get_axis("v1") }, 0.05f, view_vel ); - v2_muls( view_vel, 0.7f, view_vel ); + v2_muls( view_vel, 0.93f, view_vel ); v2_add( view_vel, player.angles, player.angles ); player.angles[1] = vg_clampf( player.angles[1], -VG_PIf*0.5f, VG_PIf*0.5f ); } @@ -115,7 +116,7 @@ static void player_freecam(void) { player_mouseview(); - float movespeed = 25.0f; + float movespeed = fc_speed; v3f lookdir = { 0.0f, 0.0f, -1.0f }, sidedir = { 1.0f, 0.0f, 0.0f }; @@ -162,10 +163,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 +226,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 +460,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 +599,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 +616,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 +1013,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 +1023,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 +1982,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 +1994,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" ) ) {