]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_main.c
simplified dlight fading code
[xonotic/darkplaces.git] / cl_main.c
index 547045307769442e510866a76fab273d2b8876dd..18503b6ee6de09c68af24a314daf22159c414b22 100644 (file)
--- a/cl_main.c
+++ b/cl_main.c
@@ -456,22 +456,9 @@ void CL_DecayLights(void)
        float time;
 
        time = cl.time - cl.oldtime;
-
-       dl = cl_dlights;
-       for (i=0 ; i<MAX_DLIGHTS ; i++, dl++)
-       {
-               if (!dl->radius)
-                       continue;
-               if (dl->die < cl.time)
-               {
-                       dl->radius = 0;
-                       continue;
-               }
-
-               dl->radius -= time*dl->decay;
-               if (dl->radius < 0)
-                       dl->radius = 0;
-       }
+       for (i = 0, dl = cl_dlights;i < MAX_DLIGHTS;i++, dl++)
+               if (dl->radius)
+                       dl->radius = (cl.time < dl->die) ? max(0, dl->radius - time * dl->decay) : 0;
 }
 
 extern qboolean Nehahrademcompatibility;
@@ -532,7 +519,6 @@ void CL_LinkNetworkEntity(entity_t *e)
                        if (e->state_current.tagentity && e->state_current.tagindex >= 1 && (model = t->render.model) && e->state_current.tagindex <= t->render.model->alias.aliasnum_tags)
                        {
                                // blend the matrices
-                               R_LerpAnimation(&t->render);
                                memset(&blendmatrix, 0, sizeof(blendmatrix));
                                for (j = 0;j < 4 && t->render.frameblend[j].lerp > 0;j++)
                                {
@@ -582,7 +568,17 @@ void CL_LinkNetworkEntity(entity_t *e)
                                VectorCopy(e->persistent.newangles, angles);
                        }
                        // animation lerp
-                       if (e->render.frame2 != e->state_current.frame)
+                       if (e->render.frame2 == e->state_current.frame)
+                       {
+                               // update frame lerp fraction
+                               e->render.framelerp = 1;
+                               if (e->render.frame2time > e->render.frame1time)
+                               {
+                                       e->render.framelerp = (cl.time - e->render.frame2time) / (e->render.frame2time - e->render.frame1time);
+                                       e->render.framelerp = bound(0, e->render.framelerp, 1);
+                               }
+                       }
+                       else
                        {
                                // begin a new frame lerp
                                e->render.frame1 = e->render.frame2;
@@ -591,12 +587,6 @@ void CL_LinkNetworkEntity(entity_t *e)
                                e->render.frame2time = cl.time;
                                e->render.framelerp = 0;
                        }
-                       else
-                       {
-                               // update frame lerp fraction
-                               e->render.framelerp = e->render.frame2time > e->render.frame1time ? ((cl.time - e->render.frame2time) / (e->render.frame2time - e->render.frame1time)) : 1;
-                               e->render.framelerp = bound(0, e->render.framelerp, 1);
-                       }
                }
                else
                {
@@ -622,6 +612,8 @@ void CL_LinkNetworkEntity(entity_t *e)
                        }
                }
 
+               R_LerpAnimation(&e->render);
+
                // FIXME: e->render.scale should go away
                Matrix4x4_CreateFromQuakeEntity(&matrix2, origin[0], origin[1], origin[2], angles[0], angles[1], angles[2], e->render.scale);
                // concat the matrices to make the entity relative to its tag