-float waypointsprite_initialized;
-float waypointsprite_fadedistance;
-float waypointsprite_normdistance;
-float waypointsprite_minscale;
-float waypointsprite_minalpha;
-float waypointsprite_distancealphaexponent;
-float waypointsprite_timealphaexponent;
-float waypointsprite_scale;
-float waypointsprite_fontsize;
-float waypointsprite_edgefadealpha;
-float waypointsprite_edgefadescale;
-float waypointsprite_edgefadedistance;
-float waypointsprite_edgeoffset_bottom;
-float waypointsprite_edgeoffset_left;
-float waypointsprite_edgeoffset_right;
-float waypointsprite_edgeoffset_top;
-float waypointsprite_crosshairfadealpha;
-float waypointsprite_crosshairfadescale;
-float waypointsprite_crosshairfadedistance;
-float waypointsprite_distancefadealpha;
-float waypointsprite_distancefadescale;
-float waypointsprite_distancefadedistance;
-float waypointsprite_alpha;
-
-.float helpme;
-.float rule;
-.string netname; // primary picture
-.string netname2; // secondary picture
-.string netname3; // tertiary picture
-.float team; // team that gets netname2
-.float lifetime;
-.float fadetime;
-.float maxdistance;
-.float hideflags;
-.float spawntime;
-.float health;
-.float build_started;
-.float build_starthealth;
-.float build_finished;
-
-const float SPRITE_HEALTHBAR_WIDTH = 144;
-const float SPRITE_HEALTHBAR_HEIGHT = 9;
-const float SPRITE_HEALTHBAR_MARGIN = 6;
-const float SPRITE_HEALTHBAR_BORDER = 2;
-const float SPRITE_HEALTHBAR_BORDERALPHA = 1;
-const float SPRITE_HEALTHBAR_HEALTHALPHA = 0.5;
-const float SPRITE_ARROW_SCALE = 1.0;
-const float SPRITE_HELPME_BLINK = 2;
+#include "waypointsprites.qh"
+#include "_all.qh"
+
+#include "hud.qh"
+#include "teamradar.qh"
+
+#include "../common/buffs.qh"
+#include "../common/constants.qh"
+#include "../common/teams.qh"
+
+#include "../common/weapons/weapons.qh"
+
+#include "../csqcmodellib/interpolate.qh"
+
+#include "../warpzonelib/mathlib.qh"
+
+.float alpha;
void drawrotpic(vector org, float rot, string pic, vector sz, vector hotspot, vector rgb, float a, float f)
{
// hotspot-relative coordinates of the corners
v1 = hotspot;
- v2 = hotspot + '1 0 0' * sz_x;
- v3 = hotspot + '1 0 0' * sz_x + '0 1 0' * sz_y;
- v4 = hotspot + '0 1 0' * sz_y;
+ v2 = hotspot + '1 0 0' * sz.x;
+ v3 = hotspot + '1 0 0' * sz.x + '0 1 0' * sz.y;
+ v4 = hotspot + '0 1 0' * sz.y;
// rotate them, and make them absolute
rot = -rot; // rotate by the opposite angle, as our coordinate system is reversed
up = rotate(up, rot);
owidth = width + 2 * border;
- o = o - up * (margin + border + height) + ri * (sz_x - owidth) * 0.5;
+ o = o - up * (margin + border + height) + ri * (sz.x - owidth) * 0.5;
drawquad(o - up * border, ri * owidth, up * border, "", rgb, a, f);
drawquad(o + up * height, ri * owidth, up * border, "", rgb, a, f);
float sw, w, h;
float aspect, sa, ca;
- sw = stringwidth(s, FALSE, fontsize);
+ sw = stringwidth(s, false, fontsize);
if(sw > minwidth)
w = sw;
else
w = minwidth;
- h = fontsize_y;
+ h = fontsize.y;
// how do corners work?
aspect = vid_conwidth / vid_conheight;
}
// align
- o_x -= w * algnx;
- o_y -= h * algny;
+ o.x -= w * algnx;
+ o.y -= h * algny;
// we want to be onscreen
- if(o_x < 0)
- o_x = 0;
- if(o_y < 0)
- o_y = 0;
- if(o_x > vid_conwidth - w)
- o_x = vid_conwidth - w;
- if(o_y > vid_conheight - h)
- o_x = vid_conheight - h;
+ if(o.x < 0)
+ o.x = 0;
+ if(o.y < 0)
+ o.y = 0;
+ if(o.x > vid_conwidth - w)
+ o.x = vid_conwidth - w;
+ if(o.y > vid_conheight - h)
+ o.x = vid_conheight - h;
- o_x += 0.5 * (w - sw);
+ o.x += 0.5 * (w - sw);
drawstring(o, s, fontsize, rgb, a, DRAWFLAG_NORMAL);
- o_x += 0.5 * sw;
- o_y += 0.5 * h;
+ o.x += 0.5 * sw;
+ o.y += 0.5 * h;
return o;
}
}
vector fixrgbexcess(vector rgb)
{
- if(rgb_x > 1)
+ if(rgb.x > 1)
{
rgb = fixrgbexcess_move(rgb, '1 0 0', '0 1 1');
- if(rgb_y > 1)
+ if(rgb.y > 1)
{
rgb = fixrgbexcess_move(rgb, '0 1 0', '0 0 1');
- if(rgb_z > 1)
- rgb_z = 1;
+ if(rgb.z > 1)
+ rgb.z = 1;
}
- else if(rgb_z > 1)
+ else if(rgb.z > 1)
{
rgb = fixrgbexcess_move(rgb, '0 0 1', '0 1 0');
- if(rgb_y > 1)
- rgb_y = 1;
+ if(rgb.y > 1)
+ rgb.y = 1;
}
}
- else if(rgb_y > 1)
+ else if(rgb.y > 1)
{
rgb = fixrgbexcess_move(rgb, '0 1 0', '1 0 1');
- if(rgb_x > 1)
+ if(rgb.x > 1)
{
rgb = fixrgbexcess_move(rgb, '1 0 0', '0 0 1');
- if(rgb_z > 1)
- rgb_z = 1;
+ if(rgb.z > 1)
+ rgb.z = 1;
}
- else if(rgb_z > 1)
+ else if(rgb.z > 1)
{
rgb = fixrgbexcess_move(rgb, '0 0 1', '1 0 0');
- if(rgb_x > 1)
- rgb_x = 1;
+ if(rgb.x > 1)
+ rgb.x = 1;
}
}
- else if(rgb_z > 1)
+ else if(rgb.z > 1)
{
rgb = fixrgbexcess_move(rgb, '0 0 1', '1 1 0');
- if(rgb_x > 1)
+ if(rgb.x > 1)
{
rgb = fixrgbexcess_move(rgb, '1 0 0', '0 1 0');
- if(rgb_y > 1)
- rgb_y = 1;
+ if(rgb.y > 1)
+ rgb.y = 1;
}
- else if(rgb_y > 1)
+ else if(rgb.y > 1)
{
rgb = fixrgbexcess_move(rgb, '0 1 0', '1 0 0');
- if(rgb_x > 1)
- rgb_x = 1;
+ if(rgb.x > 1)
+ rgb.x = 1;
}
}
return rgb;
}
-float waypointsprite_count, waypointsprite_newcount;
void Draw_WaypointSprite()
{
string spriteimage;
switch(self.rule)
{
case SPRITERULE_SPECTATOR:
- if not((autocvar_g_waypointsprite_itemstime == 1 && t == NUM_SPECTATOR + 1)
- || (autocvar_g_waypointsprite_itemstime == 2 && (t == NUM_SPECTATOR + 1 || warmup_stage)))
+ if(!(
+ (autocvar_g_waypointsprite_itemstime == 1 && t == NUM_SPECTATOR + 1)
+ || (autocvar_g_waypointsprite_itemstime == 2 && (t == NUM_SPECTATOR + 1 || warmup_stage))
+ ))
return;
spriteimage = self.netname;
break;
float ang;
o = project_3d_to_2d(self.origin);
- if(o_z < 0
- || o_x < (vid_conwidth * waypointsprite_edgeoffset_left)
- || o_y < (vid_conheight * waypointsprite_edgeoffset_top)
- || o_x > (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right))
- || o_y > (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)))
+ if(o.z < 0
+ || o.x < (vid_conwidth * waypointsprite_edgeoffset_left)
+ || o.y < (vid_conheight * waypointsprite_edgeoffset_top)
+ || o.x > (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right))
+ || o.y > (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)))
{
// scale it to be just in view
vector d;
float f1, f2;
d = o - '0.5 0 0' * vid_conwidth - '0 0.5 0' * vid_conheight;
- ang = atan2(-d_x, -d_y);
- if(o_z < 0)
+ ang = atan2(-d.x, -d.y);
+ if(o.z < 0)
ang += M_PI;
- f1 = d_x / vid_conwidth;
- f2 = d_y / vid_conheight;
+ f1 = d.x / vid_conwidth;
+ f2 = d.y / vid_conheight;
if(max(f1, -f1) > max(f2, -f2))
{
- if(d_z * f1 > 0)
+ if(d.z * f1 > 0)
{
// RIGHT edge
d = d * ((0.5 - waypointsprite_edgeoffset_right) / f1);
}
else
{
- if(d_z * f2 > 0)
+ if(d.z * f2 > 0)
{
// BOTTOM edge
d = d * ((0.5 - waypointsprite_edgeoffset_bottom) / f2);
#else
vector d;
d = o - '0.5 0 0' * vid_conwidth - '0 0.5 0' * vid_conheight;
- ang = atan2(-d_x, -d_y);
+ ang = atan2(-d.x, -d.y);
#endif
}
- o_z = 0;
+ o.z = 0;
float edgedistance_min, crosshairdistance;
- edgedistance_min = min((o_y - (vid_conheight * waypointsprite_edgeoffset_top)),
- (o_x - (vid_conwidth * waypointsprite_edgeoffset_left)),
- (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right)) - o_x,
- (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)) - o_y);
+ edgedistance_min = min((o.y - (vid_conheight * waypointsprite_edgeoffset_top)),
+ (o.x - (vid_conwidth * waypointsprite_edgeoffset_left)),
+ (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right)) - o.x,
+ (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)) - o.y);
float vidscale;
vidscale = max(vid_conwidth / vid_width, vid_conheight / vid_height);
- crosshairdistance = sqrt( pow(o_x - vid_conwidth/2, 2) + pow(o_y - vid_conheight/2, 2) );
+ crosshairdistance = sqrt( pow(o.x - vid_conwidth/2, 2) + pow(o.y - vid_conheight/2, 2) );
t = waypointsprite_scale * vidscale;
a *= waypointsprite_alpha;
void Ent_WaypointSprite()
{
- float sendflags, f, t;
+ int sendflags, f, t;
sendflags = ReadByte();
if(!self.spawntime)
{
float dh, n, i, o, f;
string s, sname, sframes;
- dh = search_begin(strcat("models/sprites/*_frame*", ext), FALSE, FALSE);
+ dh = search_begin(strcat("models/sprites/*_frame*", ext), false, false);
if (dh < 0)
return;
float ext_len = strlen(ext);