X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fhud%2Fpanel%2Finfomessages.qc;h=f8803d85e666db7470f381eef27cc00f1a6ae7e2;hb=80b3870a80c79444482b81552cfd1cc6d004accc;hp=2bcad642609d7b86dfc4b7dd0c1170566057c57a;hpb=317ec3eb27ada1c4668876e9499136125acb7984;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/hud/panel/infomessages.qc b/qcsrc/client/hud/panel/infomessages.qc index 2bcad6426..f8803d85e 100644 --- a/qcsrc/client/hud/panel/infomessages.qc +++ b/qcsrc/client/hud/panel/infomessages.qc @@ -1,11 +1,56 @@ +#include "infomessages.qh" + +#include +#include + // Info messages panel (#14) -#define drawInfoMessage(s) do { \ - if(autocvar_hud_panel_infomessages_flip) \ - o.x = pos.x + mySize.x - stringwidth(s, true, fontsize); \ - drawcolorcodedstring(o, s, fontsize, a, DRAWFLAG_NORMAL); \ - o.y += fontsize.y; \ -} while(0) +float autocvar_hud_panel_infomessages_group_fadetime = 0.4; +float autocvar_hud_panel_infomessages_group_time = 6; +const int IMG_COUNT = 1; // number of InfoMessage Groups +float img_fade[IMG_COUNT]; +int img_cur_msg[IMG_COUNT]; +float img_time[IMG_COUNT]; + +int img_select(int group_id) +{ + float fadetime = max(0.001, autocvar_hud_panel_infomessages_group_fadetime); + if(time > img_time[group_id]) + { + img_fade[group_id] = max(0, img_fade[group_id] - frametime / fadetime); + if(!img_fade[group_id]) + { + ++img_cur_msg[group_id]; + img_time[group_id] = floor(time) + autocvar_hud_panel_infomessages_group_time; + } + } + else + img_fade[group_id] = min(1, img_fade[group_id] + frametime / fadetime); + return img_cur_msg[group_id]; +} + +float stringwidth_colors(string s, vector theSize); +vector InfoMessages_drawstring(string s, vector pos, vector sz, float a, vector fontsize) +{ + getWrappedLine_remaining = s; + float offset = 0; + while(getWrappedLine_remaining) + { + s = getWrappedLine(sz.x - offset, fontsize, stringwidth_colors); + if(autocvar_hud_panel_infomessages_flip) + offset = sz.x - stringwidth_colors(s, fontsize) - offset; + drawcolorcodedstring(pos + eX * offset, s, fontsize, a, DRAWFLAG_NORMAL); + pos.y += fontsize.y; + offset = fontsize.x; + } + return pos; +} + +#define InfoMessage(s) MACRO_BEGIN { \ + pos = InfoMessages_drawstring(s, pos, mySize, ((img_curr_group >= 0) ? panel_fg_alpha * img_fade[img_curr_group] : panel_fg_alpha), fontsize); \ + img_curr_group = -1; \ +} MACRO_END + void HUD_InfoMessages() { if(!autocvar__hud_configure) @@ -18,6 +63,10 @@ void HUD_InfoMessages() pos = panel_pos; mySize = panel_size; + if (autocvar_hud_panel_infomessages_dynamichud) + HUD_Scale_Enable(); + else + HUD_Scale_Disable(); HUD_Panel_DrawBg(1); if(panel_bg_padding) { @@ -25,60 +74,40 @@ void HUD_InfoMessages() mySize -= '2 2 0' * panel_bg_padding; } - // always force 5:1 aspect - vector newSize = '0 0 0'; - if(mySize.x/mySize.y > 5) - { - newSize.x = 5 * mySize.y; - newSize.y = mySize.y; - - pos.x = pos.x + (mySize.x - newSize.x) / 2; - } - else - { - newSize.y = 1/5 * mySize.x; - newSize.x = mySize.x; - - pos.y = pos.y + (mySize.y - newSize.y) / 2; - } - - mySize = newSize; - entity tm; - vector o; - o = pos; - - vector fontsize; - fontsize = '0.20 0.20 0' * mySize.y; - - float a; - a = panel_fg_alpha; - + vector fontsize = '0.2 0.2 0' * mySize.y; string s; + int img_curr_group = -1; if(!autocvar__hud_configure) { - if(spectatee_status && !intermission) + if(spectatee_status) { - a = 1; if(spectatee_status == -1) s = _("^1Observing"); else - s = sprintf(_("^1Spectating: ^7%s"), GetPlayerName(current_player)); - drawInfoMessage(s); - - if(spectatee_status == -1) - s = sprintf(_("^1Press ^3%s^1 to spectate"), getcommandkey("primary fire", "+fire")); - else - s = sprintf(_("^1Press ^3%s^1 or ^3%s^1 for next or previous player"), getcommandkey("next weapon", "weapnext"), getcommandkey("previous weapon", "weapprev")); - drawInfoMessage(s); + s = sprintf(_("^1Spectating: ^7%s"), entcs_GetName(current_player)); + InfoMessage(s); - if(spectatee_status == -1) - s = sprintf(_("^1Use ^3%s^1 or ^3%s^1 to change the speed"), getcommandkey("next weapon", "weapnext"), getcommandkey("previous weapon", "weapprev")); - else - s = sprintf(_("^1Press ^3%s^1 to observe"), getcommandkey("secondary fire", "+fire2")); - drawInfoMessage(s); - - s = sprintf(_("^1Press ^3%s^1 for gamemode info"), getcommandkey("server info", "+show_info")); - drawInfoMessage(s); + img_curr_group = 0; + switch(img_select(img_curr_group) % 3) + { + default: + case 0: + if(spectatee_status == -1) + s = sprintf(_("^1Press ^3%s^1 to spectate"), getcommandkey(_("primary fire"), "+fire")); + else + s = sprintf(_("^1Press ^3%s^1 or ^3%s^1 for next or previous player"), getcommandkey(_("next weapon"), "weapnext"), getcommandkey(_("previous weapon"), "weapprev")); + break; + case 1: + if(spectatee_status == -1) + s = sprintf(_("^1Use ^3%s^1 or ^3%s^1 to change the speed"), getcommandkey(_("next weapon"), "weapnext"), getcommandkey(_("previous weapon"), "weapprev")); + else + s = sprintf(_("^1Press ^3%s^1 to observe, ^3%s^1 to change camera mode"), getcommandkey(_("secondary fire"), "+fire2"), getcommandkey(_("drop weapon"), "dropweapon")); + break; + case 2: + s = sprintf(_("^1Press ^3%s^1 for gamemode info"), getcommandkey(_("server info"), "+show_info")); + break; + } + InfoMessage(s); if(gametype == MAPINFO_TYPE_LMS) { @@ -89,26 +118,25 @@ void HUD_InfoMessages() else if(sk.(scores[ps_primary]) > 0) s = _("^1You have no more lives left"); else - s = sprintf(_("^1Press ^3%s^1 to join"), getcommandkey("jump", "+jump")); + s = sprintf(_("^1Press ^3%s^1 to join"), getcommandkey(_("jump"), "+jump")); } else - s = sprintf(_("^1Press ^3%s^1 to join"), getcommandkey("jump", "+jump")); - drawInfoMessage(s); - - //show restart countdown: - if (time < STAT(GAMESTARTTIME)) { - float countdown; - //we need to ceil, otherwise the countdown would be off by .5 when using round() - countdown = ceil(STAT(GAMESTARTTIME) - time); - s = sprintf(_("^1Game starts in ^3%d^1 seconds"), countdown); - drawcolorcodedstring(o, s, fontsize, a, DRAWFLAG_NORMAL); - o.y += fontsize.y; - } + s = sprintf(_("^1Press ^3%s^1 to join"), getcommandkey(_("jump"), "+jump")); + InfoMessage(s); } - if(warmup_stage && !intermission) + + if (time < STAT(GAMESTARTTIME)) + { + //we need to ceil, otherwise the countdown would be off by .5 when using round() + float countdown = ceil(STAT(GAMESTARTTIME) - time); + s = sprintf(_("^1Game starts in ^3%d^1 seconds"), countdown); + InfoMessage(s); + } + + if(warmup_stage) { s = _("^2Currently in ^1warmup^2 stage!"); - drawInfoMessage(s); + InfoMessage(s); } string blinkcolor; @@ -117,14 +145,14 @@ void HUD_InfoMessages() else blinkcolor = "^3"; - if(ready_waiting && !intermission && !spectatee_status) + if(ready_waiting && !spectatee_status) { if(ready_waiting_for_me) { if(warmup_stage) - s = sprintf(_("%sPress ^3%s%s to end warmup"), blinkcolor, getcommandkey("ready", "ready"), blinkcolor); + s = sprintf(_("%sPress ^3%s%s to end warmup"), blinkcolor, getcommandkey(_("ready"), "ready"), blinkcolor); else - s = sprintf(_("%sPress ^3%s%s once you are ready"), blinkcolor, getcommandkey("ready", "ready"), blinkcolor); + s = sprintf(_("%sPress ^3%s%s once you are ready"), blinkcolor, getcommandkey(_("ready"), "ready"), blinkcolor); } else { @@ -133,18 +161,18 @@ void HUD_InfoMessages() else s = _("^2Waiting for others to ready up..."); } - drawInfoMessage(s); + InfoMessage(s); } - else if(warmup_stage && !intermission && !spectatee_status) + else if(warmup_stage && !spectatee_status) { - s = sprintf(_("^2Press ^3%s^2 to end warmup"), getcommandkey("ready", "ready")); - drawInfoMessage(s); + s = sprintf(_("^2Press ^3%s^2 to end warmup"), getcommandkey(_("ready"), "ready")); + InfoMessage(s); } - if(teamplay && !intermission && !spectatee_status && gametype != MAPINFO_TYPE_CA && teamnagger) + if(teamplay && !spectatee_status && gametype != MAPINFO_TYPE_CA && teamnagger) { float ts_min = 0, ts_max = 0; - tm = teams.sort_next; + entity tm = teams.sort_next; if (tm) { for (; tm.sort_next; tm = tm.sort_next) @@ -160,24 +188,18 @@ void HUD_InfoMessages() { s = strcat(blinkcolor, _("Teamnumbers are unbalanced!")); tm = GetTeam(myteam, false); - if (tm) - if (tm.team != NUM_SPECTATOR) - if (tm.team_size == ts_max) - s = strcat(s, sprintf(_(" Press ^3%s%s to adjust"), getcommandkey("team menu", "menu_showteamselect"), blinkcolor)); - drawInfoMessage(s); + if (tm && tm.team != NUM_SPECTATOR && tm.team_size == ts_max) + s = strcat(s, sprintf(_(" Press ^3%s%s to adjust"), getcommandkey(_("team menu"), "menu_showteamselect"), blinkcolor)); + InfoMessage(s); } } } } else { - s = _("^7Press ^3ESC ^7to show HUD options."); - drawInfoMessage(s); - s = _("^3Doubleclick ^7a panel for panel-specific options."); - drawInfoMessage(s); - s = _("^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"); - drawInfoMessage(s); - s = _("^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."); - drawInfoMessage(s); + InfoMessage(_("^7Press ^3ESC ^7to show HUD options.")); + InfoMessage(_("^3Doubleclick ^7a panel for panel-specific options.")); + InfoMessage(_("^3CTRL ^7to disable collision testing, ^3SHIFT ^7and")); + InfoMessage(_("^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments.")); } }