Fix rainsnow logic, thanks to Player_2
authorMario <mario.mario@y7mail.com>
Sun, 19 Jan 2020 00:07:53 +0000 (10:07 +1000)
committerMario <mario.mario@y7mail.com>
Sun, 19 Jan 2020 00:07:53 +0000 (10:07 +1000)
qcsrc/common/mapobjects/func/rainsnow.qc
xonotic-client.cfg

index 12dd6d2..4e8df8c 100644 (file)
@@ -95,38 +95,25 @@ spawnfunc(func_snow)
        Net_LinkEntity(this, false, 0, rainsnow_SendEntity);
 }
 #elif defined(CSQC)
-float autocvar_cl_rainsnow_maxdrawdist = 2048;
+float autocvar_cl_rainsnow_maxdrawdist = 500;
 
-void Draw_Rain(entity this)
+void Draw_RainSnow(entity this)
 {
        vector maxdist = '1 1 1' * autocvar_cl_rainsnow_maxdrawdist;
 
        vector effbox_min = vec_to_max(view_origin - maxdist, this.origin + this.mins);
        vector effbox_max = vec_to_min(view_origin + maxdist, this.origin + this.maxs);
 
-       vector mysize = effbox_min + effbox_max;
+       vector mysize = effbox_max - effbox_min;
        float mycount = bound(1, 0.1 * this.count * (mysize.x / 1024) * (mysize.y / 1024), 65535);
-       //LOG_INFO(ftos(mycount));
 
        if(boxesoverlap(view_origin - maxdist, view_origin + maxdist, this.absmin, this.absmax)) // optimisation: don't render any rain if the player is outside the view distance
-       //if(autocvar_cl_rainsnow_maxdrawdist <= 0 || vdist(vec2(this.origin) - vec2(this.absmin + this.absmax * 0.5), <=, autocvar_cl_rainsnow_maxdrawdist))
-       te_particlerain(effbox_min, effbox_max, this.velocity, floor(mycount * drawframetime + random()), this.glow_color);
-}
-
-void Draw_Snow(entity this)
-{
-       vector maxdist = '1 1 1' * autocvar_cl_rainsnow_maxdrawdist;
-
-       vector effbox_min = vec_to_max(view_origin - maxdist, this.origin + this.mins);
-       vector effbox_max = vec_to_min(view_origin + maxdist, this.origin + this.maxs);
-
-       vector mysize = effbox_min + effbox_max;
-       float mycount = bound(1, 0.1 * this.count * (mysize.x / 1024) * (mysize.y / 1024), 65535);
-       //LOG_INFO(ftos(mycount));
-
-       if(boxesoverlap(view_origin - maxdist, view_origin + maxdist, this.absmin, this.absmax))
-       //if(autocvar_cl_rainsnow_maxdrawdist <= 0 || vdist(vec2(this.origin) - vec2(this.absmin + this.absmax * 0.5), <=, autocvar_cl_rainsnow_maxdrawdist))
-       te_particlesnow(effbox_min, effbox_max, this.velocity, floor(mycount * drawframetime + random()), this.glow_color);
+       {
+               if(this.state == RAINSNOW_RAIN)
+               te_particlerain(effbox_min, effbox_max, this.velocity, floor(mycount * drawframetime + random()), this.glow_color);
+       else
+               te_particlesnow(effbox_min, effbox_max, this.velocity, floor(mycount * drawframetime + random()), this.glow_color);
+       }
 }
 
 NET_HANDLE(ENT_CLIENT_RAINSNOW, bool isnew)
@@ -148,9 +135,6 @@ NET_HANDLE(ENT_CLIENT_RAINSNOW, bool isnew)
        setsize(this, this.mins, this.maxs);
        this.solid = SOLID_NOT;
        if (isnew) IL_PUSH(g_drawables, this);
-       if(this.state == RAINSNOW_RAIN)
-               this.draw = Draw_Rain;
-       else
-               this.draw = Draw_Snow;
+       this.draw = Draw_RainSnow;
 }
 #endif
index 786a69a..59bb372 100644 (file)
@@ -801,7 +801,7 @@ r_fullbright_directed 1
 r_water_hideplayer 1 // hide your own feet/player model in refraction views, this way you don't see half of your body under water
 r_water_refractdistort 0.003
 
-set cl_rainsnow_maxdrawdist 2048
+set cl_rainsnow_maxdrawdist 500
 
 // safe font defaults
 r_font_hinting 1