#ifdef CSQC
// reserve one more spot for superweapons time
-float ItemsTime_time[Items_MAX + 1];
-float ItemsTime_availableTime[Items_MAX + 1];
+float ItemsTime_time[REGISTRY_MAX(Items) + 1];
+float ItemsTime_availableTime[REGISTRY_MAX(Items) + 1];
NET_HANDLE(itemstime, bool isNew)
{
int i = ReadByte();
#endif
#ifdef CSQC
-void Item_ItemsTime_Init()
-{
- FOREACH(Items, true, LAMBDA(
- ItemsTime_time[it.m_id] = -1;
- ));
- ItemsTime_time[Items_MAX] = -1;
-}
STATIC_INIT(ItemsTime_Init) {
- Item_ItemsTime_Init();
+ FOREACH(Items, true, {
+ ItemsTime_time[it.m_id] = -1;
+ });
+ ItemsTime_time[REGISTRY_MAX(Items)] = -1;
}
int autocvar_hud_panel_itemstime = 2;
float autocvar_hud_panel_itemstime_dynamicsize = 1;
float autocvar_hud_panel_itemstime_ratio = 2;
+//bool autocvar_hud_panel_itemstime_dynamichud = true;
int autocvar_hud_panel_itemstime_iconalign;
bool autocvar_hud_panel_itemstime_progressbar = 0;
float autocvar_hud_panel_itemstime_progressbar_maxtime = 30;
#ifdef SVQC
// reserve one more spot for superweapons time
-float it_times[Items_MAX + 1];
-
-void Item_ItemsTime_Init()
-{
- FOREACH(Items, Item_ItemsTime_Allow(it), LAMBDA(
- it_times[it.m_id] = -1;
- ));
- it_times[Items_MAX] = -1;
-}
+float it_times[REGISTRY_MAX(Items) + 1];
STATIC_INIT(ItemsTime_Init) {
- // items time
- Item_ItemsTime_Init();
+ FOREACH(Items, Item_ItemsTime_Allow(it), {
+ it_times[it.m_id] = -1;
+ });
+ it_times[REGISTRY_MAX(Items)] = -1;
}
void Item_ItemsTime_ResetTimes()
{
- FOREACH(Items, Item_ItemsTime_Allow(it), LAMBDA(
+ FOREACH(Items, Item_ItemsTime_Allow(it), {
it_times[it.m_id] = (it_times[it.m_id] == -1) ? -1 : 0;
- ));
- it_times[Items_MAX] = (it_times[Items_MAX] == -1) ? -1 : 0;
+ });
+ it_times[REGISTRY_MAX(Items)] = (it_times[REGISTRY_MAX(Items)] == -1) ? -1 : 0;
}
void Item_ItemsTime_ResetTimesForPlayer(entity e)
{
- FOREACH(Items, Item_ItemsTime_Allow(it), LAMBDA(
+ FOREACH(Items, Item_ItemsTime_Allow(it), {
IT_Write(e, it.m_id, (it_times[it.m_id] == -1) ? -1 : 0);
- ));
- IT_Write(e, Items_MAX, (it_times[Items_MAX] == -1) ? -1 : 0);
+ });
+ IT_Write(e, REGISTRY_MAX(Items), (it_times[REGISTRY_MAX(Items)] == -1) ? -1 : 0);
}
void Item_ItemsTime_SetTimesForPlayer(entity e)
{
- FOREACH(Items, Item_ItemsTime_Allow(it), LAMBDA(
+ FOREACH(Items, Item_ItemsTime_Allow(it), {
IT_Write(e, it.m_id, it_times[it.m_id]);
- ));
- IT_Write(e, Items_MAX, it_times[Items_MAX]);
+ });
+ IT_Write(e, REGISTRY_MAX(Items), it_times[REGISTRY_MAX(Items)]);
}
void Item_ItemsTime_SetTime(entity e, float t)
{
if (!item.instanceOfWeaponPickup)
it_times[item.m_id] = t;
- else if (e.weapons & WEPSET_SUPERWEAPONS)
- it_times[Items_MAX] = t;
+ else if (STAT(WEAPONS, e) & WEPSET_SUPERWEAPONS)
+ it_times[REGISTRY_MAX(Items)] = t;
}
}
void Item_ItemsTime_SetTimesForAllPlayers()
{
- FOREACH_CLIENT(IS_REAL_CLIENT(it) && (warmup_stage || !IS_PLAYER(it) || autocvar_sv_itemstime == 2), LAMBDA(Item_ItemsTime_SetTimesForPlayer(it)));
+ FOREACH_CLIENT(IS_REAL_CLIENT(it) && (warmup_stage || !IS_PLAYER(it) || autocvar_sv_itemstime == 2), { Item_ItemsTime_SetTimesForPlayer(it); });
}
float Item_ItemsTime_UpdateTime(entity e, float t)
bool isavailable = (t == 0);
IL_EACH(g_items, it != e,
{
- if(!(it.itemdef == e.itemdef || ((e.weapons & WEPSET_SUPERWEAPONS) && (it.weapons & WEPSET_SUPERWEAPONS))))
+ if(!(it.itemdef == e.itemdef || ((STAT(WEAPONS, e) & WEPSET_SUPERWEAPONS) && (STAT(WEAPONS, it) & WEPSET_SUPERWEAPONS))))
continue;
if (it.scheduledrespawntime <= time)
isavailable = true;
#ifdef CSQC
+// ItemsTime (#22)
+
+void HUD_ItemsTime_Export(int fh)
+{
+ // allow saving cvars that aesthetically change the panel into hud skin files
+ HUD_Write_Cvar("hud_panel_itemstime_iconalign");
+ HUD_Write_Cvar("hud_panel_itemstime_progressbar");
+ HUD_Write_Cvar("hud_panel_itemstime_progressbar_name");
+ HUD_Write_Cvar("hud_panel_itemstime_progressbar_reduced");
+ HUD_Write_Cvar("hud_panel_itemstime_text");
+ HUD_Write_Cvar("hud_panel_itemstime_ratio");
+ HUD_Write_Cvar("hud_panel_itemstime_dynamicsize");
+}
+
void DrawItemsTimeItem(vector myPos, vector mySize, float ar, string item_icon, float item_time, bool item_available, float item_availableTime)
{
float t = 0;
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);
- }
+ picalpha = blink(0.85, 0.15, 5);
else
picalpha = 0.5;
t = floor(item_time - time + 0.999);
if (autocvar_hud_panel_itemstime_progressbar_reduced)
{
p_pos = numpos;
- p_size = eX * ((ar - 1)/ar) * mySize_x + eY * mySize_y;
+ p_size = vec2(((ar - 1)/ar) * mySize.x, mySize.y);
}
else
{
if(autocvar_hud_panel_itemstime_text)
{
if(t > 0)
- drawstring_aspect(numpos, ftos(t), eX * ((ar - 1)/ar) * mySize_x + eY * mySize_y, color, panel_fg_alpha, DRAWFLAG_NORMAL);
+ drawstring_aspect(numpos, ftos(t), vec2(((ar - 1)/ar) * mySize.x, mySize.y), color, panel_fg_alpha, DRAWFLAG_NORMAL);
else if(precache_pic("gfx/hud/default/checkmark")) // COMPAT: check if this image exists, as 0.8.1 clients lack it
- drawpic_aspect_skin(numpos, "checkmark", eX * (ar - 1) * mySize_y + eY * mySize_y, '1 1 1', panel_fg_alpha * picalpha, DRAWFLAG_NORMAL);
+ drawpic_aspect_skin(numpos, "checkmark", vec2((ar - 1) * mySize.y, mySize.y), '1 1 1', panel_fg_alpha * picalpha, DRAWFLAG_NORMAL);
else // legacy code, if the image is missing just center the icon
picpos.x = myPos.x + mySize.x / 2 - mySize.y / 2;
}
int count = 0;
if (autocvar_hud_panel_itemstime_hidespawned == 1)
{
- FOREACH(Items, Item_ItemsTime_Allow(it), LAMBDA(
+ FOREACH(Items, Item_ItemsTime_Allow(it), {
count += (Item_ItemsTime_GetTime(it.m_id) > time || -Item_ItemsTime_GetTime(it.m_id) > time);
- ));
- count += (Item_ItemsTime_GetTime(Items_MAX) > time || -Item_ItemsTime_GetTime(Items_MAX) > time);
+ });
+ count += (Item_ItemsTime_GetTime(REGISTRY_MAX(Items)) > time || -Item_ItemsTime_GetTime(REGISTRY_MAX(Items)) > time);
}
else if (autocvar_hud_panel_itemstime_hidespawned == 2)
{
- FOREACH(Items, Item_ItemsTime_Allow(it), LAMBDA(
+ FOREACH(Items, Item_ItemsTime_Allow(it), {
count += (Item_ItemsTime_GetTime(it.m_id) > time);
- ));
- count += (Item_ItemsTime_GetTime(Items_MAX) > time);
+ });
+ count += (Item_ItemsTime_GetTime(REGISTRY_MAX(Items)) > time);
}
else
{
- FOREACH(Items, Item_ItemsTime_Allow(it), LAMBDA(
+ FOREACH(Items, Item_ItemsTime_Allow(it), {
count += (Item_ItemsTime_GetTime(it.m_id) != -1);
- ));
- count += (Item_ItemsTime_GetTime(Items_MAX) != -1);
+ });
+ count += (Item_ItemsTime_GetTime(REGISTRY_MAX(Items)) != -1);
}
if (count == 0)
return;
rows = HUD_GetRowCount(count, mySize, ar);
columns = ceil(count/rows);
- vector itemstime_size = eX * mySize.x*(1/columns) + eY * mySize.y*(1/rows);
+ vector itemstime_size = vec2(mySize.x / columns, mySize.y / rows);
vector offset = '0 0 0';
float newSize;
bool item_available;
int id = 0;
string icon = "";
- FOREACH(Items, Item_ItemsTime_Allow(it) && Item_ItemsTime_GetTime(it.m_id) != -1, LAMBDA(
+ FOREACH(Items, Item_ItemsTime_Allow(it) && Item_ItemsTime_GetTime(it.m_id) != -1, {
id = it.m_id;
icon = it.m_icon;
if (!(Item_ItemsTime_GetTime(id) > time))
continue;
- DrawItemsTimeItem(pos + eX * column * (itemstime_size.x + offset.x) + eY * row * (itemstime_size.y + offset.y), itemstime_size, ar, icon, item_time, item_available, f);
+ DrawItemsTimeItem(pos + vec2(column * (itemstime_size.x + offset.x), row * (itemstime_size.y + offset.y)), itemstime_size, ar, icon, item_time, item_available, f);
++row;
if (row >= rows)
{
row = 0;
column = column + 1;
}
- if(id == Items_MAX) // can happen only in the last fake iteration
+ if(id == REGISTRY_MAX(Items)) // can happen only in the last fake iteration
break;
- ));
+ });
// add another fake iteration for superweapons time
- if(id < Items_MAX && Item_ItemsTime_GetTime(Items_MAX) != -1)
+ if(id < REGISTRY_MAX(Items) && Item_ItemsTime_GetTime(REGISTRY_MAX(Items)) != -1)
{
- id = Items_MAX;
+ id = REGISTRY_MAX(Items);
icon = "superweapons";
goto iteration;
}