]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/warpzonelib/client.qc
don't transform if the zone is faded out clearly (to reduce network entities)
[xonotic/xonotic-data.pk3dir.git] / qcsrc / warpzonelib / client.qc
index 1dbe824d6629929a90d053e2d9e8b71abea64160..725f84ffbd24a8f09150431c7aa44e1c2f2860d2 100644 (file)
@@ -1,5 +1,21 @@
+void WarpZone_Fade_PreDraw()
+{
+       if(self.warpzone_fadestart)
+               self.alpha = bound(0, (self.warpzone_fadeend - vlen(view_origin - self.origin - 0.5 * (self.mins + self.maxs))) / (self.warpzone_fadeend - self.warpzone_fadestart), 1);
+       else
+               self.alpha = 1;
+       //print(sprintf("%v <-> %v\n", view_origin, self.origin + 0.5 * (self.mins + self.maxs)));
+       if(self.alpha <= 0)
+               self.drawmask = 0;
+       else
+               self.drawmask = MASK_NORMAL;
+}
+
 void WarpZone_Read(float isnew)
 {
+       float f;
+
+       ++warpzone_warpzones_exist;
        if not(self.enemy)
        {
                self.enemy = spawn();
@@ -7,10 +23,16 @@ void WarpZone_Read(float isnew)
        }
        self.classname = "trigger_warpzone";
 
-       self.warpzone_isboxy = ReadByte();
-       self.origin_x = ReadCoord();
-       self.origin_y = ReadCoord();
-       self.origin_z = ReadCoord();
+       f = ReadByte();
+       self.warpzone_isboxy = (f & 1);
+       if(f & 4)
+       {
+               self.origin_x = ReadCoord();
+               self.origin_y = ReadCoord();
+               self.origin_z = ReadCoord();
+       }
+       else
+               self.origin = '0 0 0';
        self.modelindex = ReadShort();
        self.mins_x = ReadCoord();
        self.mins_y = ReadCoord();
@@ -32,24 +54,48 @@ void WarpZone_Read(float isnew)
        self.avelocity_y = ReadCoord();
        self.avelocity_z = ReadCoord();
 
+       if(f & 2)
+       {
+               self.warpzone_fadestart = ReadShort();
+               self.warpzone_fadeend = max(self.warpzone_fadestart + 1, ReadShort());
+       }
+       else
+       {
+               self.warpzone_fadestart = 0;
+               self.warpzone_fadeend = 0;
+       }
+
        // common stuff
        WarpZone_SetUp(self, self.enemy.oldorigin, self.enemy.avelocity, self.oldorigin, self.avelocity);
 
-       // engine currently wants this
-       self.drawmask = MASK_NORMAL;
-
        // link me
        //setmodel(self, self.model);
        setorigin(self, self.origin);
        setsize(self, self.mins, self.maxs);
+
+       // how to draw
+       // engine currently wants this
+       if(self.warpzone_fadestart)
+               self.predraw = WarpZone_Fade_PreDraw;
+       else
+               self.drawmask = MASK_NORMAL;
 }
 
 void WarpZone_Camera_Read(float isnew)
 {
+       float f;
+       ++warpzone_cameras_exist;
        self.classname = "func_warpzone_camera";
-       self.origin_x = ReadCoord();
-       self.origin_y = ReadCoord();
-       self.origin_z = ReadCoord();
+
+       f = ReadByte();
+       if(f & 4)
+       {
+               self.origin_x = ReadCoord();
+               self.origin_y = ReadCoord();
+               self.origin_z = ReadCoord();
+       }
+       else
+               self.origin = '0 0 0';
        self.modelindex = ReadShort();
        self.mins_x = ReadCoord();
        self.mins_y = ReadCoord();
@@ -65,6 +111,17 @@ void WarpZone_Camera_Read(float isnew)
        self.avelocity_y = ReadCoord();
        self.avelocity_z = ReadCoord();
 
+       if(f & 2)
+       {
+               self.warpzone_fadestart = ReadShort();
+               self.warpzone_fadeend = max(self.warpzone_fadestart + 1, ReadShort());
+       }
+       else
+       {
+               self.warpzone_fadestart = 0;
+               self.warpzone_fadeend = 0;
+       }
+
        // common stuff
        WarpZone_Camera_SetUp(self, self.oldorigin, self.avelocity);
 
@@ -75,6 +132,13 @@ void WarpZone_Camera_Read(float isnew)
        //setmodel(self, self.model);
        setorigin(self, self.origin);
        setsize(self, self.mins, self.maxs);
+
+       // how to draw
+       // engine currently wants this
+       if(self.warpzone_fadestart)
+               self.predraw = WarpZone_Fade_PreDraw;
+       else
+               self.drawmask = MASK_NORMAL;
 }
 
 float warpzone_fixingview;