X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fhud%2Fpanel%2Fcenterprint.qc;h=307e3c899a52504a30b464dfcd5c3ee45ff70308;hb=af2f0cb624aaf967708b22e1303d113668af5114;hp=f37d0c24a04bec2bb006ec075b5a00abf0275a69;hpb=231a9d608ead9a0e9bf9bf8cd9f3ff27c56c657f;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/hud/panel/centerprint.qc b/qcsrc/client/hud/panel/centerprint.qc index f37d0c24a..307e3c899 100644 --- a/qcsrc/client/hud/panel/centerprint.qc +++ b/qcsrc/client/hud/panel/centerprint.qc @@ -33,8 +33,9 @@ void HUD_CenterPrint_Export(int fh) const int CENTERPRINT_MAX_MSGS = 10; const int CENTERPRINT_MAX_ENTRIES = 50; -const float CENTERPRINT_SPACING = 0.5; -const float CENTERPRINT_TITLE_SPACING = 0.8; +const float CENTERPRINT_BASE_SIZE = 1.3; +const float CENTERPRINT_SPACING = 0.3; +const float CENTERPRINT_TITLE_SPACING = 0.35; int cpm_index; string centerprint_messages[CENTERPRINT_MAX_MSGS]; int centerprint_msgID[CENTERPRINT_MAX_MSGS]; @@ -44,8 +45,8 @@ float centerprint_expire_time[CENTERPRINT_MAX_MSGS]; int centerprint_countdown_num[CENTERPRINT_MAX_MSGS]; bool centerprint_showing; -bool centerprint_title_show; string centerprint_title; +float centerprint_title_offset; void centerprint_Add(int new_id, string strMessage, float duration, int countdown_num) { @@ -85,9 +86,10 @@ void centerprint_Add(int new_id, string strMessage, float duration, int countdow j = 0; if (new_id && new_id == centerprint_msgID[j]) { - if (strMessage == "" && centerprint_messages[j] != "" && centerprint_countdown_num[j] == 0) + if (strMessage == "" && centerprint_messages[j] != "") { // fade out the current msg (duration and countdown_num are ignored) + centerprint_start_time[j] = 0; centerprint_time[j] = min(5, autocvar_hud_panel_centerprint_fade_out); centerprint_expire_time[j] = -1; // don't use the variable time here! return; @@ -96,6 +98,9 @@ void centerprint_Add(int new_id, string strMessage, float duration, int countdow } } + if (strMessage == "") + return; + if (i == CENTERPRINT_MAX_MSGS) { // a msg with the same id was not found, add the msg at the next position @@ -148,17 +153,14 @@ void centerprint_KillAll() void centerprint_ClearTitle() { strfree(centerprint_title); - centerprint_title_show = false; + centerprint_title_offset = 0; } -void centerprint_SetTitle(string title) +void centerprint_SetTitle(string title, float offset) { if(title != centerprint_title) { - if(centerprint_title) - strfree(centerprint_title); - - centerprint_title = strzone(title); - centerprint_title_show = true; + strcpy(centerprint_title, CCR(title)); + centerprint_title_offset = offset; } } @@ -185,7 +187,7 @@ void HUD_CenterPrint() { if(highlightedPanel == HUD_PANEL(CENTERPRINT)) { - centerprint_SetTitle(strcat("test", ftos(hud_configure_cp_generation_time))); + centerprint_SetTitle(sprintf(_("Title at %s"), seconds_tostring(hud_configure_cp_generation_time)), 0); float r; r = random(); @@ -195,8 +197,7 @@ void HUD_CenterPrint() centerprint_Add(0, sprintf(_("^1Multiline message at time %s that\n^BOLDlasts longer than normal"), seconds_tostring(time)), 20, 0); else centerprint_AddStandard(sprintf(_("Message at time %s"), seconds_tostring(time))); - //hud_configure_cp_generation_time = time + 1 + random()*4; - hud_configure_cp_generation_time = time + 1; + hud_configure_cp_generation_time = time + 1 + random()*4; } else { @@ -249,6 +250,7 @@ void HUD_CenterPrint() int i, j, k, n, g; float a = 1, sz, align, current_msg_posY = 0, msg_size; vector pos; + vector cp_fontsize = hud_fontsize * CENTERPRINT_BASE_SIZE; string ts = ""; bool all_messages_expired = true; @@ -258,24 +260,30 @@ void HUD_CenterPrint() align = bound(0, autocvar_hud_panel_centerprint_align, 1); // Show title if available - if(centerprint_title_show) { - vector fontsize = hud_fontsize * autocvar_hud_panel_centerprint_fontscale_title; + if(centerprint_title) { + vector fontsize = cp_fontsize * autocvar_hud_panel_centerprint_fontscale_title; float width = stringwidth(centerprint_title, true, fontsize); pos.x = panel_pos.x + (panel_size.x - width) * align; + + if (autocvar_hud_panel_centerprint_flip) + pos.y -= fontsize.y; + if (centerprint_title_offset && align == 0.5) + pos.x += centerprint_title_offset * CENTERPRINT_BASE_SIZE * autocvar_hud_panel_centerprint_fontscale_title; + drawcolorcodedstring(pos, centerprint_title, fontsize, 1, DRAWFLAG_NORMAL); if (autocvar_hud_panel_centerprint_flip) - pos.y -= fontsize.y + (hud_fontsize.y * CENTERPRINT_TITLE_SPACING / 2); + pos.y -= cp_fontsize.y * CENTERPRINT_TITLE_SPACING; else - pos.y += fontsize.y + (hud_fontsize.y * CENTERPRINT_TITLE_SPACING / 2); + pos.y += fontsize.y + (hud_fontsize.y * CENTERPRINT_TITLE_SPACING); drawfill(pos, vec2(width, 1), '1 1 1', 1, DRAWFLAG_NORMAL); if (autocvar_hud_panel_centerprint_flip) - pos.y -= hud_fontsize.y * CENTERPRINT_TITLE_SPACING / 2; + pos.y -= cp_fontsize.y * CENTERPRINT_TITLE_SPACING; else - pos.y += hud_fontsize.y * CENTERPRINT_TITLE_SPACING / 2; + pos.y += cp_fontsize.y * CENTERPRINT_TITLE_SPACING; all_messages_expired = false; } @@ -293,7 +301,7 @@ void HUD_CenterPrint() } if (centerprint_expire_time[j] <= time) { - if (centerprint_countdown_num[j] && centerprint_time[j] > 0) + if (centerprint_countdown_num[j] && centerprint_time[j] > 0 && centerprint_start_time[j]) { centerprint_countdown_num[j] = centerprint_countdown_num[j] - 1; if (centerprint_countdown_num[j] == 0) @@ -311,8 +319,8 @@ void HUD_CenterPrint() float fade_in_time = autocvar_hud_panel_centerprint_fade_in; float fade_out_time = autocvar_hud_panel_centerprint_fade_out; - if (centerprint_countdown_num[j]) { - fade_in_time = autocvar_hud_panel_centerprint_fade_in_short; + if (centerprint_countdown_num[j] && centerprint_start_time[j]) { + fade_in_time = 0; fade_out_time = 0; } @@ -331,9 +339,6 @@ void HUD_CenterPrint() if (a <= 0.5/255.0 && centerprint_countdown_num[j] == 0) // Guaranteed invisible - don't show. continue; - // set the size from fading in/out before subsequent fading - sz = autocvar_hud_panel_centerprint_fade_minfontsize + a * (1 - autocvar_hud_panel_centerprint_fade_minfontsize); - // also fade it based on positioning if(autocvar_hud_panel_centerprint_fade_subsequent) { @@ -344,10 +349,8 @@ void HUD_CenterPrint() } a *= panel_fg_alpha; - // finally set the size based on the new alpha from subsequent fading - // TODO: Apply this only if subsequent, otherwise it fucks it up - if(g) - sz = sz * (autocvar_hud_panel_centerprint_fade_subsequent_minfontsize + a * (1 - autocvar_hud_panel_centerprint_fade_subsequent_minfontsize)); + // finally set the size based on the alpha + sz = autocvar_hud_panel_centerprint_fade_minfontsize + a * (1 - autocvar_hud_panel_centerprint_fade_minfontsize); drawfontscale = hud_scale * sz; if (centerprint_countdown_num[j]) @@ -364,7 +367,7 @@ void HUD_CenterPrint() while(getWrappedLine_remaining) { bool is_bold = (substring(getWrappedLine_remaining, 0, 5) == BOLD_OPERATOR); - vector fontsize = hud_fontsize * (is_bold ? autocvar_hud_panel_centerprint_fontscale_bold : autocvar_hud_panel_centerprint_fontscale); + vector fontsize = cp_fontsize * (is_bold ? autocvar_hud_panel_centerprint_fontscale_bold : autocvar_hud_panel_centerprint_fontscale); ts = getWrappedLine(panel_size.x * hud_scale.x * sz, fontsize, stringwidth_colors); if (ts != "") @@ -382,7 +385,7 @@ void HUD_CenterPrint() getWrappedLine_remaining = argv(k); bool is_bold = (substring(getWrappedLine_remaining, 0, 5) == BOLD_OPERATOR); - vector fontsize = hud_fontsize * (is_bold ? autocvar_hud_panel_centerprint_fontscale_bold : autocvar_hud_panel_centerprint_fontscale); + vector fontsize = cp_fontsize * (is_bold ? autocvar_hud_panel_centerprint_fontscale_bold : autocvar_hud_panel_centerprint_fontscale); if (is_bold) getWrappedLine_remaining = substring(getWrappedLine_remaining, 5, -1); @@ -410,7 +413,7 @@ void HUD_CenterPrint() if (autocvar_hud_panel_centerprint_flip) { - pos.y -= msg_size + CENTERPRINT_SPACING * hud_fontsize.y; + pos.y -= msg_size + CENTERPRINT_SPACING * cp_fontsize.y; if (a < 1 && centerprint_msgID[j] == 0) // messages with id can be replaced just after they are faded out, so never move over them the next messages pos.y += (1 - sqrt(a)); @@ -422,11 +425,11 @@ void HUD_CenterPrint() } else { - pos.y += CENTERPRINT_SPACING * hud_fontsize.y; + pos.y += CENTERPRINT_SPACING * cp_fontsize.y; if (a < 1 && centerprint_msgID[j] == 0) // messages with id can be replaced just after they are faded out, so never move over them the next messages pos.y -= (1 - sqrt(a)); - if(pos.y > panel_pos.y + panel_size.y - hud_fontsize.y) // check if the next message can be shown + if(pos.y > panel_pos.y + panel_size.y - cp_fontsize.y) // check if the next message can be shown { drawfontscale = hud_scale; return;