DP_CSQC_BOXPARTICLES use :P for fading out particle trails
authorRudolf Polzer <divverent@alientrap.org>
Wed, 12 May 2010 07:58:21 +0000 (09:58 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Wed, 12 May 2010 07:58:46 +0000 (09:58 +0200)
qcsrc/client/csqc_builtins.qc
qcsrc/client/projectile.qc

index c108a4c..83955df 100644 (file)
@@ -310,3 +310,9 @@ float log(float f) = #532;
 void(entity e, entity ignore) tracetoss = #64;
 
 float(entity e, float ch) getsoundtime = #533; // (DP_SND_GETSOUNDTIME)
+
+#define PARTICLES_USEALPHA 1
+float particles_alphamin, particles_alphamax;
+#define PARTICLES_USECOLOR 2
+vector particles_colormin, particles_colormax;
+void(float effectindex, entity own, vector org_from, vector org_to, vector dir_from, vector dir_to, float countmultiplier, float flags)        boxparticles = #502;
index 6160cb3..b67cc76 100644 (file)
@@ -37,7 +37,22 @@ void Projectile_DrawTrail(vector to)
                        from_z += 1;
 
        if (self.traileffect)
-               trailparticles(self, self.traileffect, from, to);
+       {
+               if(checkextension("DP_CSQC_BOXPARTICLES"))
+               {
+                       /* looks good, but we can do better with particle count
+                       particles_alphamin = particles_alphamax = self.alpha;
+                       boxparticles(self.traileffect, self, from, to, self.velocity, self.velocity, 1, PARTICLES_USEALPHA);
+                       */
+                       /* looks bad
+                       boxparticles(self.traileffect, self, from, to, self.velocity, self.velocity, self.alpha, 0);
+                       */
+                       particles_alphamin = particles_alphamax = sqrt(self.alpha);
+                       boxparticles(self.traileffect, self, from, to, self.velocity, self.velocity, sqrt(self.alpha), PARTICLES_USEALPHA);
+               }
+               else
+                       trailparticles(self, self.traileffect, from, to);
+       }
 }
 
 void Projectile_Draw()
@@ -102,8 +117,10 @@ void Projectile_Draw()
        makevectors(ang);
 
        a = 1 - (time - self.fade_time) * self.fade_rate;
-       if(a <= 0)
+       self.alpha = bound(0, self.alphamod * a, 1);
+       if(self.alpha <= 0)
                drawn = 0;
+       self.renderflags = 0;
 
        trailorigin = self.origin;
        switch(self.cnt)
@@ -136,9 +153,6 @@ void Projectile_Draw()
                        break;
        }
 
-       self.alpha = self.alphamod * a;
-       self.renderflags = 0;
-
        R_AddEntity(self);
 }