r1829 - in branches/nexuiz-2.0/data: . qcsrc/common qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sun Aug 20 06:56:28 EDT 2006
Author: div0
Date: 2006-08-20 06:56:27 -0400 (Sun, 20 Aug 2006)
New Revision: 1829
Modified:
branches/nexuiz-2.0/data/default.cfg
branches/nexuiz-2.0/data/qcsrc/common/util.qc
branches/nexuiz-2.0/data/qcsrc/server/cl_physics.qc
branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc
branches/nexuiz-2.0/data/qcsrc/server/constants.qh
branches/nexuiz-2.0/data/qcsrc/server/defs.qh
branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
branches/nexuiz-2.0/data/qcsrc/server/t_teleporters.qc
branches/nexuiz-2.0/data/qcsrc/server/teamplay.qc
Log:
merged player name display (used for teamplay only by default)
Modified: branches/nexuiz-2.0/data/default.cfg
===================================================================
--- branches/nexuiz-2.0/data/default.cfg 2006-08-18 12:00:39 UTC (rev 1828)
+++ branches/nexuiz-2.0/data/default.cfg 2006-08-20 10:56:27 UTC (rev 1829)
@@ -722,3 +722,5 @@
seta sv_curl_defaulturl "http://www.nexuiz.com/contentdownload/getmap.php?file="
set sv_motd ""
+
+seta cl_shownames 1 // show player names pointed to (0: never, 1: teamplay only, 2: always)
Modified: branches/nexuiz-2.0/data/qcsrc/common/util.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/util.qc 2006-08-18 12:00:39 UTC (rev 1828)
+++ branches/nexuiz-2.0/data/qcsrc/common/util.qc 2006-08-20 10:56:27 UTC (rev 1829)
@@ -173,3 +173,13 @@
*/
}
+float dist_point_line(vector p, vector l0, vector ldir)
+{
+ ldir = normalize(ldir);
+
+ // remove the component in line direction
+ p = p - (p * ldir) * ldir;
+
+ // vlen of the remaining vector
+ return vlen(p);
+}
Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_physics.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_physics.qc 2006-08-18 12:00:39 UTC (rev 1828)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_physics.qc 2006-08-20 10:56:27 UTC (rev 1829)
@@ -94,6 +94,8 @@
if (self.deadflag)
return;
+ UpdateSelectedPlayer();
+
if (!self.fixangle)
{
self.angles_x = 0;
Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc 2006-08-18 12:00:39 UTC (rev 1828)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc 2006-08-20 10:56:27 UTC (rev 1829)
@@ -290,6 +290,8 @@
// become fully visible
self.alpha = 1;
+ // clear selected player display
+ ClearSelectedPlayer();
// throw a weapon
SpawnThrownWeapon (self.origin + (self.mins + self.maxs) * 0.5, self.switchweapon);
// print an obituary message
@@ -353,3 +355,146 @@
}
}
+float UpdateSelectedPlayer_countvalue(float v)
+{
+ return max(0, (v - 1.0) / 0.5);
+}
+
+// returns: -2 if no hit, otherwise cos of the angle
+// uses the global v_angle
+float UpdateSelectedPlayer_canSee(entity p, float mincosangle, float maxdist)
+{
+ vector so, d;
+ float c;
+
+ if(p == self)
+ return -2;
+
+ if(p.deadflag)
+ return -2;
+
+ so = self.origin + self.view_ofs;
+ d = p.origin - so;
+
+ // misaimed?
+ if(dist_point_line(d, '0 0 0', v_forward) > maxdist)
+ return -2;
+
+ // now find the cos of the angle...
+ c = normalize(d) * v_forward;
+
+ if(c <= mincosangle)
+ return -2;
+
+ traceline(so, p.origin, MOVE_NOMONSTERS, self);
+ if(trace_fraction < 1)
+ return -2;
+
+ return c;
+}
+
+void ClearSelectedPlayer()
+{
+ if(self.selected_player)
+ {
+ centerprint_expire(self, CENTERPRIO_POINT);
+ self.selected_player = world;
+ self.selected_player_display_needs_update = FALSE;
+ }
+}
+
+void UpdateSelectedPlayer()
+{
+ entity selected;
+ float selected_score;
+ selected = world;
+ selected_score = 0.95; // 18 degrees
+
+ if(clienttype(self) != CLIENTTYPE_REAL)
+ return;
+
+ if(self.cvar_cl_shownames == 0)
+ return;
+
+ if(self.cvar_cl_shownames == 1 && !teams_matter)
+ return;
+
+ makevectors(self.v_angle); // sets v_forward
+
+ // 1. cursor trace is always right
+ if(self.cursor_trace_ent && self.cursor_trace_ent.classname == "player" && !self.cursor_trace_ent.deadflag)
+ {
+ selected = self.cursor_trace_ent;
+ }
+ else
+ {
+ // 2. if we don't have a cursor trace, find the player which is least
+ // mis-aimed at
+ entity p;
+ for(p = find(world, classname, "player"); p; p = find(p, classname, "player"))
+ {
+ float c;
+ c = UpdateSelectedPlayer_canSee(p, selected_score, 100); // 100 = 2.5 meters
+ if(c >= -1)
+ {
+ selected = p;
+ selected_score = c;
+ }
+ }
+ }
+
+ if(selected)
+ {
+ self.selected_player_display_timeout = time + self.cvar_scr_centertime;
+ }
+ else
+ {
+ if(time < self.selected_player_display_timeout)
+ if(UpdateSelectedPlayer_canSee(self.selected_player, 0.7, 200) >= -1) // 5 meters, 45 degrees
+ selected = self.selected_player;
+ }
+
+ if(selected)
+ {
+ if(selected == self.selected_player)
+ {
+ float save;
+ save = UpdateSelectedPlayer_countvalue(self.selected_player_count);
+ self.selected_player_count = self.selected_player_count + frametime;
+ if(save != UpdateSelectedPlayer_countvalue(self.selected_player_count))
+ {
+ string namestr, healthstr;
+ if(teams_matter)
+ {
+ namestr = decolorize(selected.netname);
+ healthstr = ftos(floor(selected.health));
+ if(self.team == selected.team)
+ {
+ namestr = strcat(Team_ColorCode(selected.team), namestr, " (", healthstr, "%)");
+ self.selected_player_display_needs_update = TRUE;
+ }
+ else
+ namestr = strcat(Team_ColorCode(selected.team), namestr);
+ }
+ else
+ {
+ namestr = selected.netname;
+ }
+ centerprint_atprio(self, CENTERPRIO_POINT, namestr);
+ }
+ }
+ else
+ {
+ ClearSelectedPlayer();
+ self.selected_player = selected;
+ self.selected_player_time = time;
+ self.selected_player_count = 0;
+ self.selected_player_display_needs_update = FALSE;
+ // dprint("Selected: ", selected.netname, "\n");
+ }
+ }
+ else
+ {
+ ClearSelectedPlayer();
+ }
+}
Modified: branches/nexuiz-2.0/data/qcsrc/server/constants.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/constants.qh 2006-08-18 12:00:39 UTC (rev 1828)
+++ branches/nexuiz-2.0/data/qcsrc/server/constants.qh 2006-08-20 10:56:27 UTC (rev 1829)
@@ -210,3 +210,8 @@
float FLAG_DROPPED = 3;
float MAX_SHOT_DISTANCE = 32768;
+
+float COLOR_TEAM1 = 5; // red
+float COLOR_TEAM2 = 14; // blue
+float COLOR_TEAM3 = 10; // pink
+float COLOR_TEAM4 = 13; // yellow
Modified: branches/nexuiz-2.0/data/qcsrc/server/defs.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/defs.qh 2006-08-18 12:00:39 UTC (rev 1828)
+++ branches/nexuiz-2.0/data/qcsrc/server/defs.qh 2006-08-20 10:56:27 UTC (rev 1829)
@@ -154,7 +154,7 @@
void(entity client, string s) stuffcmd = #21;
void(entity client, string s) sprint = #24;
vector(entity e, float sped) aim = #44;
-void(entity client, string s) centerprint = #73;
+void(entity client, string s) centerprint_builtin = #73;
void(entity e) setspawnparms = #78;
void(float to, float f) WriteByte = #52;
void(float to, float f) WriteChar = #53;
@@ -256,6 +256,8 @@
.float() customizeentityforclient;
.float cvar_cl_playerdetailreduction;
.float cvar_cl_nogibs;
+.float cvar_scr_centertime;
+.float cvar_cl_shownames;
#ifdef ALLOW_VARIABLE_LOD
.float modelindex_lod0;
@@ -283,3 +285,15 @@
float W_AmmoItemCode(float wpn);
float W_ItemCode(float wpn);
string W_Name(float weaponid);
+
+void UpdateSelectedPlayer();
+void ClearSelectedPlayer();
+.entity selected_player;
+.float selected_player_time; // when this player has been selected
+.float selected_player_count; // how long this player has been directly pointed to
+.float selected_player_display_needs_update; // are regular updates necessary? (health)
+.float selected_player_display_timeout; // when the selection will time out
+
+void centerprint_atprio(entity e, float prio, string s);
+void centerprint_expire(entity e, float prio);
+void centerprint(entity e, string s);
Modified: branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc 2006-08-18 12:00:39 UTC (rev 1828)
+++ branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc 2006-08-20 10:56:27 UTC (rev 1829)
@@ -393,6 +393,8 @@
{
GetCvars_handleFloat(f, cvar_cl_playerdetailreduction, "cl_playerdetailreduction");
GetCvars_handleFloat(f, cvar_cl_nogibs, "cl_nogibs");
+ GetCvars_handleFloat(f, cvar_scr_centertime, "scr_centertime");
+ GetCvars_handleFloat(f, cvar_cl_shownames, "cl_shownames");
}
float fexists(string f)
@@ -474,3 +476,96 @@
error(strcat("There were ", ftos(f), " frags left. BAD!"));
}
+string Team_ColorCode(float teamid)
+{
+ if(teamid == COLOR_TEAM1)
+ return "^1";
+ else if(teamid == COLOR_TEAM2)
+ return "^4";
+ else if(teamid == COLOR_TEAM3)
+ return "^6";
+ else if(teamid == COLOR_TEAM4)
+ return "^3";
+ else
+ return "^7";
+}
+
+string decolorize(string s)
+{
+ string out;
+ out = "";
+ while(s != "")
+ {
+ float n;
+ string ch1, ch2;
+ n = 1;
+ ch1 = substring(s, 0, 1);
+ ch2 = substring(s, 1, 2);
+ if(ch1 == "^")
+ {
+ n = 2;
+ if(ch2 == "^")
+ out = strcat(out, "^");
+ else if(ch2 == "0")
+ out = strcat(out);
+ else if(ch2 == "1")
+ out = strcat(out);
+ else if(ch2 == "2")
+ out = strcat(out);
+ else if(ch2 == "3")
+ out = strcat(out);
+ else if(ch2 == "4")
+ out = strcat(out);
+ else if(ch2 == "5")
+ out = strcat(out);
+ else if(ch2 == "6")
+ out = strcat(out);
+ else if(ch2 == "7")
+ out = strcat(out);
+ else if(ch2 == "8")
+ out = strcat(out);
+ else if(ch2 == "9")
+ out = strcat(out);
+ else
+ {
+ n = 1;
+ out = strcat(out, "^");
+ }
+ s = substring(s, n, strlen(s) - n);
+ }
+ else
+ {
+ s = substring(s, 1, strlen(s) - 1);
+ out = strcat(out, ch1);
+ }
+ }
+ return out;
+}
+
+#define CENTERPRIO_POINT 1
+#define CENTERPRIO_NORMAL 5
+.float centerprint_priority;
+.float centerprint_expires;
+void centerprint_atprio(entity e, float prio, string s)
+{
+ if(time > e.centerprint_expires)
+ e.centerprint_priority = 0;
+ if(prio >= e.centerprint_priority)
+ {
+ e.centerprint_priority = prio;
+ e.centerprint_expires = time + e.cvar_scr_centertime;
+ centerprint_builtin(e, s);
+ }
+}
+void centerprint_expire(entity e, float prio)
+{
+ if(prio == e.centerprint_priority)
+ {
+ e.centerprint_priority = 0;
+ centerprint_builtin(e, "");
+ }
+}
+void centerprint(entity e, string s)
+{
+ centerprint_atprio(e, CENTERPRIO_NORMAL, s);
+}
Modified: branches/nexuiz-2.0/data/qcsrc/server/t_teleporters.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/t_teleporters.qc 2006-08-18 12:00:39 UTC (rev 1828)
+++ branches/nexuiz-2.0/data/qcsrc/server/t_teleporters.qc 2006-08-20 10:56:27 UTC (rev 1829)
@@ -88,6 +88,15 @@
other.oldvelocity = other.velocity;
// reset tracking of who pushed you into a hazard (for kill credit)
other.pushltime = 0;
+
+ // stop player name display
+ {
+ entity oldself;
+ oldself = self;
+ self = other;
+ ClearSelectedPlayer();
+ self = oldself;
+ }
}
void info_teleport_destination (void)
Modified: branches/nexuiz-2.0/data/qcsrc/server/teamplay.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/teamplay.qc 2006-08-18 12:00:39 UTC (rev 1828)
+++ branches/nexuiz-2.0/data/qcsrc/server/teamplay.qc 2006-08-20 10:56:27 UTC (rev 1829)
@@ -1,9 +1,3 @@
-float COLOR_TEAM1 = 5; // red
-float COLOR_TEAM2 = 14; // blue
-float COLOR_TEAM3 = 10; // pink
-float COLOR_TEAM4 = 13; // yellow
-
-
float GAME_DEATHMATCH = 1;
float GAME_TEAM_DEATHMATCH = 2;
float GAME_DOMINATION = 3;
More information about the nexuiz-commits
mailing list