]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/teamradar.qc
Merge branch 'master' into TimePath/unified_weapons
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / teamradar.qc
index 2456ee804c6d0fcba2b34729bad087efd29906a8..8eaf7e4c2206fe7d000e3d5f6b9aef87421fb966 100644 (file)
@@ -1,33 +1,18 @@
-float teamradar_angle; // player yaw angle
-vector teamradar_origin3d_in_texcoord; // player origin
-vector teamradar_origin2d; // 2D origin
-vector teamradar_size2d; // 2D size
-vector teamradar_extraclip_mins, teamradar_extraclip_maxs; // for non-centered radar display
-float teamradar_size; // 2D scale factor
-float hud_panel_radar_scale; // window size = ...qu
-float v_flipped;
-
-float vlen2d(vector v)
-{
-       return sqrt(v.x * v.x + v.y * v.y);
-}
+#include "teamradar.qh"
+#include "_all.qh"
 
-float vlen_maxnorm2d(vector v)
-{
-       return max(v.x, v.y, -v.x, -v.y);
-}
+#include "hud.qh"
 
-float vlen_minnorm2d(vector v)
-{
-       return min(max(v.x, -v.x), max(v.y, -v.y));
-}
+#include "../common/util.qh"
+
+#include "../csqcmodellib/interpolate.qh"
 
 vector teamradar_3dcoord_to_texcoord(vector in)
 {
        vector out;
-       out_x = (in.x - mi_picmin.x) / (mi_picmax.x - mi_picmin.x);
-       out_y = (in.y - mi_picmin.y) / (mi_picmax.y - mi_picmin.y);
-       out_z = 0;
+       out.x = (in.x - mi_picmin.x) / (mi_picmax.x - mi_picmin.x);
+       out.y = (in.y - mi_picmin.y) / (mi_picmax.y - mi_picmin.y);
+       out.z = 0;
        return out;
 }
 
@@ -37,18 +22,46 @@ vector teamradar_texcoord_to_2dcoord(vector in)
        in -= teamradar_origin3d_in_texcoord;
 
        out = rotate(in, teamradar_angle * DEG2RAD);
-       out_y = - out.y; // screen space is reversed
+       out.y = - out.y; // screen space is reversed
 
        out = out * teamradar_size;
        if(v_flipped)
-               out_x = -out.x;
+               out.x = -out.x;
        out += teamradar_origin2d;
        return out;
 }
 
+
+vector teamradar_2dcoord_to_texcoord(vector in)
+{
+       vector out;
+       out = in;
+
+       out -= teamradar_origin2d;
+       if(v_flipped)
+               out_x = -out_x;
+       out = out / teamradar_size;
+
+       out_y = - out_y; // screen space is reversed
+       out = rotate(out, -teamradar_angle * DEG2RAD);
+
+       out += teamradar_origin3d_in_texcoord;
+
+       return out;
+}
+
+vector teamradar_texcoord_to_3dcoord(vector in,float z)
+{
+       vector out;
+       out_x = in_x * (mi_picmax_x - mi_picmin_x) + mi_picmin_x;
+       out_y = in_y * (mi_picmax_y - mi_picmin_y) + mi_picmin_y;
+       out_z = z;
+       return out;
+}
+
 vector yinvert(vector v)
 {
-       v_y = 1 - v.y;
+       v.y = 1 - v.y;
        return v;
 }
 
@@ -89,15 +102,15 @@ void draw_teamradar_player(vector coord3d, vector pangles, vector rgb)
        makevectors(pangles - '0 1 0' * teamradar_angle);
        if(v_flipped)
        {
-               v_forward_x = -v_forward.x;
-               v_right_x = -v_right.x;
-               v_up_x = -v_up.x;
+               v_forward.x = -v_forward.x;
+               v_right.x = -v_right.x;
+               v_up.x = -v_up.x;
        }
-       v_forward_z = 0;
+       v_forward.z = 0;
        v_forward = normalize(v_forward);
        v_forward.y *= -1.0;
-       v_right_x = -v_forward.y;
-       v_right_y = v_forward.x;
+       v_right.x = -v_forward.y;
+       v_right.y = v_forward.x;
 
        if(rgb == '1 1 1')
                rgb2 = '0 0 0';
@@ -121,24 +134,20 @@ void draw_teamradar_player(vector coord3d, vector pangles, vector rgb)
 
 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(pingdata)
        {
-               for(i = 0; i < MAX_TEAMRADAR_TIMES; ++i)
+               for(int i = 0; i < MAX_TEAMRADAR_TIMES; ++i)
                {
-                       dt = pingdata.(teamradar_times[i]);
+                       float dt = pingdata.(teamradar_times[i]);
                        if(dt == 0)
                                continue;
                        dt = time - dt;
                        if(dt >= 1 || dt <= 0)
                                continue;
-                       v = '2 2 0' * teamradar_size * dt;
+                       vector v = '2 2 0' * teamradar_size * dt;
                        drawpic(coord - 0.5 * v, "gfx/teamradar_ping", v, '1 1 1', (1 - dt) * a, DRAWFLAG_ADDITIVE);
                }
        }
@@ -151,10 +160,10 @@ void draw_teamradar_link(vector start, vector end, int colors)
        start = teamradar_texcoord_to_2dcoord(teamradar_3dcoord_to_texcoord(start));
        end = teamradar_texcoord_to_2dcoord(teamradar_3dcoord_to_texcoord(end));
        norm = normalize(start - end);
-       norm_z = norm.x;
-       norm_x = -norm.y;
-       norm_y = norm.z;
-       norm_z = 0;
+       norm.z = norm.x;
+       norm.x = -norm.y;
+       norm.y = norm.z;
+       norm.z = 0;
 
        c0 = colormapPaletteColor(colors & 0x0F, false);
        c1 = colormapPaletteColor((colors & 0xF0) / 0x10, false);
@@ -167,14 +176,6 @@ void draw_teamradar_link(vector start, vector end, int colors)
        R_EndPolygon();
 }
 
-float hud_panel_radar_scale;
-float hud_panel_radar_foreground_alpha;
-float hud_panel_radar_rotation;
-vector hud_panel_radar_size;
-float hud_panel_radar_zoommode;
-float hud_panel_radar_maximized_zoommode;
-float hud_panel_radar_maximized_rotation;
-
 void teamradar_loadcvars()
 {
        v_flipped = autocvar_v_flipped;
@@ -194,14 +195,14 @@ void teamradar_loadcvars()
        // match this to defaultXonotic.cfg!
        if(!hud_panel_radar_scale) hud_panel_radar_scale = 4096;
        if(!hud_panel_radar_foreground_alpha) hud_panel_radar_foreground_alpha = 0.8 * panel_fg_alpha;
-       if(!hud_panel_radar_size.x) hud_panel_radar_size_x = 128;
-       if(!hud_panel_radar_size.y) hud_panel_radar_size_y = hud_panel_radar_size.x;
+       if(!hud_panel_radar_size.x) hud_panel_radar_size.x = 128;
+       if(!hud_panel_radar_size.y) hud_panel_radar_size.y = hud_panel_radar_size.x;
 }
 
 // radar links
 
 void Ent_RadarLink()
-{
+{SELFPARAM();
        int sendflags = ReadByte();
 
        InterpolateOrigin_Undo();