#include "hud.qh"
+#include "panel/scoreboard.qh"
+
#include "hud_config.qh"
#include "../mapvoting.qh"
-#include "../scoreboard.qh"
#include "../teamradar.qh"
#include <common/t_items.qh>
#include <common/deathtypes/all.qh>
-#include <common/items/all.qc>
+#include <common/items/_mod.qh>
#include <common/mapinfo.qh>
#include <common/vehicles/all.qh>
#include <common/mutators/mutator/waypoints/all.qh>
return eX * best_columns + eY * best_rows;
}
-// return the string of the onscreen race timer
-string MakeRaceString(int cp, float mytime, float theirtime, float lapdelta, string theirname)
-{
- TC(int, cp);
- string col;
- string timestr;
- string cpname;
- string lapstr;
- lapstr = "";
-
- if(theirtime == 0) // goal hit
- {
- if(mytime > 0)
- {
- timestr = strcat("+", ftos_decimals(+mytime, TIME_DECIMALS));
- col = "^1";
- }
- else if(mytime == 0)
- {
- timestr = "+0.0";
- col = "^3";
- }
- else
- {
- timestr = strcat("-", ftos_decimals(-mytime, TIME_DECIMALS));
- col = "^2";
- }
-
- if(lapdelta > 0)
- {
- lapstr = sprintf(_(" (-%dL)"), lapdelta);
- col = "^2";
- }
- else if(lapdelta < 0)
- {
- lapstr = sprintf(_(" (+%dL)"), -lapdelta);
- col = "^1";
- }
- }
- else if(theirtime > 0) // anticipation
- {
- if(mytime >= theirtime)
- timestr = strcat("+", ftos_decimals(mytime - theirtime, TIME_DECIMALS));
- else
- timestr = TIME_ENCODED_TOSTRING(TIME_ENCODE(theirtime));
- col = "^3";
- }
- else
- {
- col = "^7";
- timestr = "";
- }
-
- if(cp == 254)
- cpname = _("Start line");
- else if(cp == 255)
- cpname = _("Finish line");
- else if(cp)
- cpname = sprintf(_("Intermediate %d"), cp);
- else
- cpname = _("Finish line");
-
- if(theirtime < 0)
- return strcat(col, cpname);
- else if(theirname == "")
- return strcat(col, sprintf("%s (%s)", cpname, timestr));
- else
- return strcat(col, sprintf("%s (%s %s)", cpname, timestr, strcat(theirname, col, lapstr)));
-}
-
-// Check if the given name already exist in race rankings? In that case, where? (otherwise return 0)
-int race_CheckName(string net_name)
-{
- int i;
- for (i=RANKINGS_CNT-1;i>=0;--i)
- if(grecordholder[i] == net_name)
- return i+1;
- return 0;
-}
-
/*
==================
HUD panels
drawsubpic(pos + eX * mySize.x - eX * min(mySize.x * 0.5, mySize.y), eX * min(mySize.x * 0.5, mySize.y) + eY * mySize.y, pic, '0.75 0 0', '0.25 1 0', color, theAlpha, drawflag);
}
-void DrawNumIcon_expanding(vector myPos, vector mySize, float x, string icon, bool vertical, bool icon_right_align, vector color, float theAlpha, float fadelerp)
+void DrawNumIcon_expanding(vector myPos, vector mySize, float x, string icon, bool vertical, int icon_right_align, vector color, float theAlpha, float fadelerp)
{
- TC(bool, vertical); TC(bool, icon_right_align);
+ TC(bool, vertical); TC(int, icon_right_align);
vector newPos = '0 0 0', newSize = '0 0 0';
vector picpos, numpos;
DrawNumIcon_expanding(myPos, mySize, x, icon, vertical, icon_right_align, color, theAlpha, 0);
}
-#include "all.inc"
-
/*
==================
Main HUD system
}
}
+bool HUD_Minigame_Showpanels();
+
bool HUD_Panel_CheckFlags(int showflags)
{
TC(int, showflags);
void HUD_Reset()
{
// reset gametype specific icons
- if(gametype == MAPINFO_TYPE_CTF)
- HUD_Mod_CTF_Reset();
+ if(gametype.m_modicons_reset)
+ gametype.m_modicons_reset();
}
-float autocvar_hud_dynamic_shake;
-float autocvar_hud_dynamic_shake_damage_max;
-float autocvar_hud_dynamic_shake_damage_min;
-float autocvar_hud_dynamic_shake_scale;
+float autocvar_hud_dynamic_shake = 1;
+float autocvar_hud_dynamic_shake_damage_max = 130;
+float autocvar_hud_dynamic_shake_damage_min = 10;
+float autocvar_hud_dynamic_shake_scale = 0.2;
float hud_dynamic_shake_x[10] = {0, 1, -0.7, 0.5, -0.3, 0.2, -0.1, 0.1, 0.0, 0};
float hud_dynamic_shake_y[10] = {0, 0.4, 0.8, -0.2, -0.6, 0.0, 0.3, 0.1, -0.1, 0};
bool Hud_Shake_Update()
return true;
}
+entity CSQCModel_server2csqc(int i);
void calc_followmodel_ofs(entity view);
void Hud_Dynamic_Frame()
{
entity view = CSQCModel_server2csqc(player_localentnum - 1);
calc_followmodel_ofs(view);
ofs = -cl_followmodel_ofs * autocvar_hud_dynamic_follow_scale;
+ ofs.x *= autocvar_hud_dynamic_follow_scale_xyz.z;
+ ofs.y *= autocvar_hud_dynamic_follow_scale_xyz.x;
+ ofs.z *= autocvar_hud_dynamic_follow_scale_xyz.y;
+
+ if (fabs(ofs.x) < 0.001) ofs.x = 0;
+ if (fabs(ofs.y) < 0.001) ofs.y = 0;
+ if (fabs(ofs.z) < 0.001) ofs.z = 0;
+ ofs.x = bound(-0.1, ofs.x, 0.1);
+ ofs.y = bound(-0.1, ofs.y, 0.1);
+ ofs.z = bound(-0.1, ofs.z, 0.1);
+
+ hud_shift.x = ofs.y * vid_conwidth;
+ hud_shift.y = ofs.z * vid_conheight;
+ hud_shift.z = ofs.x;
+
+ hud_scale.x = (1 + hud_shift.z);
+ hud_scale.y = hud_scale.x;
}
- if (fabs(ofs.x) < 0.001) ofs.x = 0;
- if (fabs(ofs.y) < 0.001) ofs.y = 0;
- if (fabs(ofs.z) < 0.001) ofs.z = 0;
- ofs.x = bound(-0.1, ofs.x, 0.1);
- ofs.y = bound(-0.1, ofs.y, 0.1);
- ofs.z = bound(-0.1, ofs.z, 0.1);
-
- hud_shift.x = ofs.y * vid_conwidth;
- hud_shift.y = ofs.z * vid_conheight;
- hud_shift.z = ofs.x;
-
- hud_scale.x = (1 + hud_shift.z);
- hud_scale.y = hud_scale.x;
-
if(autocvar_hud_dynamic_shake > 0)
{
+ static float old_health = 0;
+ float health = max(-1, STAT(HEALTH));
if(hud_dynamic_shake_factor == -1) // don't allow the effect for this frame
+ {
hud_dynamic_shake_factor = 0;
+ old_health = health;
+ }
else
{
- float health = STAT(HEALTH);
float new_hud_dynamic_shake_factor = 0;
- if(prev_health - health >= autocvar_hud_dynamic_shake_damage_min && autocvar_hud_dynamic_shake_damage_max > autocvar_hud_dynamic_shake_damage_min)
+ if (old_health - health >= autocvar_hud_dynamic_shake_damage_min
+ && autocvar_hud_dynamic_shake_damage_max > autocvar_hud_dynamic_shake_damage_min
+ && old_health > 0 && !intermission)
{
float m = max(autocvar_hud_dynamic_shake_damage_min, 1);
- new_hud_dynamic_shake_factor = (prev_health - health - m) / (autocvar_hud_dynamic_shake_damage_max - m);
+ new_hud_dynamic_shake_factor = (old_health - health - m) / (autocvar_hud_dynamic_shake_damage_max - m);
if(new_hud_dynamic_shake_factor >= 1)
new_hud_dynamic_shake_factor = 1;
if(new_hud_dynamic_shake_factor >= hud_dynamic_shake_factor)
hud_dynamic_shake_time = time;
}
}
+ old_health = health;
if(hud_dynamic_shake_factor)
if(!Hud_Shake_Update())
hud_dynamic_shake_factor = 0;
}
- }
- if(hud_dynamic_shake_factor > 0)
- {
- hud_shift.x += hud_dynamic_shake_realofs.x;
- hud_shift.y += hud_dynamic_shake_realofs.y;
+ if(hud_dynamic_shake_factor > 0)
+ {
+ hud_shift.x += hud_dynamic_shake_realofs.x;
+ hud_shift.y += hud_dynamic_shake_realofs.y;
+ }
}
hud_scale_center.x = 0.5 * vid_conwidth;
void HUD_Main()
{
int i;
- // global hud theAlpha fade
- if(menu_enabled == 1)
+ // global hud alpha fade (scoreboard-related panels behave differently and override it temporarly)
+ if(hud_configure_menu_open == 1)
hud_fade_alpha = 1;
+ else if(!autocvar__hud_configure)
+ hud_fade_alpha = (1 - scoreboard_fade_alpha) * (1 - autocvar__menu_alpha);
else
- hud_fade_alpha = (1 - autocvar__menu_alpha);
-
- if(scoreboard_fade_alpha)
- hud_fade_alpha = (1 - scoreboard_fade_alpha);
+ hud_fade_alpha = 1 - autocvar__menu_alpha;
HUD_Configure_Frame();
// they must fade only when the menu does
if(scoreboard_fade_alpha == 1)
{
- HUD_Panel_Draw(HUD_PANEL(CENTERPRINT));
- return;
+ if(autocvar__menu_alpha == 1)
+ return;
+ if(scoreboard_fade_alpha == 1)
+ {
+ HUD_Panel_Draw(HUD_PANEL(SCOREBOARD));
+ HUD_Panel_Draw(HUD_PANEL(CENTERPRINT));
+ return;
+ }
}
if(!autocvar__hud_configure && !hud_fade_alpha)
}
}
if (warning)
- LOG_TRACE("Automatically fixed wrong/missing panel numbers in _hud_panelorder\n");
+ LOG_TRACE("Automatically fixed wrong/missing panel numbers in _hud_panelorder");
cvar_set("_hud_panelorder", s);
if(hud_panelorder_prev)