]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/waypointsprites.qc
multiple fixes of clientside movetypes (gravity unaffected by ticrate flag, initial...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / waypointsprites.qc
index d671d8451938acf36699a26738476d6f5a4e7241..9e5b199882e4e1662fc123529d40f64a8403f9c8 100644 (file)
@@ -10,6 +10,10 @@ 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;
@@ -18,6 +22,7 @@ float waypointsprite_distancefadescale;
 float waypointsprite_distancefadedistance;
 float waypointsprite_alpha;
 
+.float helpme;
 .float rule;
 .string netname; // primary picture
 .string netname2; // secondary picture
@@ -40,6 +45,7 @@ float SPRITE_HEALTHBAR_BORDER = 2;
 float SPRITE_HEALTHBAR_BORDERALPHA = 1;
 float SPRITE_HEALTHBAR_HEALTHALPHA = 0.5;
 float SPRITE_ARROW_SCALE = 1.0;
+float SPRITE_HELPME_BLINK = 2;
 
 void drawrotpic(vector org, float rot, string pic, vector sz, vector hotspot, vector rgb, float a, float f)
 {
@@ -213,6 +219,7 @@ float spritelookupblinkvalue(string s)
                case "item-shueld":      return 2;
                case "item-fuelregen":   return 2;
                case "item-jetpack":     return 2;
+               case "tagged-target":    return 2;
                default:                 return 1;
        }
 }
@@ -293,6 +300,7 @@ string spritelookuptext(string s)
                case "item-jetpack": return _("Jet Pack");
                case "freezetag_frozen": return _("Frozen!");
                case "tagged-target": return _("Tagged");
+               case "vehicle": return _("Vehicle");
                default: return s;
        }
 }
@@ -425,9 +433,19 @@ void Draw_WaypointSprite()
        vector rgb;
        rgb = self.teamradar_color;
        rgb = spritelookupcolor(spriteimage, rgb);
+       if(rgb == '0 0 0')
+       {
+               self.teamradar_color = '1 0 1';
+               print(sprintf("WARNING: sprite of name %s has no color, using pink so you notice it\n", spriteimage)); 
+       }
 
        if(time - floor(time) > 0.5)
-               a *= spritelookupblinkvalue(spriteimage);
+       {
+               if(self.helpme && time < self.helpme)
+                       a *= SPRITE_HELPME_BLINK;
+               else
+                       a *= spritelookupblinkvalue(spriteimage);
+       }
 
        if(a > 1)
        {
@@ -444,7 +462,11 @@ void Draw_WaypointSprite()
        float ang;
 
        o = project_3d_to_2d(self.origin);
-       if(o_z < 0 || o_x < 0 || o_y < 0 || o_x > vid_conwidth || o_y > vid_conheight)
+       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;
@@ -463,12 +485,12 @@ void Draw_WaypointSprite()
                        if(d_z * f1 > 0)
                        {
                                // RIGHT edge
-                               d = d * (0.5 / f1);
+                               d = d * ((0.5 - waypointsprite_edgeoffset_right) / f1);
                        }
                        else
                        {
                                // LEFT edge
-                               d = d * (-0.5 / f1);
+                               d = d * (-(0.5 - waypointsprite_edgeoffset_left) / f1);
                        }
                }
                else
@@ -476,12 +498,12 @@ void Draw_WaypointSprite()
                        if(d_z * f2 > 0)
                        {
                                // BOTTOM edge
-                               d = d * (0.5 / f2);
+                               d = d * ((0.5 - waypointsprite_edgeoffset_bottom) / f2);
                        }
                        else
                        {
                                // TOP edge
-                               d = d * (-0.5 / f2);
+                               d = d * (-(0.5 - waypointsprite_edgeoffset_top) / f2);
                        }
                }
 
@@ -489,12 +511,21 @@ void Draw_WaypointSprite()
        }
        else
        {
+#if 1
                ang = M_PI;
+#else
+               vector d;
+               d = o - '0.5 0 0' * vid_conwidth - '0 0.5 0' * vid_conheight;
+               ang = atan2(-d_x, -d_y);
+#endif
        }
        o_z = 0;
 
        float edgedistance_min, crosshairdistance;
-       edgedistance_min = min4(o_y, o_x,vid_conwidth - o_x, vid_conheight - o_y);
+               edgedistance_min = min4((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);
@@ -536,6 +567,8 @@ void Draw_WaypointSprite()
        
        string txt;
        txt = spritelookuptext(spriteimage);
+       if(self.helpme && time < self.helpme)
+               txt = sprintf(_("%s needing help!"), txt);
        if(autocvar_g_waypointsprite_uppercase)
                txt = strtoupper(txt);
 
@@ -678,6 +711,9 @@ void Ent_WaypointSprite()
                self.teamradar_color_x = ReadByte() / 255.0;
                self.teamradar_color_y = ReadByte() / 255.0;
                self.teamradar_color_z = ReadByte() / 255.0;
+               self.helpme = ReadByte() * 0.1;
+               if(self.helpme > 0)
+                       self.helpme += servertime;
        }
 
        InterpolateOrigin_Note();
@@ -721,6 +757,10 @@ void WaypointSprite_Load()
        waypointsprite_edgefadealpha = autocvar_g_waypointsprite_edgefadealpha;
        waypointsprite_edgefadescale = autocvar_g_waypointsprite_edgefadescale;
        waypointsprite_edgefadedistance = autocvar_g_waypointsprite_edgefadedistance;
+       waypointsprite_edgeoffset_bottom = autocvar_g_waypointsprite_edgeoffset_bottom;
+       waypointsprite_edgeoffset_left = autocvar_g_waypointsprite_edgeoffset_left;
+       waypointsprite_edgeoffset_right = autocvar_g_waypointsprite_edgeoffset_right;
+       waypointsprite_edgeoffset_top = autocvar_g_waypointsprite_edgeoffset_top;
        waypointsprite_crosshairfadealpha = autocvar_g_waypointsprite_crosshairfadealpha;
        waypointsprite_crosshairfadescale = autocvar_g_waypointsprite_crosshairfadescale;
        waypointsprite_crosshairfadedistance = autocvar_g_waypointsprite_crosshairfadedistance;