X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmutators%2Fmutator%2Fitemstime%2Fitemstime.qc;h=1379d586f10fd4da14b9f82d98571cd00bbe6c78;hb=45d8904a100765555e622598a39967963733df1d;hp=3fe9de6d7d5f849ea9356d04b6930a59caf76769;hpb=f34fd47ee0a7f283ab60592a17399ec5a500416c;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/mutators/mutator/itemstime/itemstime.qc b/qcsrc/common/mutators/mutator/itemstime/itemstime.qc index 3fe9de6d7..1379d586f 100644 --- a/qcsrc/common/mutators/mutator/itemstime/itemstime.qc +++ b/qcsrc/common/mutators/mutator/itemstime/itemstime.qc @@ -30,9 +30,9 @@ NET_HANDLE(itemstime, bool isNew) #ifdef CSQC void Item_ItemsTime_Init() { - FOREACH(Items, true, LAMBDA( + FOREACH(Items, true, { ItemsTime_time[it.m_id] = -1; - )); + }); ItemsTime_time[Items_MAX] = -1; } @@ -49,18 +49,18 @@ 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; -bool autocvar_hud_panel_itemstime_hidelarge = false; +bool autocvar_hud_panel_itemstime_hidebig = false; int autocvar_hud_panel_itemstime_text = 1; -#define hud_panel_itemstime_hidelarge autocvar_hud_panel_itemstime_hidelarge +#define hud_panel_itemstime_hidebig autocvar_hud_panel_itemstime_hidebig #else -#define hud_panel_itemstime_hidelarge false +#define hud_panel_itemstime_hidebig false #endif bool Item_ItemsTime_SpectatorOnly(GameItem it) { return (false - || it == ITEM_ArmorMega || (it == ITEM_ArmorLarge && !hud_panel_itemstime_hidelarge) - || it == ITEM_HealthMega || (it == ITEM_HealthLarge && !hud_panel_itemstime_hidelarge) + || it == ITEM_ArmorMega || (it == ITEM_ArmorBig && !hud_panel_itemstime_hidebig) + || it == ITEM_HealthMega || (it == ITEM_HealthBig && !hud_panel_itemstime_hidebig) ); } @@ -79,9 +79,9 @@ float it_times[Items_MAX + 1]; void Item_ItemsTime_Init() { - FOREACH(Items, Item_ItemsTime_Allow(it), LAMBDA( + FOREACH(Items, Item_ItemsTime_Allow(it), { it_times[it.m_id] = -1; - )); + }); it_times[Items_MAX] = -1; } @@ -92,25 +92,25 @@ STATIC_INIT(ItemsTime_Init) { 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; } 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); } 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]); } @@ -124,24 +124,23 @@ void Item_ItemsTime_SetTime(entity e, float t) { if (!item.instanceOfWeaponPickup) it_times[item.m_id] = t; - else if (e.weapons & WEPSET_SUPERWEAPONS) + else if (STAT(WEAPONS, e) & WEPSET_SUPERWEAPONS) it_times[Items_MAX] = 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); - FOREACH_ENTITY_FLOAT(pure_data, false, + IL_EACH(g_items, it != e, { - if(!(it.itemdef == e.itemdef || ((e.weapons & WEPSET_SUPERWEAPONS) && (it.weapons & WEPSET_SUPERWEAPONS) && clienttype(it) == CLIENTTYPE_NOTACLIENT))) + if(!(it.itemdef == e.itemdef || ((STAT(WEAPONS, e) & WEPSET_SUPERWEAPONS) && (STAT(WEAPONS, it) & WEPSET_SUPERWEAPONS)))) continue; - if (e == it) continue; if (it.scheduledrespawntime <= time) isavailable = true; else if (t == 0 || it.scheduledrespawntime < t) @@ -157,11 +156,9 @@ MUTATOR_HOOKFUNCTION(itemstime, reset_map_global) Item_ItemsTime_ResetTimes(); // ALL the times need to be reset before .reset()ing each item // since Item_Reset schedules respawn of superweapons and powerups - FOREACH_ENTITY_FLOAT(pure_data, false, + IL_EACH(g_items, it.reset, { - if(IS_CLIENT(it)) - continue; - if (it.reset) Item_ItemsTime_SetTime(it, 0); + Item_ItemsTime_SetTime(it, 0); }); Item_ItemsTime_SetTimesForAllPlayers(); } @@ -241,7 +238,7 @@ void DrawItemsTimeItem(vector myPos, vector mySize, float ar, string item_icon, 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 { @@ -254,9 +251,9 @@ void DrawItemsTimeItem(vector myPos, vector mySize, float ar, string item_icon, 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; } @@ -265,6 +262,24 @@ void DrawItemsTimeItem(vector myPos, vector mySize, float ar, string item_icon, drawpic_aspect_skin(picpos, item_icon, '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha * picalpha, DRAWFLAG_NORMAL); } +float Item_ItemsTime_GetTime(int item) +{ + if(autocvar__hud_configure) + { + switch(item) + { + case ITEM_ArmorMega.m_id: return time + 0; + case ITEM_HealthMega.m_id: return time + 8; + case ITEM_Strength.m_id: return time + 0; + case ITEM_Shield.m_id: return time + 4; + } + + return -1; // don't show others + } + else + return ItemsTime_time[item]; +} + void HUD_ItemsTime() { if (!autocvar__hud_configure) @@ -274,40 +289,33 @@ void HUD_ItemsTime() || (autocvar_hud_panel_itemstime == 2 && (spectatee_status != 0 || warmup_stage || STAT(ITEMSTIME) == 2)) )) { return; } } - else - { - ItemsTime_time[ITEM_ArmorMega.m_id] = time + 0; - ItemsTime_time[ITEM_HealthMega.m_id] = time + 8; - ItemsTime_time[ITEM_Strength.m_id] = time + 0; - ItemsTime_time[ITEM_Shield.m_id] = time + 4; - } int count = 0; if (autocvar_hud_panel_itemstime_hidespawned == 1) { - FOREACH(Items, Item_ItemsTime_Allow(it), LAMBDA( - count += (ItemsTime_time[it.m_id] > time || -ItemsTime_time[it.m_id] > time); - )); - count += (ItemsTime_time[Items_MAX] > time || -ItemsTime_time[Items_MAX] > time); + 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); } else if (autocvar_hud_panel_itemstime_hidespawned == 2) { - FOREACH(Items, Item_ItemsTime_Allow(it), LAMBDA( - count += (ItemsTime_time[it.m_id] > time); - )); - count += (ItemsTime_time[Items_MAX] > time); + FOREACH(Items, Item_ItemsTime_Allow(it), { + count += (Item_ItemsTime_GetTime(it.m_id) > time); + }); + count += (Item_ItemsTime_GetTime(Items_MAX) > time); } else { - FOREACH(Items, Item_ItemsTime_Allow(it), LAMBDA( - count += (ItemsTime_time[it.m_id] != -1); - )); - count += (ItemsTime_time[Items_MAX] != -1); + FOREACH(Items, Item_ItemsTime_Allow(it), { + count += (Item_ItemsTime_GetTime(it.m_id) != -1); + }); + count += (Item_ItemsTime_GetTime(Items_MAX) != -1); } if (count == 0) return; - HUD_Panel_UpdateCvars(); + HUD_Panel_LoadCvars(); vector pos, mySize; pos = panel_pos; @@ -324,7 +332,7 @@ void HUD_ItemsTime() 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; @@ -332,7 +340,7 @@ void HUD_ItemsTime() { if (autocvar__hud_configure) if (hud_configure_menu_open != 2) - HUD_Panel_DrawBg(1); // also draw the bg of the entire panel + HUD_Panel_DrawBg(); // also draw the bg of the entire panel // reduce panel to avoid spacing items if (itemstime_size.x / itemstime_size.y < ar) @@ -371,18 +379,18 @@ void HUD_ItemsTime() } HUD_Scale_Enable(); - HUD_Panel_DrawBg(1); + HUD_Panel_DrawBg(); float row = 0, column = 0; bool item_available; int id = 0; string icon = ""; - FOREACH(Items, Item_ItemsTime_Allow(it) && ItemsTime_time[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; LABEL(iteration) - float item_time = ItemsTime_time[id]; + float item_time = Item_ItemsTime_GetTime(id); if (item_time < -1) { item_available = true; @@ -391,9 +399,9 @@ LABEL(iteration) else item_available = (item_time <= time); - if (ItemsTime_time[id] >= 0) + if (Item_ItemsTime_GetTime(id) >= 0) { - if (time <= ItemsTime_time[id]) + if (time <= Item_ItemsTime_GetTime(id)) ItemsTime_availableTime[id] = 0; else if (ItemsTime_availableTime[id] == 0) ItemsTime_availableTime[id] = time; @@ -405,14 +413,14 @@ LABEL(iteration) f = (f > 1) ? 0 : bound(0, f, 1); if (autocvar_hud_panel_itemstime_hidespawned == 1) - if (!(ItemsTime_time[id] > time || -ItemsTime_time[id] > time)) + if (!(Item_ItemsTime_GetTime(id) > time || -Item_ItemsTime_GetTime(id) > time)) continue; if (autocvar_hud_panel_itemstime_hidespawned == 2) - if (!(ItemsTime_time[id] > time)) + 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) { @@ -421,9 +429,9 @@ LABEL(iteration) } if(id == Items_MAX) // can happen only in the last fake iteration break; - )); + }); // add another fake iteration for superweapons time - if(id < Items_MAX && ItemsTime_time[Items_MAX] != -1) + if(id < Items_MAX && Item_ItemsTime_GetTime(Items_MAX) != -1) { id = Items_MAX; icon = "superweapons";