X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=cl_main.c;h=420203b4f4e0c641d2fe54887432550e4c1a46d1;hb=e324d619299123c36326aeabb8326dca04ab2df4;hp=b195ddaaf98736e5e12dddbc7135d8395d660216;hpb=78bc602be40cef9331307857d06e711208149eeb;p=xonotic%2Fdarkplaces.git diff --git a/cl_main.c b/cl_main.c index b195ddaa..420203b4 100644 --- a/cl_main.c +++ b/cl_main.c @@ -38,6 +38,7 @@ cvar_t csqc_progsize = {CVAR_READONLY, "csqc_progsize","-1","file size of csprog cvar_t cl_shownet = {0, "cl_shownet","0","1 = print packet size, 2 = print packet message list"}; cvar_t cl_nolerp = {0, "cl_nolerp", "0","network update smoothing"}; +cvar_t cl_lerpexcess = {0, "cl_lerpexcess", "0","maximum allowed lerp excess (hides, not fixes, some packet loss)"}; cvar_t cl_lerpanim_maxdelta_server = {0, "cl_lerpanim_maxdelta_server", "0.1","maximum frame delta for smoothing between server-controlled animation frames (when 0, one network frame)"}; cvar_t cl_lerpanim_maxdelta_framegroups = {0, "cl_lerpanim_maxdelta_framegroups", "0.1","maximum frame delta for smoothing between framegroups (when 0, one network frame)"}; @@ -628,7 +629,7 @@ static float CL_LerpPoint(void) } f = (cl.time - cl.mtime[1]) / (cl.mtime[0] - cl.mtime[1]); - return bound(0, f, 1); + return bound(0, f, 1 + cl_lerpexcess.value); } void CL_ClearTempEntities (void) @@ -907,7 +908,8 @@ void CL_AddQWCTFFlagModel(entity_t *player, int skin) CL_UpdateRenderEntity(flagrender); } -matrix4x4_t viewmodelmatrix; +matrix4x4_t viewmodelmatrix_withbob; +matrix4x4_t viewmodelmatrix_nobob; static const vec3_t muzzleflashorigin = {18, 0, 0}; @@ -1010,9 +1012,9 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat { // view-relative entity (guns and such) if (e->render.effects & EF_NOGUNBOB) - matrix = &r_refdef.view.matrix; // really attached to view + matrix = &viewmodelmatrix_nobob; // really attached to view else - matrix = &viewmodelmatrix; // attached to gun bob matrix + matrix = &viewmodelmatrix_withbob; // attached to gun bob matrix } else { @@ -1033,7 +1035,7 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat VectorCopy(cl.movement_origin, origin); VectorSet(angles, 0, cl.viewangles[1], 0); } - else if (interpolate && e->persistent.lerpdeltatime > 0 && (lerp = (cl.time - e->persistent.lerpstarttime) / e->persistent.lerpdeltatime) < 1) + else if (interpolate && e->persistent.lerpdeltatime > 0 && (lerp = (cl.time - e->persistent.lerpstarttime) / e->persistent.lerpdeltatime) < 1 + cl_lerpexcess.value) { // interpolate the origin and angles lerp = max(0, lerp); @@ -1098,7 +1100,17 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat } // animation lerp - if (e->render.framegroupblend[0].frame == frame) + e->render.skeleton = NULL; + if (e->render.flags & RENDER_COMPLEXANIMATION) + { + e->render.framegroupblend[0] = e->state_current.framegroupblend[0]; + e->render.framegroupblend[1] = e->state_current.framegroupblend[1]; + e->render.framegroupblend[2] = e->state_current.framegroupblend[2]; + e->render.framegroupblend[3] = e->state_current.framegroupblend[3]; + if (e->state_current.skeletonobject.model && e->state_current.skeletonobject.relativetransforms) + e->render.skeleton = &e->state_current.skeletonobject; + } + else if (e->render.framegroupblend[0].frame == frame) { // update frame lerp fraction e->render.framegroupblend[0].lerp = 1; @@ -1249,6 +1261,8 @@ void CL_UpdateNetworkEntityTrail(entity_t *e) // do trails if (e->render.flags & RENDER_GLOWTRAIL) trailtype = EFFECT_TR_GLOWTRAIL; + if (e->state_current.traileffectnum) + trailtype = (effectnameindex_t)e->state_current.traileffectnum; // check if a trail is allowed (it is not after a teleport for example) if (trailtype && e->persistent.trail_allowed) { @@ -1546,6 +1560,8 @@ void CL_LinkNetworkEntity(entity_t *e) // do trail light if (e->render.flags & RENDER_GLOWTRAIL) trailtype = EFFECT_TR_GLOWTRAIL; + if (e->state_current.traileffectnum) + trailtype = (effectnameindex_t)e->state_current.traileffectnum; if (trailtype) CL_ParticleTrail(trailtype, 1, origin, origin, vec3_origin, vec3_origin, NULL, e->state_current.glowcolor, true, false, NULL, NULL); @@ -2404,6 +2420,7 @@ void CL_Init (void) Cvar_RegisterVariable (&cl_anglespeedkey); Cvar_RegisterVariable (&cl_shownet); Cvar_RegisterVariable (&cl_nolerp); + Cvar_RegisterVariable (&cl_lerpexcess); Cvar_RegisterVariable (&cl_lerpanim_maxdelta_server); Cvar_RegisterVariable (&cl_lerpanim_maxdelta_framegroups); Cvar_RegisterVariable (&cl_deathfade);