Used by view and sv_user
===============
*/
-float V_CalcRoll (vec3_t angles, vec3_t velocity)
+float V_CalcRoll (const vec3_t angles, const vec3_t velocity)
{
vec3_t right;
float sign;
* cl.oldongrounbd
* cl.stairsmoothtime
* cl.stairsmoothz
+ * cl.calcrefdef_prevtime
* Extra input:
* cl.movecmd[0].time
* cl.movevars_stepheight
* cl.qw_weaponkick
* cls.protocol
* cl.time
- * cl.velocity (TODO should this be a parameter?)
* Output:
* cl.csqc_viewanglesfromengine
* cl.csqc_viewmodelmatrixfromengine
* viewmodelmatrix_nobob
* viewmodelmatrix_withbob
*/
-void V_CalcRefdefUsing (const matrix4x4_t *entrendermatrix, const vec3_t clviewangles, qboolean teleported, qboolean clonground, qboolean clcmdjump, float clstatsviewheight, qboolean cldead, qboolean clintermission)
+void V_CalcRefdefUsing (const matrix4x4_t *entrendermatrix, const vec3_t clviewangles, qboolean teleported, qboolean clonground, qboolean clcmdjump, float clstatsviewheight, qboolean cldead, qboolean clintermission, const vec3_t clvelocity)
{
float vieworg[3], viewangles[3], smoothtime;
float gunorg[3], gunangles[3];
cl.lastongroundtime = cl.movecmd[0].time;
}
cl.oldonground = clonground;
+ cl.calcrefdef_prevtime = max(cl.calcrefdef_prevtime, cl.oldtime);
VectorClear(gunorg);
viewmodelmatrix_nobob = identitymatrix;
// apply the viewofs (even if chasecam is used)
// Samual: Lets add smoothing for this too so that things like crouching are done with a transition.
- viewheight = bound(0, (cl.time - cl.oldtime) / max(0.0001, cl_smoothviewheight.value), 1);
+ viewheight = bound(0, (cl.time - cl.calcrefdef_prevtime) / max(0.0001, cl_smoothviewheight.value), 1);
viewheightavg = viewheightavg * (1 - viewheight) + clstatsviewheight * viewheight;
vieworg[2] += viewheightavg;
if (cldead && v_deathtilt.integer)
viewangles[ROLL] = v_deathtiltangle.value;
VectorAdd(viewangles, cl.punchangle, viewangles);
- viewangles[ROLL] += V_CalcRoll(clviewangles, cl.velocity);
+ viewangles[ROLL] += V_CalcRoll(clviewangles, clvelocity);
if (v_dmg_time > 0)
{
viewangles[ROLL] += v_dmg_time/v_kicktime.value*v_dmg_roll;
float cycle;
vec_t frametime;
- frametime = (cl.time - cl.oldtime) * cl.movevars_timescale;
+ frametime = (cl.time - cl.calcrefdef_prevtime) * cl.movevars_timescale;
// 1. if we teleported, clear the frametime... the lowpass will recover the previous value then
if(teleported)
VectorAdd(viewangles, gunangles, gunangles);
// bounded XY speed, used by several effects below
- xyspeed = bound (0, sqrt(cl.velocity[0]*cl.velocity[0] + cl.velocity[1]*cl.velocity[1]), 400);
+ xyspeed = bound (0, sqrt(clvelocity[0]*clvelocity[0] + clvelocity[1]*clvelocity[1]), 400);
// vertical view bobbing code
if (cl_bob.value && cl_bobcycle.value)
// calculate the front and side of the player between the X and Y axes
AngleVectors(viewangles, forward, right, up);
// now get the speed based on those angles. The bounds should match the same value as xyspeed's
- side = bound(-400, DotProduct (cl.velocity, right) * cl.bob2_smooth, 400);
- front = bound(-400, DotProduct (cl.velocity, forward) * cl.bob2_smooth, 400);
+ side = bound(-400, DotProduct (clvelocity, right) * cl.bob2_smooth, 400);
+ front = bound(-400, DotProduct (clvelocity, forward) * cl.bob2_smooth, 400);
VectorScale(forward, bob, forward);
VectorScale(right, bob, right);
// we use side with forward and front with right, so the bobbing goes
{
if (!clonground)
{
- cl.bobfall_speed = bound(-400, cl.velocity[2], 0) * bound(0, cl_bobfall.value, 0.1);
- if (cl.velocity[2] < -cl_bobfallminspeed.value)
+ cl.bobfall_speed = bound(-400, clvelocity[2], 0) * bound(0, cl_bobfall.value, 0.1);
+ if (clvelocity[2] < -cl_bobfallminspeed.value)
cl.bobfall_swing = 1;
else
cl.bobfall_swing = 0; // TODO really?
Matrix4x4_Invert_Simple(&tmpmatrix, &r_refdef.view.matrix);
Matrix4x4_Concat(&cl.csqc_viewmodelmatrixfromengine, &tmpmatrix, &viewmodelmatrix_withbob);
}
+
+ cl.calcrefdef_prevtime = cl.time;
}
void V_CalcRefdef (void)
ent = &cl.entities[cl.viewentity];
cldead = (cl.stats[STAT_HEALTH] <= 0 && cl.stats[STAT_HEALTH] != -666 && cl.stats[STAT_HEALTH] != -2342);
- V_CalcRefdefUsing(&ent->render.matrix, cl.viewangles, !ent->persistent.trail_allowed, cl.onground, cl.cmd.jump, cl.stats[STAT_VIEWHEIGHT], cldead, cl.intermission); // FIXME use a better way to detect teleport/warp than trail_allowed
+ V_CalcRefdefUsing(&ent->render.matrix, cl.viewangles, !ent->persistent.trail_allowed, cl.onground, cl.cmd.jump, cl.stats[STAT_VIEWHEIGHT], cldead, cl.intermission != 0, cl.velocity); // FIXME use a better way to detect teleport/warp than trail_allowed
}
else
{