-
- /* Integrate velocity */
- apply_gravity( player.v, ktimestep );
- v3_muladds( player.co, player.v, ktimestep, player.co );
-
- /* Integrate inertia */
- v4f rotate; v3f vup = {0.0f,1.0f,0.0f};
- m3x3_mulv( player.to_world, vup, vup );
-
- q_axis_angle( rotate, vup, player.iY );
- q_mul( rotate, player.rot, player.rot );
-
- player.look_dir[0] = atan2f( player.v[0], -player.v[2] );
- player.look_dir[1] = atan2f( -player.v[1], sqrtf(player.v[0]*player.v[0]+
- player.v[2]*player.v[2]) ) * 0.3f;
-
- player.iY = 0.0f; /* temp */
-
- if( player.in_air )
- player_physics_air();
-
- if( !player.in_air )
- player_physics_ground();
-
- /* Camera and character */
- float kheight = 1.8f,
- kleg = 0.6f;
-
- v3f head;
- head[0] = 0.0f;
- head[1] = kheight;
- head[2] = 0.0f;
-
- m4x3_mulv( player.to_world, head, head );
- v3_copy( head, player.view );
-
- player_transform_update();
- q_normalize(player.rot);
-}
-
-void vg_update(void)
-{
- player_update();
-
- /* Creating a skeleton of the player dynamically */
-
- v2f ac;
-
- static v3f last_vel = { 0.0f, 0.0f, 0.0f };
- static v3f momentum, bob;
-
- v3_sub( player.v, last_vel, player.a );
- v3_copy( player.v, last_vel );
-
- v3_add( momentum, player.a, momentum );
-
- v3_lerp( momentum, (v3f){0.0f,0.0f,0.0f}, 0.1f, momentum );
- v3f target;
-
- momentum[0] = vg_clampf( momentum[0], -2.0f, 2.0f );
- momentum[1] = vg_clampf( momentum[1], -0.2f, 5.0f );
- momentum[2] = vg_clampf( momentum[2], -2.0f, 2.0f );
- v3_copy( momentum, target );
-
- v3_lerp( bob, target, 0.2f, bob );
-
- /* Head */
-#if 0
- float lslip = fabsf(slip); //vg_minf( 0.4f, slip );
-
- static float grab = 0.0f;
- float grabt = vg_get_axis( "grabr" )*0.5f+0.5f;
- grab = vg_lerpf( grab, grabt, 0.04f );
-
- v3f head;
- head[0] = 0.0f;//(-sinf(lslip)*0.9f * kheight) * 0.44f;
- head[1] = (0.3f + cosf(lslip)*0.5f) * kheight - grab*0.7f;
- head[2] = 0.0f;
-
- v3f offset;
- m3x3_mulv( player.to_local, bob, offset );
- offset[0] *= 0.25f;
- offset[1] *= -0.25f;
- offset[2] *= 0.7f;
- v3_muladds( head, offset, 0.7f, head );
-
- head[1] = vg_clampf( head[1], 0.3f, 20.0f );
-
- player.handl_target[0] = head[0] + 0.2f;
- player.handl_target[1] = head[1] - 0.8f*(1.0f-fabsf(slip));
- player.handl_target[2] = head[2] + 0.2f + 0.7f*fabsf(slip);
-
- player.handr_target[0] = head[0] + 0.2f;
- player.handr_target[1] = head[1] - 0.8f*(1.0f-fabsf(slip));
- player.handr_target[2] = head[2] - (0.2f + 0.7f*fabsf(slip));
-
- if( vg_maxf(lslip,grab) > 0.5f )