}
phys->in_air = len==0?1:0;
+
+ if( !phys->in_air )
+ {
+ float const DOWNFORCE = -k_walk_downforce*VG_TIMESTEP_FIXED;
+ v3_muladds( phys->rb.v, (v3f){0.0f,-1.0f,0.0f}, DOWNFORCE, phys->rb.v );
+
+ if( vg_get_button("jump") )
+ {
+ phys->rb.v[1] = 5.0f;
+ }
+ }
v3_zero( phys->rb.w );
q_axis_angle( phys->rb.q, (v3f){0.0f,1.0f,0.0f}, -player.angles[0] );
new_vel = vg_minf( zvel + amt, speed ),
diff = new_vel - vg_minf( zvel, speed );
- v3_muladds( phys->rb.v, forward_dir, diff, phys->rb.v );
+ if( !phys->in_air )
+ {
+ v3_muladds( phys->rb.v, forward_dir, diff, phys->rb.v );
+ }
/* TODO move */
float walk_norm = 30.0f/(float)player.mdl.anim_walk->length,
{
player.walk_timer = 0.0f;
}
-
- phys->rb.v[0] *= 1.0f - (VG_TIMESTEP_FIXED * k_walk_friction);
- phys->rb.v[2] *= 1.0f - (VG_TIMESTEP_FIXED * k_walk_friction);
+
+ if( !phys->in_air )
+ {
+ phys->rb.v[0] *= 1.0f - (VG_TIMESTEP_FIXED * k_walk_friction);
+ phys->rb.v[2] *= 1.0f - (VG_TIMESTEP_FIXED * k_walk_friction);
+ }
}
/*