phys->in_air = 1;
- float pstep = ktimestep*10.0f;
+ float pstep = VG_TIMESTEP_FIXED * 10.0f;
float best_velocity_delta = -9999.9f;
float k_bias = 0.96f;
phys->slip = slip;
phys->reverse = -vg_signf(vel[2]);
- float substep = ktimestep * 0.2f;
+ float substep = VG_TIMESTEP_FIXED * 0.2f;
float fwd_resistance = (vg_get_button( "break" )? 5.0f: 0.02f) * -substep;
for( int i=0; i<5; i++ )
vg_signf( vel[0] ) * -k_friction_lat*substep );
}
- static double start_push = 0.0;
- if( vg_get_button_down( "push" ) )
- start_push = vg_time;
-
if( vg_get_button( "jump" ) )
{
- phys->jump += ktimestep * k_jump_charge_speed;
+ phys->jump += VG_TIMESTEP_FIXED * k_jump_charge_speed;
if( !phys->jump_charge )
phys->jump_dir = phys->reverse > 0.0f? 1: 0;
phys->jump_charge = 1;
}
+ static int push_button_last = 0;
+ int push_button = vg_get_button( "push" );
+ push_button_last = push_button;
+
+ if( push_button && !push_button_last )
+ player.phys.start_push = vg.time;
+
if( !vg_get_button("break") && vg_get_button( "push" ) )
{
- player.pushing = 1.0f;
- player.push_time = vg_time-start_push;
+ player.phys.pushing = 1.0f;
+ player.phys.push_time = vg.time - player.phys.start_push;
- float cycle_time = player.push_time*k_push_cycle_rate,
- amt = k_push_accel * (sinf(cycle_time)*0.5f+0.5f)*ktimestep,
+ float cycle_time = player.phys.push_time*k_push_cycle_rate,
+ amt = k_push_accel * (sinf(cycle_time)*0.5f+0.5f)*VG_TIMESTEP_FIXED,
current = v3_length( vel ),
new_vel = vg_minf( current + amt, k_max_push_speed );
/* Pumping */
static float previous = 0.0f;
float delta = previous - phys->grab,
- pump = delta * k_pump_force*ktimestep;
+ pump = delta * k_pump_force * VG_TIMESTEP_FIXED;
previous = phys->grab;
v3f p1;
m3x3_mulv( phys->rb.to_world, vel, phys->rb.v );
- float steer = vg_get_axis( "horizontal" );
- phys->iY -= vg_signf(steer)*powf(steer,2.0f) * k_steer_ground * ktimestep;
+ float steer = vg_get_axis( "horizontal" ),
+ steer_scaled = vg_signf(steer) * powf(steer,2.0f) * k_steer_ground;
+
+ phys->iY -= steer_scaled * VG_TIMESTEP_FIXED;
}
/*
/*
* Prediction
*/
- float pstep = ktimestep*10.0f;
+ float pstep = VG_TIMESTEP_FIXED * 10.0f;
v3f pco, pco1, pv;
v3_copy( phys->rb.co, pco );
time_to_impact += pstep;
}
- phys->iY -= vg_get_axis( "horizontal" ) * k_steer_air * ktimestep;
+ phys->iY -= vg_get_axis( "horizontal" ) * k_steer_air * VG_TIMESTEP_FIXED;
{
float iX = vg_get_axis( "vertical" ) *
- phys->reverse * k_steer_air * limiter * ktimestep;
+ phys->reverse * k_steer_air * limiter * VG_TIMESTEP_FIXED;
static float siX = 0.0f;
siX = vg_lerpf( siX, iX, k_steer_air_lerp );
vg_line( phys->rb.co, p1, 0xff0000ff );
float move_dead = 0.1f,
- move = vg_get_axis("grabr")*0.5f + 0.5f - move_dead;
+ move = vg_get_axis("grabl")*0.5f + 0.5f - move_dead;
if( move > 0.0f )
{
float move_norm = move * (1.0f/(1.0f-move_dead)),
speed = vg_lerpf( 0.1f*k_runspeed, k_runspeed, move_norm ),
- amt = k_walk_accel * ktimestep,
+ amt = k_walk_accel * VG_TIMESTEP_FIXED,
zvel = v3_dot( phys->rb.v, forward_dir ),
new_vel = vg_minf( zvel + amt, speed ),
diff = new_vel - vg_minf( zvel, speed );
/* TODO move */
float walk_norm = 30.0f/(float)player.mdl.anim_walk->length,
- run_norm = 30.0f/(float)player.mdl.anim_run->length ;
+ run_norm = 30.0f/(float)player.mdl.anim_run->length,
+ walk_adv = vg_lerpf( walk_norm,run_norm,move_norm );
- player.walk_timer += ktimestep * vg_lerpf( walk_norm,run_norm,move_norm );
+ player.walk_timer += walk_adv * VG_TIMESTEP_FIXED;
}
else
{
player.walk_timer = 0.0f;
}
- phys->rb.v[0] *= 1.0f - (ktimestep*k_walk_friction);
- phys->rb.v[2] *= 1.0f - (ktimestep*k_walk_friction);
+ phys->rb.v[0] *= 1.0f - (VG_TIMESTEP_FIXED * k_walk_friction);
+ phys->rb.v[2] *= 1.0f - (VG_TIMESTEP_FIXED * k_walk_friction);
}
/*
float grabt = vg_get_axis( "grabr" )*0.5f+0.5f;
phys->grab = vg_lerpf( phys->grab, grabt, 0.14f );
- player.pushing = 0.0f;
+ player.phys.pushing = 0.0f;
if( !phys->in_air )
{
q_mul( correction, phys->rb.q, phys->rb.q );
}
- v3_muladds( phys->rb.v, phys->rb.up,
- -k_downforce*ktimestep, phys->rb.v );
+ float const DOWNFORCE = -k_downforce*VG_TIMESTEP_FIXED;
+ v3_muladds( phys->rb.v, phys->rb.up, DOWNFORCE, phys->rb.v );
player_physics_control();
v3_muladds( phys->rb.v, jumpdir, force, phys->rb.v );
phys->jump = 0.0f;
- player.jump_time = vg_time;
+ player.jump_time = vg.time;
/* TODO: Move to audio file */
audio_lock();
if( !phys->jump_charge )
{
- phys->jump -= k_jump_charge_speed * ktimestep;
+ phys->jump -= k_jump_charge_speed * VG_TIMESTEP_FIXED;
}
+
phys->jump_charge = 0;
phys->jump = vg_clampf( phys->jump, 0.0f, 1.0f );
}
v3f prevco;
v3_copy( phys->rb.co, prevco );
- apply_gravity( phys->rb.v, ktimestep );
- v3_muladds( phys->rb.co, phys->rb.v, ktimestep, phys->rb.co );
+ apply_gravity( phys->rb.v, VG_TIMESTEP_FIXED );
+ v3_muladds( phys->rb.co, phys->rb.v, VG_TIMESTEP_FIXED, phys->rb.co );
/* Real angular velocity integration */
v3_lerp( phys->rb.w, (v3f){0.0f,0.0f,0.0f}, 0.125f, phys->rb.w );
view_vel = { 0.0f, 0.0f };
if( vg_get_button_down( "primary" ) )
- v2_copy( vg_mouse, mouse_last );
+ v2_copy( vg.mouse, mouse_last );
else if( vg_get_button( "primary" ) )
{
v2f delta;
- v2_sub( vg_mouse, mouse_last, delta );
- v2_copy( vg_mouse, mouse_last );
+ v2_sub( vg.mouse, mouse_last, delta );
+ v2_copy( vg.mouse, mouse_last );
- v2_muladds( view_vel, delta, 0.001f, view_vel );
+ v2_muladds( view_vel, delta, 0.06f*vg.time_delta, view_vel );
}
- v2_muladds( view_vel,
- (v2f){ vg_get_axis("h1"), vg_get_axis("v1") },
- 0.05f, view_vel );
- v2_muls( view_vel, 0.93f, view_vel );
+ v2_muladds( view_vel, (v2f){ vg_get_axis("h1"), vg_get_axis("v1") },
+ 3.0f * vg.time_delta, view_vel );
+
+ v2_muls( view_vel, 1.0f-4.2f*vg.time_delta, 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 );
}
static v3f move_vel = { 0.0f, 0.0f, 0.0f };
if( vg_get_button( "forward" ) )
- v3_muladds( move_vel, lookdir, ktimestep * movespeed, move_vel );
+ v3_muladds( move_vel, lookdir, VG_TIMESTEP_FIXED * movespeed, move_vel );
if( vg_get_button( "back" ) )
- v3_muladds( move_vel, lookdir, ktimestep *-movespeed, move_vel );
+ v3_muladds( move_vel, lookdir, VG_TIMESTEP_FIXED *-movespeed, move_vel );
if( vg_get_button( "left" ) )
- v3_muladds( move_vel, sidedir, ktimestep *-movespeed, move_vel );
+ v3_muladds( move_vel, sidedir, VG_TIMESTEP_FIXED *-movespeed, move_vel );
if( vg_get_button( "right" ) )
- v3_muladds( move_vel, sidedir, ktimestep * movespeed, move_vel );
+ v3_muladds( move_vel, sidedir, VG_TIMESTEP_FIXED * movespeed, move_vel );
v3_muls( move_vel, 0.7f, move_vel );
v3_add( move_vel, player.camera_pos, player.camera_pos );