]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/hud/panel/centerprint.qc
Merge branch 'master' into z411/bai-server
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / hud / panel / centerprint.qc
index 5a18bf388a4422cc60439a6c1642330b3849ca31..25e2815125c0adec6f3dc752f1572eff9f51d72a 100644 (file)
@@ -45,6 +45,10 @@ float centerprint_expire_time[CENTERPRINT_MAX_MSGS];
 int centerprint_countdown_num[CENTERPRINT_MAX_MSGS];
 bool centerprint_showing;
 
+float centerprint_medal_expire_time;
+string centerprint_medal_icon;
+float centerprint_medal_times;
+
 string centerprint_title;
 float centerprint_title_offset;
 
@@ -149,6 +153,21 @@ void centerprint_KillAll()
        }
 }
 
+void centerprint_Medal(string icon, float times)
+{
+       if(!autocvar_hud_panel_centerprint_medals) return;
+
+       //LOG_INFOF("centerprint_Medal: icon: %s times: %d", icon, times);
+       //centerprint_medal_expire_time = time + autocvar_hud_panel_centerprint_time;
+       centerprint_medal_expire_time = time + MSG_MEDAL_TIME;
+       centerprint_medal_times = times;
+       if(centerprint_medal_icon)
+               strunzone(centerprint_medal_icon);
+       centerprint_medal_icon = strzone(strcat("gfx/medal/", icon));
+
+       centerprint_showing = true;
+}
+
 void centerprint_ClearTitle()
 {
        strfree(centerprint_title);
@@ -158,10 +177,7 @@ void centerprint_ClearTitle()
 void centerprint_SetTitle(string title, float offset)
 {
        if(title != centerprint_title) {
-               if(centerprint_title)
-                       strfree(centerprint_title);
-
-               centerprint_title = strzone(CCR(title));
+               strcpy(centerprint_title, CCR(title));
                centerprint_title_offset = offset;
        }
 }
@@ -257,9 +273,46 @@ void HUD_CenterPrint()
        bool all_messages_expired = true;
 
        pos = panel_pos;
+
        if (autocvar_hud_panel_centerprint_flip)
                pos.y += panel_size.y;
        align = bound(0, autocvar_hud_panel_centerprint_align, 1);
+       
+       // z411 draw medals first
+       if (autocvar_hud_panel_centerprint_medals && time < centerprint_medal_expire_time) {
+               float height = vid_conheight/50 * 4;
+               pos.y -= height;
+
+               if(time < centerprint_medal_expire_time - MSG_MEDAL_FADE_TIME)
+                       a = 1;
+               else
+                       a = (centerprint_medal_expire_time - time) / MSG_MEDAL_FADE_TIME;
+               
+               vector tmp_in = pos;
+                       
+               vector mysize = draw_getimagesize(centerprint_medal_icon);
+               vector newsize = vec2(height*(mysize.x/mysize.y), height);
+               vector fontsize = '1 1 0' * (newsize.y/2);
+               
+               tmp_in.x += (panel_size.x - newsize.x) / 2; // center medal icon
+               
+               if(centerprint_medal_times < autocvar_hud_panel_centerprint_medals_max) {
+                       tmp_in.x -= ((newsize.x * 1.1) * (centerprint_medal_times - 1) / 2);
+                       for(int t = 0; t < centerprint_medal_times; t++) {
+                               drawpic(tmp_in, centerprint_medal_icon, newsize, '1 1 1', a, DRAWFLAG_NORMAL);
+                               tmp_in.x += newsize.x * 1.1;
+                       }
+               } else {
+                       drawpic(tmp_in, centerprint_medal_icon, newsize, '1 1 1', a, DRAWFLAG_NORMAL);
+                       tmp_in.x += newsize.x + fontsize.x * 0.25; // draw times next to it
+                       tmp_in.y += (newsize.y - fontsize.y) / 2;
+                       drawstring(tmp_in, ftos(centerprint_medal_times), fontsize, '1 1 1', a, DRAWFLAG_NORMAL);
+               }
+
+               pos.y += height;
+               
+               all_messages_expired = false;
+       }
 
        // Show title if available
        if(centerprint_title) {