Commit ab15353d authored by Mario's avatar Mario

Merge branch 'terencehill/itemstime' into 'master'

Items Time

Features:
* Panel that displays left time until important items respawn in the map: mega health, large armor, powerups (strenght, invincible, jetpack, fuel regenerator) and superweapons.

* Waypoints for mega health and large armor, displayed just like the existing powerup waypoints, obviously visible only to spectators

Panel and waypoints can be enabled when spectating (g_waypointsprite_itemstime 1, hud_panel_itemstime 1) or also when playing in warmup stage (g_waypointsprite_itemstime 2, hud_panel_itemstime 2).

In order to prevent cheating, server can completely disable this feature by setting sv_itemstime to 0 (1 by default).

See merge request !133
parents 367e29da 3108bc8e
......@@ -41,6 +41,9 @@ seta hud_panel_engineinfo_framecounter_exponentialmovingaverage_instantupdate_ch
seta hud_panel_physics_acceleration_movingaverage 1 "use an averaging method for calculating acceleration instead of the real value"
seta hud_panel_phisics_update_interval 0.0666 "how often (in seconds) numeric values get updated on screen"
seta hud_panel_itemstime_progressbar_maxtime "30" "when left time is at least this amount, the status bar is full"
seta hud_panel_itemstime_hidespawned "1" "if 1 hide an item from the panel when all the occurrences of it are available again; if 2 hide it when at least one occurrence is available again"
// hud panel aliases
alias hud_panel_radar_rotate "toggle hud_panel_radar_rotation 0 1 2 3 4"
alias +hud_panel_radar_maximized "cl_cmd hud radar 1"
......
......@@ -310,3 +310,20 @@ seta hud_panel_mapvote_bg_color_team "" "override panel color with team color in
seta hud_panel_mapvote_bg_alpha "" "if set to something else than \"\" = override default panel background alpha"
seta hud_panel_mapvote_bg_border "" "if set to something else than \"\" = override default size of border around the background"
seta hud_panel_mapvote_bg_padding "" "if set to something else than \"\" = override default padding of contents from border"
seta hud_panel_itemstime "" "enable/disable this panel, it shows left time until important items (mega health, large armor, powerups, superweapons, etc...) respawn in the map: 1 when spectating, 2 even playing in warmup stage"
seta hud_panel_itemstime_pos "" "position of this base of the panel"
seta hud_panel_itemstime_size "" "size of this panel"
seta hud_panel_itemstime_bg "" "if set to something else than \"\" = override default background"
seta hud_panel_itemstime_bg_color "" "if set to something else than \"\" = override default panel background color"
seta hud_panel_itemstime_bg_color_team "" "override panel color with team color in team based games"
seta hud_panel_itemstime_bg_alpha "" "if set to something else than \"\" = override default panel background alpha"
seta hud_panel_itemstime_bg_border "" "if set to something else than \"\" = override default size of border around the background"
seta hud_panel_itemstime_bg_padding "" "if set to something else than \"\" = override default padding of contents from border"
seta hud_panel_itemstime_iconalign "" "0 = align icons to the left, 1 = align icons to the right"
seta hud_panel_itemstime_progressbar "" "use progressbar behind icons"
seta hud_panel_itemstime_progressbar_name "" "name of progressbar to use behind icons"
seta hud_panel_itemstime_progressbar_reduced "" "progressbar is displayed only in the text field"
seta hud_panel_itemstime_text "" "show text"
seta hud_panel_itemstime_ratio "" "ratio between space reserved for text and icon width of each item entry (min value is 2)"
seta hud_panel_itemstime_dynamicsize "" "allow panel size reduction by removing spacing among items"
......@@ -758,6 +758,7 @@ seta g_waypointsprite_crosshairfadedistance 150 "distance in virtual pixels from
seta g_waypointsprite_distancefadealpha 1 "alpha multiplier near distance"
seta g_waypointsprite_distancefadescale 0.7 "scale multiplier near the distance"
seta g_waypointsprite_distancefadedistancemultiplier 0.5 "distance in map sizes from distance where to stop fading"
seta g_waypointsprite_itemstime 2 "show waypoints to indicate that some important items (mega health, large armor) are about to respawn: 1 when spectating, 2 even playing in warmup stage"
set g_waypointsprite_spam 0 "Debugging feature. Set to 10 and load courtfun in race mode to test."
alias "g_waypointsprite_personal" "impulse 30"
alias "g_waypointsprite_personal_p" "impulse 31"
......@@ -779,6 +780,8 @@ seta g_waypointsprite_turrets 1 "disable turret waypoints"
seta g_waypointsprite_turrets_maxdist 5000 "max distace for turret sprites"
seta g_waypointsprite_tactical 1 "tactical overlay on turrets when in a vehicle"
set sv_itemstime 1 "enable networking of left time until respawn for items such as mega health and large armor"
// so it can be stuffcmd-ed still
set cl_gravity 800 "but ignored anyway"
......
......@@ -26,7 +26,7 @@ seta hud_progressbar_acceleration_neg_color "0.86 0.35 0"
seta hud_progressbar_vehicles_ammo1_color "0.77 0.67 0"
seta hud_progressbar_vehicles_ammo2_color "0.86 0.35 0"
seta _hud_panelorder "17 15 12 9 5 10 6 14 0 7 4 11 2 1 3 8 13 16 "
seta _hud_panelorder "17 15 12 9 5 10 6 14 0 7 4 11 2 1 3 8 13 16 18"
seta hud_configure_grid "1"
seta hud_configure_grid_xsize "0.005000"
......@@ -309,4 +309,21 @@ seta hud_panel_mapvote_bg_alpha ""
seta hud_panel_mapvote_bg_border ""
seta hud_panel_mapvote_bg_padding ""
seta hud_panel_itemstime 2
seta hud_panel_itemstime_pos "0.030000 0.260000"
seta hud_panel_itemstime_size "0.070000 0.230000"
seta hud_panel_itemstime_bg "border_itemstime"
seta hud_panel_itemstime_bg_color ""
seta hud_panel_itemstime_bg_color_team ""
seta hud_panel_itemstime_bg_alpha ""
seta hud_panel_itemstime_bg_border ""
seta hud_panel_itemstime_bg_padding ""
seta hud_panel_itemstime_iconalign "0"
seta hud_panel_itemstime_progressbar "0"
seta hud_panel_itemstime_progressbar_name "progressbar"
seta hud_panel_itemstime_progressbar_reduced "0"
seta hud_panel_itemstime_text "1"
seta hud_panel_itemstime_ratio "2"
seta hud_panel_itemstime_dynamicsize "1"
menu_sync
......@@ -26,7 +26,7 @@ seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
seta hud_progressbar_vehicles_ammo1_color "0.8 0.7 0"
seta hud_progressbar_vehicles_ammo2_color "0.7 0.4 0"
seta _hud_panelorder "17 15 12 9 10 5 6 14 0 7 4 11 2 1 3 8 13 16 "
seta _hud_panelorder "17 15 12 9 10 5 6 14 0 7 4 11 2 1 3 8 13 16 18"
seta hud_configure_grid "1"
seta hud_configure_grid_xsize "0.010000"
......@@ -309,4 +309,21 @@ seta hud_panel_mapvote_bg_alpha ""
seta hud_panel_mapvote_bg_border ""
seta hud_panel_mapvote_bg_padding ""
seta hud_panel_itemstime 2
seta hud_panel_itemstime_pos "0.030000 0.260000"
seta hud_panel_itemstime_size "0.070000 0.230000"
seta hud_panel_itemstime_bg "border_itemstime"
seta hud_panel_itemstime_bg_color ""
seta hud_panel_itemstime_bg_color_team ""
seta hud_panel_itemstime_bg_alpha ""
seta hud_panel_itemstime_bg_border ""
seta hud_panel_itemstime_bg_padding ""
seta hud_panel_itemstime_iconalign "0"
seta hud_panel_itemstime_progressbar "0"
seta hud_panel_itemstime_progressbar_name "progressbar"
seta hud_panel_itemstime_progressbar_reduced "0"
seta hud_panel_itemstime_text "1"
seta hud_panel_itemstime_ratio "2"
seta hud_panel_itemstime_dynamicsize "1"
menu_sync
......@@ -26,7 +26,7 @@ seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
seta hud_progressbar_vehicles_ammo1_color "0.8 0.7 0"
seta hud_progressbar_vehicles_ammo2_color "0.7 0.4 0"
seta _hud_panelorder "17 10 3 0 14 6 9 13 4 1 2 11 12 7 5 8 15 16 "
seta _hud_panelorder "17 10 3 0 14 6 9 13 4 1 2 11 12 7 5 8 15 16 18"
seta hud_configure_grid "1"
seta hud_configure_grid_xsize "0.010000"
......@@ -309,4 +309,21 @@ seta hud_panel_mapvote_bg_alpha ""
seta hud_panel_mapvote_bg_border ""
seta hud_panel_mapvote_bg_padding ""
seta hud_panel_itemstime 2
seta hud_panel_itemstime_pos "0.000000 0.310000"
seta hud_panel_itemstime_size "0.070000 0.180000"
seta hud_panel_itemstime_bg ""
seta hud_panel_itemstime_bg_color ""
seta hud_panel_itemstime_bg_color_team ""
seta hud_panel_itemstime_bg_alpha ""
seta hud_panel_itemstime_bg_border ""
seta hud_panel_itemstime_bg_padding ""
seta hud_panel_itemstime_iconalign "0"
seta hud_panel_itemstime_progressbar "0"
seta hud_panel_itemstime_progressbar_name "progressbar"
seta hud_panel_itemstime_progressbar_reduced "0"
seta hud_panel_itemstime_text "1"
seta hud_panel_itemstime_ratio "2"
seta hud_panel_itemstime_dynamicsize "1"
menu_sync
......@@ -26,7 +26,7 @@ seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
seta hud_progressbar_vehicles_ammo1_color "0.8 0.7 0"
seta hud_progressbar_vehicles_ammo2_color "0.7 0.4 0"
seta _hud_panelorder "17 15 3 1 2 11 10 0 14 6 9 13 4 12 7 5 8 16 "
seta _hud_panelorder "17 15 3 1 2 11 10 0 14 6 9 13 4 12 7 5 8 16 18"
seta hud_configure_grid "1"
seta hud_configure_grid_xsize "0.010000"
......@@ -309,4 +309,21 @@ seta hud_panel_mapvote_bg_alpha ""
seta hud_panel_mapvote_bg_border ""
seta hud_panel_mapvote_bg_padding ""
seta hud_panel_itemstime 2
seta hud_panel_itemstime_pos "0.000000 0.310000"
seta hud_panel_itemstime_size "0.070000 0.180000"
seta hud_panel_itemstime_bg ""
seta hud_panel_itemstime_bg_color ""
seta hud_panel_itemstime_bg_color_team ""
seta hud_panel_itemstime_bg_alpha ""
seta hud_panel_itemstime_bg_border ""
seta hud_panel_itemstime_bg_padding ""
seta hud_panel_itemstime_iconalign "0"
seta hud_panel_itemstime_progressbar "0"
seta hud_panel_itemstime_progressbar_name "progressbar"
seta hud_panel_itemstime_progressbar_reduced "0"
seta hud_panel_itemstime_text "1"
seta hud_panel_itemstime_ratio "2"
seta hud_panel_itemstime_dynamicsize "1"
menu_sync
......@@ -26,7 +26,7 @@ seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
seta hud_progressbar_vehicles_ammo1_color "0.8 0.7 0"
seta hud_progressbar_vehicles_ammo2_color "0.7 0.4 0"
seta _hud_panelorder "17 15 10 9 6 8 14 5 0 4 13 2 7 1 3 11 12 16 "
seta _hud_panelorder "17 15 10 9 6 8 14 5 0 4 13 2 7 1 3 11 12 16 18"
seta hud_configure_grid "1"
seta hud_configure_grid_xsize "0.010000"
......@@ -309,4 +309,21 @@ seta hud_panel_mapvote_bg_alpha ""
seta hud_panel_mapvote_bg_border ""
seta hud_panel_mapvote_bg_padding ""
seta hud_panel_itemstime 2
seta hud_panel_itemstime_pos "0.020000 0.490000"
seta hud_panel_itemstime_size "0.090000 0.140000"
seta hud_panel_itemstime_bg "0"
seta hud_panel_itemstime_bg_color ""
seta hud_panel_itemstime_bg_color_team ""
seta hud_panel_itemstime_bg_alpha ""
seta hud_panel_itemstime_bg_border ""
seta hud_panel_itemstime_bg_padding ""
seta hud_panel_itemstime_iconalign "0"
seta hud_panel_itemstime_progressbar "1"
seta hud_panel_itemstime_progressbar_name "progressbar"
seta hud_panel_itemstime_progressbar_reduced "1"
seta hud_panel_itemstime_text "1"
seta hud_panel_itemstime_ratio "3.5"
seta hud_panel_itemstime_dynamicsize "1"
menu_sync
......@@ -26,7 +26,7 @@ seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
seta hud_progressbar_vehicles_ammo1_color "0.8 0.7 0"
seta hud_progressbar_vehicles_ammo2_color "0.7 0.4 0"
seta _hud_panelorder "17 15 0 11 8 5 6 14 9 13 7 2 3 1 10 12 4 16 "
seta _hud_panelorder "17 15 0 11 8 5 6 14 9 13 7 2 3 1 10 12 4 16 18"
seta hud_configure_grid "1"
seta hud_configure_grid_xsize "0.01"
......@@ -309,4 +309,21 @@ seta hud_panel_mapvote_bg_alpha ""
seta hud_panel_mapvote_bg_border ""
seta hud_panel_mapvote_bg_padding ""
seta hud_panel_itemstime 2
seta hud_panel_itemstime_pos "0.000000 0.290000"
seta hud_panel_itemstime_size "0.150000 0.060000"
seta hud_panel_itemstime_bg "0"
seta hud_panel_itemstime_bg_color ""
seta hud_panel_itemstime_bg_color_team ""
seta hud_panel_itemstime_bg_alpha ""
seta hud_panel_itemstime_bg_border ""
seta hud_panel_itemstime_bg_padding ""
seta hud_panel_itemstime_iconalign "0"
seta hud_panel_itemstime_progressbar "0"
seta hud_panel_itemstime_progressbar_name "progressbar"
seta hud_panel_itemstime_progressbar_reduced "0"
seta hud_panel_itemstime_text "1"
seta hud_panel_itemstime_ratio "2"
seta hud_panel_itemstime_dynamicsize "1"
menu_sync
......@@ -172,6 +172,7 @@ float autocvar_g_waypointsprite_edgeoffset_left;
float autocvar_g_waypointsprite_edgeoffset_right;
float autocvar_g_waypointsprite_edgeoffset_top;
float autocvar_g_waypointsprite_fontsize;
int autocvar_g_waypointsprite_itemstime;
float autocvar_g_waypointsprite_minalpha;
float autocvar_g_waypointsprite_minscale;
float autocvar_g_waypointsprite_normdistance;
......@@ -268,6 +269,16 @@ float autocvar_hud_panel_healtharmor_progressbar_gfx_damage;
float autocvar_hud_panel_healtharmor_progressbar_gfx_lowhealth;
float autocvar_hud_panel_healtharmor_progressbar_gfx_smooth;
int autocvar_hud_panel_healtharmor_text;
int autocvar_hud_panel_itemstime = 2;
float autocvar_hud_panel_itemstime_dynamicsize = 1;
float autocvar_hud_panel_itemstime_ratio = 2;
int autocvar_hud_panel_itemstime_iconalign;
bool autocvar_hud_panel_itemstime_progressbar = 0;
float autocvar_hud_panel_itemstime_progressbar_maxtime = 30;
string autocvar_hud_panel_itemstime_progressbar_name = "progressbar";
float autocvar_hud_panel_itemstime_progressbar_reduced;
bool autocvar_hud_panel_itemstime_hidespawned = 1;
int autocvar_hud_panel_itemstime_text = 1;
bool autocvar_hud_panel_infomessages;
bool autocvar_hud_panel_infomessages_flip;
bool autocvar_hud_panel_modicons;
......
......@@ -4604,6 +4604,252 @@ void HUD_CenterPrint (void)
}
}
// ItemsTime (#XX)
//
const float ITEMSTIME_MAXITEMS = 10;
float ItemsTime_time[ITEMSTIME_MAXITEMS];
float ItemsTime_availableTime[ITEMSTIME_MAXITEMS];
string GetItemsTimePicture(float i)
{
switch(i)
{
case 0: return "item_large_armor";
case 1: return "item_mega_health";
case 2: return "item_strength";
case 3: return "item_shield";
case 4: return "item_mega_health";
case 5: return "item_strength";
case 6: return "item_shield";
case 7: return "fuelregen";
case 8: return "jetpack";
case 9: return "superweapons";
default: return "";
}
}
void DrawItemsTimeItem(vector myPos, vector mySize, float ar, float itemcode, float item_time, bool item_available, float item_availableTime)
{
float t = 0;
vector color = '0 0 0';
float picalpha;
if(autocvar_hud_panel_itemstime_hidespawned == 2)
picalpha = 1;
else if(item_available)
{
float BLINK_FACTOR = 0.15;
float BLINK_BASE = 0.85;
float BLINK_FREQ = 5;
picalpha = BLINK_BASE + BLINK_FACTOR * cos(time * BLINK_FREQ);
}
else
picalpha = 0.3;
t = floor(item_time - time + 0.999);
if(t < 5)
color = '0.7 0 0';
else if(t < 10)
color = '0.7 0.7 0';
else
color = '1 1 1';
vector picpos, numpos;
if(autocvar_hud_panel_itemstime_iconalign)
{
numpos = myPos;
picpos = myPos + eX * (ar - 1) * mySize_y;
}
else
{
numpos = myPos + eX * mySize_y;
picpos = myPos;
}
if(t > 0 && autocvar_hud_panel_itemstime_progressbar)
{
vector p_pos, p_size;
if(autocvar_hud_panel_itemstime_progressbar_reduced)
{
p_pos = numpos;
p_size = eX * ((ar - 1)/ar) * mySize_x + eY * mySize_y;
}
else
{
p_pos = myPos;
p_size = mySize;
}
HUD_Panel_DrawProgressBar(p_pos, p_size, autocvar_hud_panel_itemstime_progressbar_name, t/autocvar_hud_panel_itemstime_progressbar_maxtime, 0, autocvar_hud_panel_itemstime_iconalign, color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
}
if(t > 0 && autocvar_hud_panel_itemstime_text)
drawstring_aspect(numpos, ftos(t), eX * ((ar - 1)/ar) * mySize_x + eY * mySize_y, color, panel_fg_alpha, DRAWFLAG_NORMAL);
else
picpos.x = myPos.x + mySize.x / 2 - mySize.y / 2;
if(item_availableTime)
drawpic_aspect_skin_expanding(picpos, GetItemsTimePicture(itemcode), '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha * picalpha, DRAWFLAG_NORMAL, item_availableTime);
drawpic_aspect_skin(picpos, GetItemsTimePicture(itemcode), '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha * picalpha, DRAWFLAG_NORMAL);
}
void HUD_ItemsTime(void)
{
if(!autocvar__hud_configure)
{
if(!(
(autocvar_hud_panel_itemstime == 1 && spectatee_status != 0)
|| (autocvar_hud_panel_itemstime == 2 && (spectatee_status != 0 || warmup_stage))
)) { return; }
ItemsTime_time[0] = getstatf(STAT_ARMOR_LARGE_TIME);
ItemsTime_time[1] = getstatf(STAT_HEALTH_MEGA_TIME);
ItemsTime_time[2] = getstatf(STAT_INVISIBLE_TIME);
ItemsTime_time[3] = getstatf(STAT_SPEED_TIME);
ItemsTime_time[4] = getstatf(STAT_EXTRALIFE_TIME);
ItemsTime_time[5] = getstatf(STAT_STRENGTH_TIME);
ItemsTime_time[6] = getstatf(STAT_SHIELD_TIME);
ItemsTime_time[7] = getstatf(STAT_FUELREGEN_TIME);
ItemsTime_time[8] = getstatf(STAT_JETPACK_TIME);
ItemsTime_time[9] = getstatf(STAT_SUPERWEAPONS_TIME);
}
else
{
// do not show here mutator-dependent items
ItemsTime_time[0] = time + 0;
ItemsTime_time[1] = time + 8;
ItemsTime_time[2] = -1; // mutator-dependent
ItemsTime_time[3] = -1; // mutator-dependent
ItemsTime_time[4] = -1; // mutator-dependent
ItemsTime_time[5] = time + 0;
ItemsTime_time[6] = time + 4;
ItemsTime_time[7] = time + 49;
ItemsTime_time[8] = -1;
ItemsTime_time[9] = time + 28;
}
float i;
float count = 0;
if(autocvar_hud_panel_itemstime_hidespawned == 1)
for (i = 0; i < ITEMSTIME_MAXITEMS; ++i)
count += (ItemsTime_time[i] > time || -ItemsTime_time[i] > time);
else if(autocvar_hud_panel_itemstime_hidespawned == 2)
for (i = 0; i < ITEMSTIME_MAXITEMS; ++i)
count += (ItemsTime_time[i] > time);
else
for (i = 0; i < ITEMSTIME_MAXITEMS; ++i)
count += (ItemsTime_time[i] != -1);
if (count == 0)
return;
HUD_Panel_UpdateCvars();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
if(panel_bg_padding)
{
pos += '1 1 0' * panel_bg_padding;
mySize -= '2 2 0' * panel_bg_padding;
}
float rows, columns;
float ar = max(2, autocvar_hud_panel_itemstime_ratio) + 1;
rows = HUD_GetRowCount(count, mySize, ar);
columns = ceil(count/rows);
vector itemstime_size = eX * mySize.x*(1/columns) + eY * mySize.y*(1/rows);
vector offset = '0 0 0';
float newSize;
if(autocvar_hud_panel_itemstime_dynamicsize)
{
if(autocvar__hud_configure)
if(menu_enabled != 2)
HUD_Panel_DrawBg(1); // also draw the bg of the entire panel
// reduce panel to avoid spacing items
if(itemstime_size.x / itemstime_size.y < ar)
{
newSize = rows * itemstime_size.x / ar;
pos.y += (mySize.y - newSize) / 2;
mySize.y = newSize;
itemstime_size.y = mySize.y / rows;
}
else
{
newSize = columns * itemstime_size.y * ar;
pos.x += (mySize.x - newSize) / 2;
mySize.x = newSize;
itemstime_size.x = mySize.x / columns;
}
panel_pos = pos - '1 1 0' * panel_bg_padding;
panel_size = mySize + '2 2 0' * panel_bg_padding;
}
else
{
if(itemstime_size.x/itemstime_size.y > ar)
{
newSize = ar * itemstime_size.y;
offset.x = itemstime_size.x - newSize;
pos.x += offset.x/2;
itemstime_size.x = newSize;
}
else
{
newSize = 1/ar * itemstime_size.x;
offset.y = itemstime_size.y - newSize;
pos.y += offset.y/2;
itemstime_size.y = newSize;
}
}
HUD_Panel_DrawBg(1);
float row = 0, column = 0;
bool item_available;
for (i = 0; i < ITEMSTIME_MAXITEMS; ++i) {
if (ItemsTime_time[i] == -1)
continue;
float item_time = ItemsTime_time[i];
if(item_time < -1)
{
item_available = true;
item_time = -item_time;
}
else
item_available = (item_time <= time);
if(ItemsTime_time[i] >= 0)
{
if(time <= ItemsTime_time[i])
ItemsTime_availableTime[i] = 0;
else if(ItemsTime_availableTime[i] == 0)
ItemsTime_availableTime[i] = time;
}
else if(ItemsTime_availableTime[i] == 0)
ItemsTime_availableTime[i] = time;
float f = (time - ItemsTime_availableTime[i]) * 2;
f = (f > 1) ? 0 : bound(0, f, 1);
if(autocvar_hud_panel_itemstime_hidespawned == 1)
if(!(ItemsTime_time[i] > time || -ItemsTime_time[i] > time))
continue;
if(autocvar_hud_panel_itemstime_hidespawned == 2)
if(!(ItemsTime_time[i] > time))
continue;
DrawItemsTimeItem(pos + eX * column * (itemstime_size.x + offset.x) + eY * row * (itemstime_size.y + offset.y), itemstime_size, ar, i, item_time, item_available, f);
++row;
if(row >= rows)
{
row = 0;
column = column + 1;
}
}
}
/*
==================
Main HUD system
......
......@@ -161,6 +161,7 @@ int prev_p_health, prev_p_armor;
HUD_PANEL(PHYSICS , HUD_Physics , physics) \
HUD_PANEL(CENTERPRINT , HUD_CenterPrint , centerprint) \
HUD_PANEL(MAPVOTE , MapVote_Draw , mapvote) \
HUD_PANEL(ITEMSTIME , HUD_ItemsTime , itemstime) \
// always add new panels to the end of list
#define HUD_PANEL(NAME, draw_func, name) \
......
......@@ -200,6 +200,16 @@ void HUD_Panel_ExportCfg(string cfgname)
HUD_Write_PanelCvar_q("_fade_subsequent_passtwo_minalpha");
HUD_Write_PanelCvar_q("_fade_subsequent_minfontsize");
HUD_Write_PanelCvar_q("_fade_minfontsize");
break;
case HUD_PANEL_ITEMSTIME:
HUD_Write_PanelCvar_q("_iconalign");
HUD_Write_PanelCvar_q("_progressbar");
HUD_Write_PanelCvar_q("_progressbar_name");
HUD_Write_PanelCvar_q("_progressbar_reduced");
HUD_Write_PanelCvar_q("_text");
HUD_Write_PanelCvar_q("_ratio");
HUD_Write_PanelCvar_q("_dynamicsize");
break;
}
HUD_Write("\n");
}
......
......@@ -166,6 +166,10 @@ vector drawspritetext(vector o, float ang, float minwidth, vector rgb, float a,
float spritelookupblinkvalue(string s)
{
if(substring(s, 0, 4) == "wpn-")
if(get_weaponinfo(stof(substring(s, 4, strlen(s)))).spawnflags & WEP_FLAG_SUPERWEAPON)
return 2;
switch(s)
{
case "ons-cp-atck-neut": return 2;
......@@ -173,6 +177,8 @@ float spritelookupblinkvalue(string s)
case "ons-cp-atck-blue": return 2;
case "ons-cp-dfnd-red": return 0.5;
case "ons-cp-dfnd-blue": return 0.5;
case "item_health_mega": return 2;
case "item_armor_large": return 2;
case "item-invis": return 2;
case "item-extralife": return 2;
case "item-speed": return 2;
......@@ -248,6 +254,8 @@ string spritelookuptext(string s)
case "dom-blue": return _("Control point");
case "dom-yellow": return _("Control point");
case "dom-pink": return _("Control point");
case "item_health_mega": return _("Mega health");
case "item_armor_large": return _("Large armor");
case "item-invis": return _("Invisibility");
case "item-extralife": return _("Extra life");
case "item-speed": return _("Speed");
......@@ -349,6 +357,14 @@ void Draw_WaypointSprite()
// choose the sprite
switch(self.rule)
{
case SPRITERULE_SPECTATOR:
if(!(
(autocvar_g_waypointsprite_itemstime == 1 && t == NUM_SPECTATOR + 1)
|| (autocvar_g_waypointsprite_itemstime == 2 && (t == NUM_SPECTATOR + 1 || warmup_stage))
))
return;
spriteimage = self.netname;
break;
case SPRITERULE_DEFAULT:
if(self.team)
{
......@@ -402,7 +418,7 @@ void Draw_WaypointSprite()
{
if(self.helpme && time < self.helpme)
a *= SPRITE_HELPME_BLINK;
else
else if(!self.lifetime) // fading out waypoints don't blink
a *= spritelookupblinkvalue(spriteimage);
}
......@@ -412,7 +428,7 @@ void Draw_WaypointSprite()
a = 1;
}
if(a <= 0)
if(a <= 0.003)
return;
rgb = fixrgbexcess(rgb);
......
......@@ -122,6 +122,7 @@ const int ENT_CLIENT_HEALING_ORB = 80;
const int SPRITERULE_DEFAULT = 0;
const int SPRITERULE_TEAMPLAY = 1;
const int SPRITERULE_SPECTATOR = 2;
const int RADARICON_NONE = 0;
const int RADARICON_FLAG = 1;
......
......@@ -109,18 +109,18 @@ const int STAT_OK_AMMO_CHARGE = 85;
const int STAT_OK_AMMO_CHARGEPOOL = 86;
const int STAT_FROZEN = 87;
const int STAT_REVIVE_PROGRESS = 88;
const int STAT_BUFF_TIME = 90;
const int STAT_WEAPONSINMAP = 91;
const int STAT_WEAPONSINMAP2 = 92;
const int STAT_WEAPONSINMAP3 = 93;
const int STAT_CTF_FLAGSTATUS = 94;
// 95 empty?
// 96 empty?
// 97 empty?
// 98 empty?
const int STAT_ARMOR_LARGE_TIME = 89;
const int STAT_HEALTH_MEGA_TIME = 90;
const int STAT_INVISIBLE_TIME = 91;
const int STAT_SPEED_TIME = 92;
const int STAT_EXTRALIFE_TIME = 93;
const int STAT_STRENGTH_TIME = 94;
const int STAT_SHIELD_TIME = 95;
const int STAT_FUELREGEN_TIME = 96;
const int STAT_JETPACK_TIME = 97;
const int STAT_SUPERWEAPONS_TIME = 98;
// 99 empty?
/* The following stats change depending on the gamemode, so can share the same ID */
// IDs 100 to 104 reserved for gamemodes
......@@ -170,11 +170,11 @@ const int STAT_PL_CROUCH_MAX3 = 119;
const int STAT_PL_CROUCH_VIEW_OFS1 = 117;
const int STAT_PL_CROUCH_VIEW_OFS2 = 118;
const int STAT_PL_CROUCH_VIEW_OFS3 = 119;
// 120 empty?
// 121 empty?
// 122 empty?
// 123 empty?
// 124 empty?
const int STAT_WEAPONSINMAP = 120;
const int STAT_WEAPONSINMAP2 = 121;
const int STAT_WEAPONSINMAP3 = 122;
const int STAT_BUFF_TIME = 123;
const int STAT_CTF_FLAGSTATUS = 124;
// 125 empty?
// 126 empty?
// 127 empty?
......
......@@ -47,6 +47,7 @@
#include "xonotic/dialog_hudpanel_engineinfo.qc"
#include "xonotic/dialog_hudpanel_healtharmor.qc"
#include "xonotic/dialog_hudpanel_infomessages.qc"
#include "xonotic/dialog_hudpanel_itemstime.qc"
#include "xonotic/dialog_hudpanel_modicons.qc"
#include "xonotic/dialog_hudpanel_notification.qc"
#include "xonotic/dialog_hudpanel_physics.qc"
......
#ifndef DIALOG_HUDPANEL_ITEMSTIME_H
#define DIALOG_HUDPANEL_ITEMSTIME_H
#include "rootdialog.qc"
CLASS(XonoticHUDItemsTimeDialog, XonoticRootDialog)
METHOD(XonoticHUDItemsTimeDialog, fill, void(entity))
ATTRIB(XonoticHUDItemsTimeDialog, title, string, _("Items Time Panel"))
ATTRIB(XonoticHUDItemsTimeDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDItemsTimeDialog, intendedWidth, float, 0.4)
ATTRIB(XonoticHUDItemsTimeDialog, rows, float, 15)
ATTRIB(XonoticHUDItemsTimeDialog, columns, float, 4)
ATTRIB(XonoticHUDItemsTimeDialog, name, string, "HUDitemstime")
ENDCLASS(XonoticHUDItemsTimeDialog)
#endif
#ifdef IMPLEMENTATION
void XonoticHUDItemsTimeDialog_fill(entity me)
{
entity e;
string panelname = "itemstime";
me.TR(me);
me.TD(me, 1, 4, e = makeXonoticTextSlider("hud_panel_itemstime"));
e.addValue(e, ZCTX(_("PNL^Disabled")), "0");
e.addValue(e, ZCTX(_("PNL^Enabled spectating")), "1");
e.addValue(e, ZCTX(_("PNL^Enabled even playing in warmup")), "2");
e.configureXonoticTextSliderValues(e);
DIALOG_HUDPANEL_COMMON_NOTOGGLE();
me.TR(me);
me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, _("Align icon:")));
me.TD(me, 1, 2.6/2, e = makeXonoticRadioButton(2, "hud_panel_itemstime_iconalign", "0", _("Left")));
me.TD(me, 1, 2.6/2, e = makeXonoticRadioButton(2, "hud_panel_itemstime_iconalign", "1", _("Right")));
me.TR(me);
me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "hud_panel_itemstime_progressbar", _("Enable status bar")));
me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "hud_panel_itemstime_progressbar_reduced", _("Reduced")));
setDependent(e, "hud_panel_itemstime_progressbar", 1, 1);
me.TR(me);
me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, _("Text/icon ratio:")));
me.TD(me, 1, 2.6, e = makeXonoticSlider(2, 8, 0.5, "hud_panel_itemstime_ratio"));
me.TR(me);
me.TD(me, 1, 4, e = makeXonoticCheckBox(0, "hud_panel_itemstime_hidespawned", _("Hide spawned items")));
me.TR(me);
me.TD(me, 1, 4, e = makeXonoticCheckBox(0, "hud_panel_itemstime_dynamicsize", _("Dynamic size")));
}
#endif
......@@ -128,6 +128,9 @@ void MainWindow_configureMainWindow(entity me)
i.configureDialog(i);
me.addItemRightCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
i = NEW(XonoticHUDItemsTimeDialog);
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
// dialogs used by settings
me.userbindEditDialog = i = NEW(XonoticUserbindEditDialog);
......
......@@ -625,6 +625,7 @@ float autocvar_sv_gameplayfix_q2airaccelerate;
int autocvar_sv_gentle;
#define autocvar_sv_gravity cvar("sv_gravity")
string autocvar_sv_intermission_cdtrack;
float autocvar_sv_itemstime;
string autocvar_sv_jumpspeedcap_max;
float autocvar_sv_jumpspeedcap_max_disable_on_ramps;
string autocvar_sv_jumpspeedcap_min;
......
......@@ -195,6 +195,7 @@ void PutObserverInServer (void)
if(IS_REAL_CLIENT(self))
{
Item_ItemsTime_SetTimesForPlayer(self);