// self.pointtime = last time you pointed at this player
// self.csqcmodel_isdead = value of csqcmodel_isdead to know when the player is dead or not
+LinkedList shownames_ent;
+STATIC_INIT(shownames_ent)
+{
+ shownames_ent = LL_NEW();
+ for (int i = 0; i < maxclients; ++i)
+ {
+ entity e = new(shownames_tag);
+ e.sv_entnum = i + 1;
+ LL_PUSH(shownames_ent, e);
+ }
+}
+
const float SHOWNAMES_FADESPEED = 4;
const float SHOWNAMES_FADEDELAY = 0.4;
void Draw_ShowNames(entity this)
if (autocvar_hud_shownames_antioverlap)
{
// fade tag out if another tag that is closer to you overlaps
- for (entity e = world; (e = find(e, classname, "shownames_tag")); )
- {
- if (e == this) continue;
- vector eo = project_3d_to_2d(e.origin);
+ LL_EACH(shownames_ent, it != this && entcs_receiver(i), LAMBDA(
+ vector eo = project_3d_to_2d(it.origin);
if (eo.z < 0 || eo.x < 0 || eo.y < 0 || eo.x > vid_conwidth || eo.y > vid_conheight) continue;
eo.z = 0;
if (vlen((eX * o.x + eY * o.y) - eo) < autocvar_hud_shownames_antioverlap_distance
- && dist > vlen(e.origin - view_origin))
+ && dist > vlen(it.origin - view_origin))
{
overlap = true;
break;
}
- }
+ ));
}
bool onscreen = (o.z >= 0 && o.x >= 0 && o.y >= 0 && o.x <= vid_conwidth && o.y <= vid_conheight);
float crosshairdistance = sqrt(pow(o.x - vid_conwidth / 2, 2) + pow(o.y - vid_conheight / 2, 2));
// multiply by player alpha
if (!this.sameteam || (this.sv_entnum == player_localentnum))
{
- float f = getplayeralpha(this.sv_entnum - 1);
+ float f = entcs_GetAlpha(this.sv_entnum - 1);
if (f == 0) f = 1;
if (f < 0) f = 0;
// FIXME: alpha is negative when dead, breaking death fade
DRAWFLAG_NORMAL);
}
}
- string s = GetPlayerName(this.sv_entnum - 1);
+ string s = entcs_GetName(this.sv_entnum - 1);
if ((autocvar_hud_shownames_decolorize == 1 && teamplay)
- || autocvar_hud_shownames_decolorize == 2) s = playername(s, GetPlayerColor(this.sv_entnum - 1));
+ || autocvar_hud_shownames_decolorize == 2) s = playername(s, entcs_GetTeam(this.sv_entnum - 1));
drawfontscale = '1 1 0' * resize;
s = textShortenToWidth(s, namewidth, '1 1 0' * autocvar_hud_shownames_fontsize, stringwidth_colors);
float width = stringwidth(s, true, '1 1 0' * autocvar_hud_shownames_fontsize);
}
}
-LinkedList shownames_ent;
-STATIC_INIT(shownames_ent)
-{
- shownames_ent = LL_NEW();
- for (int i = 0; i < maxclients; ++i)
- {
- entity e = new(shownames_tag);
- e.sv_entnum = i + 1;
- LL_PUSH(shownames_ent, e);
- }
-}
-
void Draw_ShowNames_All()
{
if (!autocvar_hud_shownames) return;
LL_EACH(shownames_ent, true, LAMBDA(
- entity entcs = entcs_receiver[i];
+ entity entcs = entcs_receiver(i);
if (!entcs) continue;
+ if (entcs.think) WITH(entity, self, entcs, entcs.think());
+ else
+ {
+ LOG_WARNING("entcs.think == null");
+ eprint(entcs);
+ }
if (entcs.m_entcs_private)
{
it.healthvalue = entcs.healthvalue;
it.armorvalue = 0;
it.sameteam = false;
}
- bool dead = getplayerisdead(i);
+ bool dead = entcs_IsDead(i) || entcs_IsSpectating(i);
if (!it.csqcmodel_isdead && entcs.has_origin) setorigin(it, entcs.origin);
it.csqcmodel_isdead = dead;
Draw_ShowNames(it);