X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fhud.qc;h=87b07370493992d51f47f971d14dfc36cb196a17;hb=3ef447bf0611d1b189f81072db7bbfd988b2f19e;hp=8db3f00eb3c38969bf94a53777b75b7df22936dc;hpb=21403f1e9510d608415d14bf4348880b9ff42204;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/hud.qc b/qcsrc/client/hud.qc index 8db3f00eb..87b073704 100644 --- a/qcsrc/client/hud.qc +++ b/qcsrc/client/hud.qc @@ -988,7 +988,7 @@ void HUD_Ammo(void) } } -void DrawNumIcon(vector myPos, vector mySize, float x, string icon, float vertical, float icon_right_align, vector color, float theAlpha) +void DrawNumIcon_expanding(vector myPos, vector mySize, float x, string icon, float vertical, float icon_right_align, vector color, float theAlpha, float fadelerp) { vector newPos, newSize; vector picpos, numpos; @@ -1061,32 +1061,39 @@ void DrawNumIcon(vector myPos, vector mySize, float x, string icon, float vertic picpos = newPos; } - drawstring_aspect(numpos, ftos(x), '2 1 0' * newSize_y, color, panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL); - drawpic_aspect_skin(picpos, icon, '1 1 0' * newSize_y, '1 1 1', panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL); + // NOTE: newSize_x is always equal to 3 * mySize_y so we can use + // '2 1 0' * newSize_y instead of eX * (2/3) * newSize_x + eY * newSize_y + drawstring_aspect_expanding(numpos, ftos(x), '2 1 0' * newSize_y, color, panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL, fadelerp); + drawpic_aspect_skin_expanding(picpos, icon, '1 1 0' * newSize_y, '1 1 1', panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL, fadelerp); } -void DrawNumIcon_expanding(vector myPos, vector mySize, float x, string icon, float vertical, float icon_right_align, vector color, float fadelerp) +void DrawNumIcon(vector myPos, vector mySize, float x, string icon, float vertical, float icon_right_align, vector color, float theAlpha) { - float sz; - sz = expandingbox_sizefactor_from_fadelerp(fadelerp); - - DrawNumIcon(myPos + expandingbox_resize_centered_box_offset(sz, mySize, 1), mySize * sz, x, icon, vertical, icon_right_align, color, (1 - fadelerp)); + DrawNumIcon_expanding(myPos, mySize, x, icon, vertical, icon_right_align, color, theAlpha, 0); } // Powerups (#2) // void HUD_Powerups(void) { - float strength_time, shield_time; + float strength_time, shield_time, superweapons_time; if(!autocvar__hud_configure) { if(!autocvar_hud_panel_powerups) return; if(spectatee_status == -1) return; - if not(getstati(STAT_ITEMS, 0, 24) & (IT_STRENGTH | IT_INVINCIBLE)) return; + if not(getstati(STAT_ITEMS, 0, 24) & (IT_STRENGTH | IT_INVINCIBLE | IT_SUPERWEAPON)) return; if (getstati(STAT_HEALTH) <= 0) return; strength_time = bound(0, getstatf(STAT_STRENGTH_FINISHED) - time, 99); shield_time = bound(0, getstatf(STAT_INVINCIBLE_FINISHED) - time, 99); + superweapons_time = bound(0, getstatf(STAT_SUPERWEAPONS_FINISHED) - time, 99); + + if (getstati(STAT_ITEMS, 0, 24) & IT_UNLIMITED_SUPERWEAPONS) + superweapons_time = 99; // force max + + // prevent stuff to show up on mismatch that will be fixed next frame + if (!(getstati(STAT_ITEMS, 0, 24) & IT_SUPERWEAPON)) + superweapons_time = 0; } else { @@ -1094,6 +1101,7 @@ void HUD_Powerups(void) strength_time = 15; shield_time = 27; + superweapons_time = 13; } HUD_Panel_UpdateCvars(powerups); @@ -1102,7 +1110,7 @@ void HUD_Powerups(void) pos = panel_pos; mySize = panel_size; - HUD_Panel_DrawBg(bound(0, max(strength_time, shield_time), 1)); + HUD_Panel_DrawBg(bound(0, max(strength_time, shield_time, superweapons_time), 1)); if(panel_bg_padding) { pos += '1 1 0' * panel_bg_padding; @@ -1111,26 +1119,73 @@ void HUD_Powerups(void) float panel_ar = mySize_x/mySize_y; float is_vertical = (panel_ar < 1); - vector shield_offset, strength_offset; - if (panel_ar >= 4 || (panel_ar >= 1/4 && panel_ar < 1)) + vector shield_offset, strength_offset, superweapons_offset; + + float superweapons_is = -1; + + if(superweapons_time) + { + if(strength_time) + { + if(shield_time) + superweapons_is = 0; + else + superweapons_is = 2; + } + else + { + if(shield_time) + superweapons_is = 1; + else + superweapons_is = 2; + } + } + + // FIXME handle superweapons here + if(superweapons_is == 0) { - mySize_x *= 0.5; - if (autocvar_hud_panel_powerups_flip) - shield_offset_x = mySize_x; + if (panel_ar >= 4 || (panel_ar >= 1/4 && panel_ar < 1)) + { + mySize_x *= (1.0 / 3.0); + superweapons_offset_x = mySize_x; + if (autocvar_hud_panel_powerups_flip) + shield_offset_x = 2*mySize_x; + else + strength_offset_x = 2*mySize_x; + } else - strength_offset_x = mySize_x; + { + mySize_y *= (1.0 / 3.0); + superweapons_offset_y = mySize_y; + if (autocvar_hud_panel_powerups_flip) + shield_offset_y = 2*mySize_y; + else + strength_offset_y = 2*mySize_y; + } } else { - mySize_y *= 0.5; - if (autocvar_hud_panel_powerups_flip) - shield_offset_y = mySize_y; + if (panel_ar >= 4 || (panel_ar >= 1/4 && panel_ar < 1)) + { + mySize_x *= 0.5; + if (autocvar_hud_panel_powerups_flip) + shield_offset_x = mySize_x; + else + strength_offset_x = mySize_x; + } else - strength_offset_y = mySize_y; + { + mySize_y *= 0.5; + if (autocvar_hud_panel_powerups_flip) + shield_offset_y = mySize_y; + else + strength_offset_y = mySize_y; + } } - float shield_baralign, strength_baralign; - float shield_iconalign, strength_iconalign; + float shield_baralign, strength_baralign, superweapons_baralign; + float shield_iconalign, strength_iconalign, superweapons_iconalign; + if (autocvar_hud_panel_powerups_flip) { strength_baralign = (autocvar_hud_panel_powerups_baralign == 2 || autocvar_hud_panel_powerups_baralign == 1); @@ -1146,6 +1201,24 @@ void HUD_Powerups(void) strength_iconalign = (autocvar_hud_panel_powerups_iconalign == 3 || autocvar_hud_panel_powerups_iconalign == 1); } + if(superweapons_is == 0) + { + superweapons_iconalign = strength_iconalign; + superweapons_baralign = 2; + } + else if(superweapons_is == 1) + { + superweapons_offset = strength_offset; + superweapons_iconalign = strength_iconalign; + superweapons_baralign = strength_baralign; + } + else if(superweapons_is == 2) + { + superweapons_offset = shield_offset; + superweapons_iconalign = shield_iconalign; + superweapons_baralign = shield_baralign; + } + if(shield_time) { const float maxshield = 30; @@ -1160,7 +1233,7 @@ void HUD_Powerups(void) if(shield > 1) DrawNumIcon(pos + shield_offset, mySize, shield, "shield", is_vertical, shield_iconalign, '1 1 1', 1); if(shield <= 5) - DrawNumIcon_expanding(pos + shield_offset, mySize, shield, "shield", is_vertical, shield_iconalign, '1 1 1', bound(0, (shield - shield_time) / 0.5, 1)); + DrawNumIcon_expanding(pos + shield_offset, mySize, shield, "shield", is_vertical, shield_iconalign, '1 1 1', 1, bound(0, (shield - shield_time) / 0.5, 1)); } } @@ -1178,7 +1251,25 @@ void HUD_Powerups(void) if(strength > 1) DrawNumIcon(pos + strength_offset, mySize, strength, "strength", is_vertical, strength_iconalign, '1 1 1', 1); if(strength <= 5) - DrawNumIcon_expanding(pos + strength_offset, mySize, strength, "strength", is_vertical, strength_iconalign, '1 1 1', bound(0, (strength - strength_time) / 0.5, 1)); + DrawNumIcon_expanding(pos + strength_offset, mySize, strength, "strength", is_vertical, strength_iconalign, '1 1 1', 1, bound(0, (strength - strength_time) / 0.5, 1)); + } + } + + if(superweapons_time) + { + const float maxsuperweapons = 30; + float superweapons = ceil(superweapons_time); + if(autocvar_hud_panel_powerups_progressbar) + { + HUD_Panel_GetProgressBarColor(superweapons); + HUD_Panel_DrawProgressBar(pos + superweapons_offset, mySize, autocvar_hud_panel_powerups_progressbar_superweapons, superweapons/maxsuperweapons, is_vertical, superweapons_baralign, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL); + } + if(autocvar_hud_panel_powerups_text) + { + if(superweapons > 1) + DrawNumIcon(pos + superweapons_offset, mySize, superweapons, "superweapons", is_vertical, superweapons_iconalign, '1 1 1', 1); + if(superweapons <= 5) + DrawNumIcon_expanding(pos + superweapons_offset, mySize, superweapons, "superweapons", is_vertical, superweapons_iconalign, '1 1 1', 1, bound(0, (superweapons - superweapons_time) / 0.5, 1)); } } } @@ -2690,6 +2781,7 @@ void HUD_Score(void) string sign; vector distribution_color; entity tm, pl, me; + #ifdef COMPAT_XON050_ENGINE me = (spectatee_status > 0) ? playerslots[spectatee_status - 1] : playerslots[player_localentnum - 1]; #else @@ -4302,14 +4394,16 @@ void HUD_Physics(void) conversion_factor = 0.0254 * 1.943844492; // 1 m/s = 1.943844492 knots, because 1 knot = 1.852 km/h break; } + + vector vel = (csqcplayer ? csqcplayer.velocity : pmove_vel); float max_speed = floor( autocvar_hud_panel_physics_speed_max * conversion_factor + 0.5 ); if (autocvar__hud_configure) speed = floor( max_speed * 0.65 + 0.5 ); else if(autocvar_hud_panel_physics_speed_vertical) - speed = floor( vlen(pmove_vel) * conversion_factor + 0.5 ); + speed = floor( vlen(vel) * conversion_factor + 0.5 ); else - speed = floor( vlen(pmove_vel - pmove_vel_z * '0 0 1') * conversion_factor + 0.5 ); + speed = floor( vlen(vel - vel_z * '0 0 1') * conversion_factor + 0.5 ); //compute acceleration float acceleration, f; @@ -4320,13 +4414,13 @@ void HUD_Physics(void) // 1 m/s = 0.0254 qu/s; 1 g = 9.80665 m/s^2 f = time - acc_prevtime; if(autocvar_hud_panel_physics_acceleration_vertical) - acceleration = (vlen(pmove_vel) - vlen(acc_prevspeed)); + acceleration = (vlen(vel) - vlen(acc_prevspeed)); else - acceleration = (vlen(pmove_vel - '0 0 1' * pmove_vel_z) - vlen(acc_prevspeed - '0 0 1' * acc_prevspeed_z)); + acceleration = (vlen(vel - '0 0 1' * vel_z) - vlen(acc_prevspeed - '0 0 1' * acc_prevspeed_z)); acceleration = acceleration * (1 / max(0.0001, f)) * (0.0254 / 9.80665); - acc_prevspeed = pmove_vel; + acc_prevspeed = vel; acc_prevtime = time; f = bound(0, f * 10, 1); @@ -4823,11 +4917,11 @@ switch (id) {\ case (HUD_PANEL_ENGINEINFO):\ HUD_EngineInfo(); break;\ case (HUD_PANEL_INFOMESSAGES):\ - HUD_InfoMessages(); break;\ + HUD_InfoMessages(); break;\ case (HUD_PANEL_PHYSICS):\ - HUD_Physics(); break;\ + HUD_Physics(); break;\ case (HUD_PANEL_CENTERPRINT):\ - HUD_CenterPrint(); break;\ + HUD_CenterPrint(); break;\ } ENDS_WITH_CURLY_BRACE void HUD_Main (void) @@ -4842,17 +4936,14 @@ void HUD_Main (void) if(scoreboard_fade_alpha) hud_fade_alpha = (1 - scoreboard_fade_alpha); + if(autocvar__hud_configure) + if(isdemo()) + HUD_Configure_Exit_Force(); + if(intermission == 2) // no hud during mapvote { - if (autocvar__hud_configure) //force exit from hud config - { - if (menu_enabled) - { - menu_enabled = 0; - localcmd("togglemenu\n"); - } - cvar_set("_hud_configure", "0"); - } + if (autocvar__hud_configure) + HUD_Configure_Exit_Force(); hud_fade_alpha = 0; } else if(autocvar__menu_alpha == 0 && scoreboard_fade_alpha == 0) @@ -4884,12 +4975,15 @@ void HUD_Main (void) hud_configure_gridSize_y = bound(0.005, cvar("hud_configure_grid_ysize"), 0.2); hud_configure_realGridSize_x = hud_configure_gridSize_x * vid_conwidth; hud_configure_realGridSize_y = hud_configure_gridSize_y * vid_conheight; + vector s; // x-axis - for(i = 0; i < 1/hud_configure_gridSize_x; ++i) - drawfill(eX * i * hud_configure_realGridSize_x, eX + eY * vid_conheight, '0.5 0.5 0.5', autocvar_hud_configure_grid_alpha, DRAWFLAG_NORMAL); + s = eX + eY * vid_conheight; + for(i = 1; i < 1/hud_configure_gridSize_x; ++i) + drawfill(eX * i * hud_configure_realGridSize_x, s, '0.5 0.5 0.5', autocvar_hud_configure_grid_alpha, DRAWFLAG_NORMAL); // y-axis - for(i = 0; i < 1/hud_configure_gridSize_y; ++i) - drawfill(eY * i * hud_configure_realGridSize_y, eY + eX * vid_conwidth, '0.5 0.5 0.5', autocvar_hud_configure_grid_alpha, DRAWFLAG_NORMAL); + s = eY + eX * vid_conwidth; + for(i = 1; i < 1/hud_configure_gridSize_y; ++i) + drawfill(eY * i * hud_configure_realGridSize_y, s, '0.5 0.5 0.5', autocvar_hud_configure_grid_alpha, DRAWFLAG_NORMAL); } #ifdef COMPAT_XON050_ENGINE @@ -5002,7 +5096,14 @@ void HUD_Main (void) HUD_Panel_UpdatePosSizeForId(highlightedPanel); HUD_Panel_HlBorder(panel_bg_border + 1.5 * hlBorderSize, '0 0.5 1', 0.25 * (1 - autocvar__menu_alpha)); } + if (!hud_configure_prev) + { + setcursormode(1); + hudShiftState = 0; + } } + else if (hud_configure_prev) + setcursormode(0); hud_configure_prev = autocvar__hud_configure;