X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_walk.c;h=e269166630dfd85c0eb909fbdc8b34e3c7902867;hb=874c9d7e6ee2d826f9eb34518e8163283439c38e;hp=ebd9dad0cbe37b2ac50e3879006c96e0dff5726d;hpb=7f4c71033c06954f3094c9d51219628438b80ac8;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_walk.c b/player_walk.c index ebd9dad..e269166 100644 --- a/player_walk.c +++ b/player_walk.c @@ -7,18 +7,14 @@ static void player_walk_drop_in_vector( v3f vec ){ v3f axis, init_dir; - v3_cross( localplayer.basis[1], player_walk.state.drop_in_normal, axis ); + v3_cross( (v3f){0.0f,1.0f,0.0f}, player_walk.state.drop_in_normal, axis ); v3_cross( axis, player_walk.state.drop_in_normal, init_dir ); v3_normalize( init_dir ); v3_muls( init_dir, 4.25f, vec ); } static float player_xyspeed2(void){ - v3f xy; - v3_muladds( localplayer.rb.v, localplayer.basis[1], - -v3_dot( localplayer.basis[1], localplayer.rb.v ), xy ); - - return v3_length2(xy); + return v3_length2( (v3f){localplayer.rb.v[0], 0.0f, localplayer.rb.v[2]} ); } static void player_walk_generic_to_skate( enum skate_activity init, f32 yaw ){ @@ -37,11 +33,9 @@ static void player_walk_generic_to_skate( enum skate_activity init, f32 yaw ){ v3f dir; v3_copy( v, dir ); v3_normalize( dir ); - m3x3_mulv( localplayer.invbasis, dir, dir ); q_axis_angle( localplayer.rb.q, (v3f){0.0f,1.0f,0.0f}, atan2f(-dir[0],-dir[2]) ); - q_mul( localplayer.qbasis, localplayer.rb.q, localplayer.rb.q ); q_normalize( localplayer.rb.q ); q_mulv( localplayer.rb.q, (v3f){0.0f,1.0f,0.0f}, player_skate.state.cog ); @@ -85,7 +79,7 @@ static void player_walk_drop_in_to_skate(void){ static void player_walk_drop_in_overhang_transform( f32 t, v3f co, v4f q ){ v3f axis; - v3_cross( localplayer.basis[1], player_walk.state.drop_in_normal, axis ); + v3_cross( (v3f){0,1,0}, player_walk.state.drop_in_normal, axis ); v3_normalize( axis ); float a = acosf( player_walk.state.drop_in_normal[1] ) * t; @@ -349,7 +343,7 @@ static void player__walk_pre_update(void){ } static int player_walk_normal_standable( v3f n ){ - return v3_dot( n, localplayer.basis[1] ) > 0.70710678118f; + return n[1] > 0.70710678118f; } static void player_accelerate( v3f v, v3f movedir, f32 speed, f32 accel ){ @@ -451,7 +445,7 @@ static void player__walk_update(void){ m4x3f mtx; m3x3_copy( localplayer.rb.to_world, mtx ); - v3_add( localplayer.rb.co, localplayer.basis[1], mtx[3] ); + v3_add( localplayer.rb.co, (v3f){0,1,0}, mtx[3] ); vg_line_capsule( mtx, w->collider.radius, w->collider.height, VG__WHITE ); @@ -463,10 +457,6 @@ static void player__walk_update(void){ v3f forward_dir = { -sinf(yaw), 0.0f, cosf(yaw) }; v3f right_dir = { forward_dir[2], 0.0f, -forward_dir[0] }; - m3x3_mulv( localplayer.basis, forward_dir, forward_dir ); - m3x3_mulv( localplayer.basis, right_dir, right_dir ); - - w->move_speed = localplayer.immobile? 0.0f: v2_length( steer ); /* @@ -533,11 +523,7 @@ static void player__walk_update(void){ f32 t = vg.time - w->state.jump_input_time; if( t < PLAYER_JUMP_EPSILON ){ - float d = v3_dot( localplayer.basis[1], localplayer.rb.v ); - v3_muladds( localplayer.rb.v, localplayer.basis[1], -d, - localplayer.rb.v ); - v3_muladds( localplayer.rb.v, localplayer.basis[1], 5.0f, - localplayer.rb.v ); + localplayer.rb.v[1] = 5.0f; w->state.activity = k_walk_activity_air; prev_state = k_walk_activity_air; accel_speed = k_walk_air_accel; @@ -584,8 +570,8 @@ static void player__walk_update(void){ v3f pa, pb; v3_copy( localplayer.rb.co, pa ); - v3_muladds( pa, localplayer.basis[1], w->collider.radius + max_dist, pa ); - v3_muladds( pa, localplayer.basis[1], -max_dist * 2.0f, pb ); + pa[1] += w->collider.radius + max_dist; + v3_add( pa, (v3f){0, -max_dist * 2.0f, 0}, pb ); vg_line( pa, pb, 0xff000000 ); v3f n; @@ -594,16 +580,12 @@ static void player__walk_update(void){ w->collider.radius, &t, n, 0 ) != -1 ){ if( player_walk_normal_standable(n) ){ v3_lerp( pa, pb, t, localplayer.rb.co ); - v3_muladds( localplayer.rb.co, localplayer.basis[1], - -w->collider.radius - k_penetration_slop, - localplayer.rb.co ); + localplayer.rb.co[1] += -w->collider.radius - k_penetration_slop; w->state.activity = k_walk_activity_ground; - float d = -v3_dot(n,localplayer.rb.v), - g = -k_gravity * k_rb_delta; + float d = -v3_dot(n,localplayer.rb.v); v3_muladds( localplayer.rb.v, n, d, localplayer.rb.v ); - v3_muladds( localplayer.rb.v, localplayer.basis[1], g, - localplayer.rb.v ); + localplayer.rb.v[1] += -k_gravity * k_rb_delta; } } } @@ -617,8 +599,7 @@ static void player__walk_update(void){ /* integrate */ if( w->state.activity == k_walk_activity_air ){ - v3_muladds( localplayer.rb.v, localplayer.basis[1], -k_gravity*k_rb_delta, - localplayer.rb.v ); + localplayer.rb.v[1] += -k_gravity*k_rb_delta; } if( localplayer.immobile ){ @@ -628,7 +609,7 @@ static void player__walk_update(void){ v3_muladds( localplayer.rb.co, localplayer.rb.v, k_rb_delta, localplayer.rb.co ); - v3_add( localplayer.rb.co, localplayer.basis[1], mtx[3] ); + v3_add( localplayer.rb.co, (v3f){0,1,0}, mtx[3] ); vg_line_capsule( mtx, w->collider.radius, w->collider.height, VG__GREEN ); /* @@ -657,7 +638,7 @@ static void player__walk_update(void){ localplayer.rb.co[1] -= w->collider.radius; rb_update_transform( &localplayer.rb ); - v3_add( localplayer.rb.co, localplayer.basis[1], mtx[3] ); + v3_add( localplayer.rb.co, (v3f){0,1,0}, mtx[3] ); vg_line_capsule( mtx, w->collider.radius, w->collider.height, VG__RED); } } @@ -683,7 +664,7 @@ static void player__walk_post_update(void){ m4x3f mtx; m3x3_copy( localplayer.rb.to_world, mtx ); - v3_add( localplayer.rb.co, localplayer.basis[1], mtx[3] ); + v3_add( localplayer.rb.co, (v3f){0,1,0}, mtx[3] ); float substep = vg.time_fixed_extrapolate; v3_muladds( mtx[3], localplayer.rb.v, k_rb_delta*substep, mtx[3] ); @@ -692,15 +673,9 @@ static void player__walk_post_update(void){ /* Calculate header */ v3f v; - if( player_xyspeed2() > 0.1f*0.1f ) - { - v3f v_xy; - m3x3_mulv( localplayer.invbasis, localplayer.rb.v, v_xy ); - float a = atan2f( v_xy[0], v_xy[2] ); - + if( player_xyspeed2() > 0.1f*0.1f ){ + float a = atan2f( localplayer.rb.v[0], localplayer.rb.v[2] ); q_axis_angle( localplayer.rb.q, (v3f){0.0f,1.0f,0.0f}, a ); - q_mul( localplayer.qbasis, localplayer.rb.q, localplayer.rb.q ); - q_normalize( localplayer.rb.q ); } vg_line_point( w->state.drop_in_target, 0.1f, VG__GREEN ); @@ -718,12 +693,10 @@ static void player__walk_post_update(void){ p1[0] = sinf( a ); p1[1] = 0.0f; p1[2] = cosf( a ); - m3x3_mulv( localplayer.basis, p1, p1 ); v3_add( localplayer.rb.co, p1, p1 ); vg_line( localplayer.rb.co, p1, VG__PINK ); - int walk_phase = 0; if( vg_fractf(w->state.walk_timer) > 0.5f ) walk_phase = 1; @@ -883,8 +856,6 @@ static void player__walk_animate(void){ } q_axis_angle( animator->root_q, (v3f){0.0f,1.0f,0.0f}, walk_yaw + VG_PIf ); - q_mul( localplayer.qbasis, animator->root_q, animator->root_q ); - q_normalize( animator->root_q ); } static void player__walk_pose( void *_animator, player_pose *pose ){ @@ -1053,12 +1024,8 @@ static void player__walk_transition(void){ v3f fwd = { 0.0f, 0.0f, 1.0f }; q_mulv( localplayer.rb.q, fwd, fwd ); - m3x3_mulv( localplayer.invbasis, fwd, fwd ); - q_axis_angle( localplayer.rb.q, (v3f){0.0f,1.0f,0.0f}, atan2f(fwd[0], fwd[2]) ); - q_mul( localplayer.qbasis, localplayer.rb.q, localplayer.rb.q ); - q_normalize( localplayer.rb.q ); rb_update_transform( &localplayer.rb ); }