#include "nades.qh"
#ifdef CSQC
+#include <client/view.qh>
+
.float ltime;
void orb_draw(entity this)
{
this.angles = this.angles + dt * this.avelocity;
}
+float orb_drawtime; // global storage of last drawn orb frame, to counter overlapping orbs
+void orb_draw2d(entity this)
+{
+ if(time <= orb_drawtime)
+ return;
+
+ if(boxesoverlap(view_origin - '1 1 1', view_origin + '1 1 1', this.absmin, this.absmax))
+ {
+ orb_drawtime = time; // prevent rendering more than one of these per frame!
+ float orb_alpha = 0.65 * (this.ltime - time) / this.orb_lifetime;
+ drawfill('0 0 0', vec2(vid_conwidth, vid_conheight), this.colormod, autocvar_hud_colorflash_alpha * orb_alpha, DRAWFLAG_ADDITIVE);
+ }
+}
+
void orb_setup(entity e)
{
setmodel(e, MDL_NADE_ORB);
e.orb_radius = e.orb_radius/model_radius*0.6;
e.draw = orb_draw;
+ e.draw2d = orb_draw2d;
IL_PUSH(g_drawables, e);
- e.health = 255;
+ IL_PUSH(g_drawables_2d, e);
+ SetResourceExplicit(e, RES_HEALTH, 255);
set_movetype(e, MOVETYPE_NONE);
e.solid = SOLID_NOT;
e.drawmask = MASK_NORMAL;
Net_Accept(Nade_Orb);
int sf = ReadByte();
if (sf & 1) {
- this.origin_x = ReadCoord();
- this.origin_y = ReadCoord();
- this.origin_z = ReadCoord();
+ this.origin = ReadVector();
setorigin(this, this.origin);
- this.colormod_x = ReadCoord();
- this.colormod_y = ReadCoord();
- this.colormod_z = ReadCoord();
+ this.colormod = ReadVector();
this.orb_lifetime = ReadByte();
this.orb_radius = ReadShort();
this.ltime = time + ReadByte()/10.0;
WriteHeader(channel, Nade_Orb);
WriteByte(channel, sf);
if (sf & 1) {
- WriteCoord(channel, this.origin.x);
- WriteCoord(channel, this.origin.y);
- WriteCoord(channel, this.origin.z);
+ WriteVector(channel, this.origin);
- WriteCoord(channel, this.colormod.x);
- WriteCoord(channel, this.colormod.y);
- WriteCoord(channel, this.colormod.z);
+ WriteVector(channel, this.colormod);
WriteByte(channel, this.orb_lifetime);
//WriteByte(MSG_ENTITY, this.ltime - time + 1);