X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2Fwall.qc;h=f17b54a5caa7bf0f877593c1cd1a811d148fcb46;hp=211af4cb0889593380acdfa9785149ae76a5d52d;hb=9ae63d858415772fdb60bd549758825103c0ba17;hpb=4779c1bd8269aaca0d20e802c7e8e685602bb926 diff --git a/qcsrc/client/wall.qc b/qcsrc/client/wall.qc index 211af4cb08..f17b54a5ca 100644 --- a/qcsrc/client/wall.qc +++ b/qcsrc/client/wall.qc @@ -1,10 +1,57 @@ -.float lip; -.float bgmscriptangular; -.float lodmodelindex0, lodmodelindex1, lodmodelindex2; -.float loddistance1, loddistance2; -.vector saved; +#include "wall.qh" +#include "_all.qh" -void Ent_Wall_Draw() +#include "bgmscript.qh" + +#include "../common/util.qh" + +#include "../csqcmodellib/interpolate.qh" + +.float alpha; +.float scale; +.vector movedir; + +void Ent_Wall_PreDraw() +{SELFPARAM(); + if (self.inactive) + { + self.alpha = 0; + } + else + { + vector org = getpropertyvec(VF_ORIGIN); + if(!checkpvs(org, self)) + self.alpha = 0; + else if(self.fade_start || self.fade_end) { + vector offset = '0 0 0'; + offset_z = self.fade_vertical_offset; + float player_dist = vlen(org - self.origin - 0.5 * (self.mins + self.maxs) + offset); + if (self.fade_end == self.fade_start) + { + if (player_dist >= self.fade_start) + self.alpha = 0; + else + self.alpha = 1; + } + else + { + self.alpha = (self.alpha_min + self.alpha_max * bound(0, + (self.fade_end - player_dist) + / (self.fade_end - self.fade_start), 1)) / 100.0; + } + } + else + { + self.alpha = 1; + } + } + if(self.alpha <= 0) + self.drawmask = 0; + else + self.drawmask = MASK_NORMAL; +} + +void Ent_Wall_Draw(entity this) { float f; var .vector fld; @@ -13,7 +60,7 @@ void Ent_Wall_Draw() fld = angles; else fld = origin; - self.fld = self.saved; + self.(fld) = self.saved; if(self.lodmodelindex1) { @@ -42,16 +89,16 @@ void Ent_Wall_Draw() InterpolateOrigin_Do(); - self.saved = self.fld; + self.saved = self.(fld); - f = BGMScript(self); + f = doBGMScript(self); if(f >= 0) { if(self.lip < 0) // < 0: alpha goes from 1 to 1-|lip| when toggled (toggling subtracts lip) 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; @@ -63,15 +110,15 @@ void Ent_Wall_Draw() } void Ent_Wall_Remove() -{ +{SELFPARAM(); if(self.bgmscript) strunzone(self.bgmscript); self.bgmscript = string_null; } void Ent_Wall() -{ - float f; +{SELFPARAM(); + int f; var .vector fld; InterpolateOrigin_Undo(); @@ -81,7 +128,7 @@ void Ent_Wall() fld = angles; else fld = origin; - self.fld = self.saved; + self.(fld) = self.saved; f = ReadByte(); @@ -168,13 +215,20 @@ void Ent_Wall() self.movedir_z = ReadCoord(); self.lip = ReadByte() / 255.0; } + self.fade_start = ReadShort(); + self.fade_end = ReadShort(); + self.alpha_max = ReadShort(); + self.alpha_min = ReadShort(); + self.inactive = ReadShort(); + self.fade_vertical_offset = ReadShort(); BGMScript_InitEntity(self); } InterpolateOrigin_Note(); - self.saved = self.fld; + self.saved = self.(fld); self.entremove = Ent_Wall_Remove; self.draw = Ent_Wall_Draw; + self.predraw = Ent_Wall_PreDraw; }