]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_main.c
fix USE_WSPIAPI_H
[xonotic/darkplaces.git] / cl_main.c
index af8c3103a53c1858cfef06dfbdd2ef12ab3decab..5e31b36841e3cafa74a5ddbe818f685764ea4271 100644 (file)
--- a/cl_main.c
+++ b/cl_main.c
@@ -764,6 +764,14 @@ void CL_RelinkLightFlashes(void)
                        r_refdef.scene.lightstylevalue[j] = 256;
                        continue;
                }
+               // static lightstyle "=value"
+               if (cl.lightstyle[j].map[0] == '=')
+               {
+                       r_refdef.scene.rtlightstylevalue[j] = atof(cl.lightstyle[j].map + 1);
+                       if ( r_lerplightstyles.integer || ((int)f - f) < 0.01)
+                               r_refdef.scene.lightstylevalue[j] = r_refdef.scene.rtlightstylevalue[j];
+                       continue;
+               }
                k = i % cl.lightstyle[j].length;
                l = (i-1) % cl.lightstyle[j].length;
                k = cl.lightstyle[j].map[k] - 'a';
@@ -864,7 +872,7 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat
        const matrix4x4_t *matrix;
        matrix4x4_t blendmatrix, tempmatrix, matrix2;
        int j, k, l, frame;
-       float origin[3], angles[3], delta[3], lerp, d;
+       float origin[3], angles[3], lerp, d;
        entity_t *t;
        dp_model_t *model;
        //entity_persistent_t *p = &e->persistent;
@@ -960,11 +968,23 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat
                // interpolate the origin and angles
                lerp = max(0, lerp);
                VectorLerp(e->persistent.oldorigin, lerp, e->persistent.neworigin, origin);
+#if 0
+               // this fails at the singularity of euler angles
                VectorSubtract(e->persistent.newangles, e->persistent.oldangles, delta);
                if (delta[0] < -180) delta[0] += 360;else if (delta[0] >= 180) delta[0] -= 360;
                if (delta[1] < -180) delta[1] += 360;else if (delta[1] >= 180) delta[1] -= 360;
                if (delta[2] < -180) delta[2] += 360;else if (delta[2] >= 180) delta[2] -= 360;
                VectorMA(e->persistent.oldangles, lerp, delta, angles);
+#else
+               {
+                       vec3_t f0, u0, f1, u1;
+                       AngleVectors(e->persistent.oldangles, f0, NULL, u0);
+                       AngleVectors(e->persistent.newangles, f1, NULL, u1);
+                       VectorMAM(1-lerp, f0, lerp, f1, f0);
+                       VectorMAM(1-lerp, u0, lerp, u1, u0);
+                       AnglesFromVectors(angles, f0, u0, false);
+               }
+#endif
        }
        else
        {
@@ -1001,6 +1021,7 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat
        // if model is alias or this is a tenebrae-like dlight, reverse pitch direction
        else if (e->state_current.lightpflags & PFLAGS_FULLDYNAMIC)
                angles[0] = -angles[0];
+               // NOTE: this must be synced to SV_GetPitchSign!
 
        if ((e->render.effects & EF_ROTATE) && !(e->render.flags & RENDER_VIEWMODEL))
        {