-.float lip;
-.float bgmscriptangular;
-.float lodmodelindex0, lodmodelindex1, lodmodelindex2;
-.float loddistance1, loddistance2;
-.vector saved;
+#include "wall.qh"
+#include "_.qh"
+
+#include "bgmscript.qh"
+
+#include "../common/util.qh"
+
+#include "../csqcmodellib/interpolate.qh"
+
+.float alpha;
+.float scale;
+.vector movedir;
void Ent_Wall_Draw()
{
float f;
- float d;
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)
{
- d = cvar("loddebug");
- if(d > 0)
+ if(autocvar_cl_modeldetailreduction <= 0)
{
- if(d == 1)
- self.modelindex = self.lodmodelindex0;
- else if(d == 2 || !self.lodmodelindex2)
- self.modelindex = self.lodmodelindex1;
- else // if(d == 3)
+ if(self.lodmodelindex2 && autocvar_cl_modeldetailreduction <= -2)
self.modelindex = self.lodmodelindex2;
+ else if(autocvar_cl_modeldetailreduction <= -1)
+ self.modelindex = self.lodmodelindex1;
+ else
+ self.modelindex = self.lodmodelindex0;
}
else
{
- d = vlen(NearestPointOnBox(self, view_origin) - view_origin);
- if(d < self.loddistance1)
- self.modelindex = self.lodmodelindex0;
- else if(!self.lodmodelindex2 || d < self.loddistance2)
+ float distance = vlen(NearestPointOnBox(self, view_origin) - view_origin);
+ f = (distance * current_viewzoom + 100.0) * autocvar_cl_modeldetailreduction;
+ f *= 1.0 / bound(0.01, view_quality, 1);
+ if(self.lodmodelindex2 && f > self.loddistance2)
+ self.modelindex = self.lodmodelindex2;
+ else if(f > self.loddistance1)
self.modelindex = self.lodmodelindex1;
else
- self.modelindex = self.lodmodelindex2;
+ self.modelindex = self.lodmodelindex0;
}
}
InterpolateOrigin_Do();
- if(self.bgmscriptangular)
- self.saved = self.angles;
- else
- self.saved = self.origin;
+ self.saved = self.(fld);
f = BGMScript(self);
if(f >= 0)
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;
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();
self.origin_x = ReadCoord();
self.origin_y = ReadCoord();
self.origin_z = ReadCoord();
+ setorigin(self, self.origin);
}
if(f & 4)
}
else
self.mins = self.maxs = '0 0 0';
+ setsize(self, self.mins, self.maxs);
if(self.bgmscript)
strunzone(self.bgmscript);
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;