]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/wall.qc
Create common client header
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / wall.qc
index f53c60f0c3e1a89fdd1b000956f4e53eaa2ef8ee..090dda58ee8962836bfe174eda81537d05c76fb0 100644 (file)
@@ -1,50 +1,55 @@
-.float lip;
-.float bgmscriptangular;
-.float lodmodelindex0, lodmodelindex1, lodmodelindex2;
-.float loddistance1, loddistance2;
-.vector saved;
+#include "wall.qh"
+#include "_.qh"
+
+#include "bgmscript.qh"
+
+#include "../common/util.qh"
+
+#include "../csqcmodellib/interpolate.qh"
+
+.float alpha;
+.float scale;
+.vector movedir;
 
 void Ent_Wall_Draw()
 {
        float f;
-       float d;
        var .vector fld;
 
        if(self.bgmscriptangular)
-               self.angles = self.saved;
+               fld = angles;
        else
-               self.origin = self.saved;
+               fld = origin;
+       self.(fld) = self.saved;
 
        if(self.lodmodelindex1)
        {
-               d = cvar("loddebug");
-               if(d > 0)
+               if(autocvar_cl_modeldetailreduction <= 0)
                {
-                       if(d == 1)
-                               self.modelindex = self.lodmodelindex0;
-                       else if(d == 2 || !self.lodmodelindex2)
-                               self.modelindex = self.lodmodelindex1;
-                       else // if(d == 3)
+                       if(self.lodmodelindex2 && autocvar_cl_modeldetailreduction <= -2)
                                self.modelindex = self.lodmodelindex2;
+                       else if(autocvar_cl_modeldetailreduction <= -1)
+                               self.modelindex = self.lodmodelindex1;
+                       else
+                               self.modelindex = self.lodmodelindex0;
                }
                else
                {
-                       d = vlen(NearestPointOnBox(self, view_origin) - view_origin);
-                       if(d < self.loddistance1)
-                               self.modelindex = self.lodmodelindex0;
-                       else if(!self.lodmodelindex2 || d < self.loddistance2)
+                       float distance = vlen(NearestPointOnBox(self, view_origin) - view_origin);
+                       f = (distance * current_viewzoom + 100.0) * autocvar_cl_modeldetailreduction;
+                       f *= 1.0 / bound(0.01, view_quality, 1);
+                       if(self.lodmodelindex2 && f > self.loddistance2)
+                               self.modelindex = self.lodmodelindex2;
+                       else if(f > self.loddistance1)
                                self.modelindex = self.lodmodelindex1;
                        else
-                               self.modelindex = self.lodmodelindex2;
+                               self.modelindex = self.lodmodelindex0;
                }
        }
 
        InterpolateOrigin_Do();
 
-       if(self.bgmscriptangular)
-               self.saved = self.angles;
-       else
-               self.saved = self.origin;
+       self.saved = self.(fld);
 
        f = BGMScript(self);
        if(f >= 0)
@@ -53,7 +58,7 @@ void Ent_Wall_Draw()
                        self.alpha = 1 + self.lip * f;
                else // > 0: alpha goes from 1-|lip| to 1 when toggled (toggling adds lip)
                        self.alpha = 1 - self.lip * (1 - f);
-               self.fld = self.fld + self.movedir * f;
+               self.(fld) = self.(fld) + self.movedir * f;
        }
        else
                self.alpha = 1;
@@ -73,14 +78,17 @@ void Ent_Wall_Remove()
 
 void Ent_Wall()
 {
-       float f;
+       int f;
+       var .vector fld;
+
        InterpolateOrigin_Undo();
-       self.iflags = IFLAG_ANGLES;
+       self.iflags = IFLAG_ANGLES | IFLAG_ORIGIN;
 
        if(self.bgmscriptangular)
-               self.angles = self.saved;
+               fld = angles;
        else
-               self.origin = self.saved;
+               fld = origin;
+       self.(fld) = self.saved;
 
        f = ReadByte();
 
@@ -97,6 +105,7 @@ void Ent_Wall()
                self.origin_x = ReadCoord();
                self.origin_y = ReadCoord();
                self.origin_z = ReadCoord();
+               setorigin(self, self.origin);
        }
 
        if(f & 4)
@@ -140,6 +149,7 @@ void Ent_Wall()
                }
                else
                        self.mins = self.maxs = '0 0 0';
+               setsize(self, self.mins, self.maxs);
 
                if(self.bgmscript)
                        strunzone(self.bgmscript);
@@ -170,10 +180,7 @@ void Ent_Wall()
 
        InterpolateOrigin_Note();
 
-       if(self.bgmscriptangular)
-               self.saved = self.angles;
-       else
-               self.saved = self.origin;
+       self.saved = self.(fld);
 
        self.entremove = Ent_Wall_Remove;
        self.draw = Ent_Wall_Draw;