this.angles = '0 0 0';
set_movetype(this, MOVETYPE_NONE);
this.solid = SOLID_NOT;
- SetBrushEntityModel(this);
+ SetBrushEntityModel(this, true);
if (!this.cnt)
{
this.cnt = 12;
if (!this.count)
this.count = 2000;
// relative to absolute particle count
- this.count = 0.1 * this.count * (this.size_x / 1024) * (this.size_y / 1024);
+ //this.count = 0.1 * this.count * (this.size_x / 1024) * (this.size_y / 1024);
if (this.count < 1)
this.count = 1;
if(this.count > 65535)
this.angles = '0 0 0';
set_movetype(this, MOVETYPE_NONE);
this.solid = SOLID_NOT;
- SetBrushEntityModel(this);
+ SetBrushEntityModel(this, true);
if (!this.cnt)
{
this.cnt = 12;
if (!this.count)
this.count = 2000;
// relative to absolute particle count
- this.count = 0.1 * this.count * (this.size_x / 1024) * (this.size_y / 1024);
+ //this.count = 0.1 * this.count * (this.size_x / 1024) * (this.size_y / 1024);
if (this.count < 1)
this.count = 1;
if(this.count > 65535)
Net_LinkEntity(this, false, 0, rainsnow_SendEntity);
}
#elif defined(CSQC)
-float autocvar_cl_rainsnow_maxdrawdist = 2048;
+float autocvar_cl_rainsnow_maxdrawdist = 1000;
-void Draw_Rain(entity this)
+void Draw_RainSnow(entity this)
{
- vector maxdist = '1 1 0' * autocvar_cl_rainsnow_maxdrawdist;
- maxdist.z = 5;
- if(boxesoverlap(vec2(view_origin) - maxdist, vec2(view_origin) + maxdist, vec2(this.absmin) - '0 0 5', vec2(this.absmax) + '0 0 5'))
- //if(autocvar_cl_rainsnow_maxdrawdist <= 0 || vdist(vec2(this.origin) - vec2(this.absmin + this.absmax * 0.5), <=, autocvar_cl_rainsnow_maxdrawdist))
- te_particlerain(this.origin + this.mins, this.origin + this.maxs, this.velocity, floor(this.count * drawframetime + random()), this.glow_color);
-}
+ vector maxdist = '1 1 1' * autocvar_cl_rainsnow_maxdrawdist;
-void Draw_Snow(entity this)
-{
- vector maxdist = '1 1 0' * autocvar_cl_rainsnow_maxdrawdist;
- maxdist.z = 5;
- if(boxesoverlap(vec2(view_origin) - maxdist, vec2(view_origin) + maxdist, vec2(this.absmin) - '0 0 5', vec2(this.absmax) + '0 0 5'))
- //if(autocvar_cl_rainsnow_maxdrawdist <= 0 || vdist(vec2(this.origin) - vec2(this.absmin + this.absmax * 0.5), <=, autocvar_cl_rainsnow_maxdrawdist))
- te_particlesnow(this.origin + this.mins, this.origin + this.maxs, this.velocity, floor(this.count * drawframetime + random()), this.glow_color);
+ 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_max - effbox_min;
+ float mycount = bound(1, 0.1 * this.count * (mysize.x / 1024) * (mysize.y / 1024), 65535);
+
+ 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(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)
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