From 654d3cc379fc39865dbf7e136841022ed729f549 Mon Sep 17 00:00:00 2001 From: div0 Date: Wed, 26 Nov 2008 09:37:02 +0000 Subject: [PATCH] allow 32 concurrent radar pings git-svn-id: svn://svn.icculus.org/nexuiz/trunk@5103 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/client/teamradar.qc | 24 ++++++++++++++++-------- data/qcsrc/client/teamradar.qh | 5 ++++- data/qcsrc/client/waypointsprites.qc | 5 ++++- data/qcsrc/common/constants.qh | 1 + 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/data/qcsrc/client/teamradar.qc b/data/qcsrc/client/teamradar.qc index cce2a7e49..74458bcb6 100644 --- a/data/qcsrc/client/teamradar.qc +++ b/data/qcsrc/client/teamradar.qc @@ -121,20 +121,28 @@ void(vector coord3d, vector pangles, vector rgb) draw_teamradar_player = R_EndPolygon(); }; -void draw_teamradar_icon(vector coord, float icon, float pingtime, vector rgb, float a) +void draw_teamradar_icon(vector coord, float icon, entity pingdata, vector rgb, float a) { float dt; vector v; + float i; coord = teamradar_texcoord_to_2dcoord(teamradar_3dcoord_to_texcoord(coord)); drawpic(coord - '4 4 0', strcat("gfx/teamradar_icon_", ftos(icon)), '8 8 0', rgb, a, 0); - if(pingtime != 0) + + if(pingdata) { - dt = time - pingtime; - if(dt > 1) - return; - v = '2 2 0' * teamradar_size * dt; - drawpic(coord - 0.5 * v, "gfx/teamradar_ping", v, '1 1 1', 1 - dt, DRAWFLAG_ADDITIVE); + for(i = 0; i < MAX_TEAMRADAR_TIMES; ++i) + { + dt = pingdata.(teamradar_times[i]); + if(dt == 0) + continue; + dt = time - dt; + if(dt > 1) + continue; + v = '2 2 0' * teamradar_size * dt; + drawpic(coord - 0.5 * v, "gfx/teamradar_ping", v, '1 1 1', 1 - dt, DRAWFLAG_ADDITIVE); + } } } @@ -325,7 +333,7 @@ void() teamradar_view = for(tm = world; (tm = find(tm, classname, "radarlink")); ) draw_teamradar_link(tm.origin, tm.velocity, tm.team); for(tm = world; (tm = findflags(tm, teamradar_icon, 0xFFFFFF)); ) - draw_teamradar_icon(tm.origin, tm.teamradar_icon, tm.teamradar_time, tm.teamradar_color, tm.alpha); + draw_teamradar_icon(tm.origin, tm.teamradar_icon, tm, tm.teamradar_color, tm.alpha); for(tm = world; (tm = find(tm, classname, "entcs_receiver")); ) { color2 = GetPlayerColor(tm.sv_entnum); diff --git a/data/qcsrc/client/teamradar.qh b/data/qcsrc/client/teamradar.qh index 3be95025a..d709a91f2 100644 --- a/data/qcsrc/client/teamradar.qh +++ b/data/qcsrc/client/teamradar.qh @@ -1,6 +1,9 @@ void teamradar_view(); +#define MAX_TEAMRADAR_TIMES 32 + // to make entities have dots on the team radar .float teamradar_icon; -.float teamradar_time; +.float teamradar_times[MAX_TEAMRADAR_TIMES]; +.float teamradar_time_index; .vector teamradar_color; diff --git a/data/qcsrc/client/waypointsprites.qc b/data/qcsrc/client/waypointsprites.qc index f8750ad52..b151c77bc 100644 --- a/data/qcsrc/client/waypointsprites.qc +++ b/data/qcsrc/client/waypointsprites.qc @@ -254,7 +254,10 @@ void Ent_WaypointSprite() f = ReadByte(); self.teamradar_icon = (f & 0x7F); if(f & 0x80) - self.teamradar_time = time; + { + self.(teamradar_times[self.teamradar_time_index]) = time; + self.teamradar_time_index = mod(self.teamradar_time_index + 1, MAX_TEAMRADAR_TIMES); + } self.teamradar_color_x = ReadByte() / 255.0; self.teamradar_color_y = ReadByte() / 255.0; self.teamradar_color_z = ReadByte() / 255.0; diff --git a/data/qcsrc/common/constants.qh b/data/qcsrc/common/constants.qh index bd5df3f1d..ada2aa65f 100644 --- a/data/qcsrc/common/constants.qh +++ b/data/qcsrc/common/constants.qh @@ -66,6 +66,7 @@ const float RADARICON_WAYPOINT = 1; const float RADARICON_HELPME = 1; const float RADARICON_CONTROLPOINT = 1; const float RADARICON_GENERATOR = 1; +const float RADARICON_OBJECTIVE = 1; /////////////////////////// // key constants -- 2.39.2