]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/wall.qc
Merge branch 'master' into terencehill/menu_listbox_changes
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / wall.qc
index 807b260ab2131eb57627aa564505898fdf9a50da..92c142435636a8113f973e486f3ec8ec406a084b 100644 (file)
@@ -1,8 +1,55 @@
-.float lip;
-.float bgmscriptangular;
-.float lodmodelindex0, lodmodelindex1, lodmodelindex2;
-.float loddistance1, loddistance2;
-.vector saved;
+#include "wall.qh"
+#include "_all.qh"
+
+#include "bgmscript.qh"
+
+#include "../common/util.qh"
+
+#include "../csqcmodellib/interpolate.qh"
+
+.float alpha;
+.float scale;
+.vector movedir;
+
+void Ent_Wall_PreDraw()
+{
+       if (self.inactive)
+       {
+               self.alpha = 0;
+       }
+       else
+       {
+               vector org = getpropertyvec(VF_ORIGIN);
+               if(!checkpvs(org, self))
+                       self.alpha = 0;
+               else if(self.fade_start || self.fade_end) {
+                       vector offset = '0 0 0';
+                       offset_z = self.fade_vertical_offset;
+                       float player_dist = vlen(org - self.origin - 0.5 * (self.mins + self.maxs) + offset);
+                       if (self.fade_end == self.fade_start)
+                       {
+                               if (player_dist >= self.fade_start)
+                                       self.alpha = 0;
+                               else
+                                       self.alpha = 1;
+                       }
+                       else
+                       {
+                               self.alpha = (self.alpha_min + self.alpha_max * bound(0,
+                                                          (self.fade_end - player_dist)
+                                                          / (self.fade_end - self.fade_start), 1)) / 100.0;
+                       }
+               }
+               else
+               {
+                       self.alpha = 1;
+               }
+       }
+       if(self.alpha <= 0)
+               self.drawmask = 0;
+       else
+               self.drawmask = MASK_NORMAL;
+}
 
 void Ent_Wall_Draw()
 {
@@ -10,9 +57,10 @@ void Ent_Wall_Draw()
        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)
        {
@@ -41,19 +89,16 @@ void Ent_Wall_Draw()
 
        InterpolateOrigin_Do();
 
-       if(self.bgmscriptangular)
-               self.saved = self.angles;
-       else
-               self.saved = self.origin;
+       self.saved = self.(fld);
 
-       f = BGMScript(self);
+       f = doBGMScript(self);
        if(f >= 0)
        {
                if(self.lip < 0) // < 0: alpha goes from 1 to 1-|lip| when toggled (toggling subtracts lip)
                        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 +118,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 +145,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 +189,7 @@ void Ent_Wall()
                }
                else
                        self.mins = self.maxs = '0 0 0';
+               setsize(self, self.mins, self.maxs);
 
                if(self.bgmscript)
                        strunzone(self.bgmscript);
@@ -165,16 +215,20 @@ void Ent_Wall()
                        self.movedir_z = ReadCoord();
                        self.lip = ReadByte() / 255.0;
                }
+               self.fade_start = ReadShort();
+               self.fade_end = ReadShort();
+               self.alpha_max = ReadShort();
+               self.alpha_min = ReadShort();
+               self.inactive = ReadShort();
+               self.fade_vertical_offset = ReadShort();
                BGMScript_InitEntity(self);
        }
 
        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;
+       self.predraw = Ent_Wall_PreDraw;
 }