- 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 );
+ v2_muls( walk, vg_maxf( player.input_push->axis.value, 0.5f ) *
+ k_walkspeed * VG_TIMESTEP_FIXED, walk );
+
+ v3f walk_apply;
+ v3_zero( walk_apply );
+
+ /* Do XY translation */
+ v3_muladds( walk_apply, right_dir, walk[0], walk_apply );
+ v3_muladds( walk_apply, forward_dir, walk[1], walk_apply );
+ v3_add( walk_apply, phys->rb.co, phys->rb.co );
+ v3_divs( walk_apply, VG_TIMESTEP_FIXED, phys->rb.v );
+
+ /* Directly resolve collisions */
+ player_walk_update_collision();
+ rb_debug( rbf, 0xffffff00 );
+ rb_debug( rbb, 0xffffff00 );