X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2Fhud%2Fpanel%2Fweapons.qc;h=ac32e23cb9373195df72860661d9dcce8f2d3f7b;hp=cebd8f5d65c162b6e3d15d90a5e7a496bbbc0858;hb=e757068f0bf4ce3c5b29c9e52f251b39a4ef7470;hpb=da674c235adfdc6b7a33bebb22f42e1be34224e8 diff --git a/qcsrc/client/hud/panel/weapons.qc b/qcsrc/client/hud/panel/weapons.qc index cebd8f5d65..ac32e23cb9 100644 --- a/qcsrc/client/hud/panel/weapons.qc +++ b/qcsrc/client/hud/panel/weapons.qc @@ -11,7 +11,7 @@ entity weaponorder[Weapons_MAX]; void weaponorder_swap(int i, int j, entity pass) { - TC(int, i); TC(int, j); + TC(int, i); TC(int, j); entity h = weaponorder[i]; weaponorder[i] = weaponorder[j]; weaponorder[j] = h; @@ -20,24 +20,24 @@ void weaponorder_swap(int i, int j, entity pass) string weaponorder_cmp_str; int weaponorder_cmp(int i, int j, entity pass) { - TC(int, i); TC(int, j); + TC(int, i); TC(int, j); int ai = strstrofs(weaponorder_cmp_str, sprintf(" %d ", weaponorder[i].m_id), 0); int aj = strstrofs(weaponorder_cmp_str, sprintf(" %d ", weaponorder[j].m_id), 0); return aj - ai; // the string is in REVERSE order (higher prio at the right is what we want, but higher prio first is the string) } -#define HUD_WEAPONS_GET_FULL_LAYOUT() MACRO_BEGIN { \ +#define HUD_WEAPONS_GET_FULL_LAYOUT() MACRO_BEGIN \ int nHidden = 0; \ FOREACH(Weapons, it != WEP_Null, { \ if (weapons_stat & WepSet_FromWeapon(it)) continue; \ - if (it.spawnflags & WEP_FLAG_HIDDEN || it.spawnflags & WEP_FLAG_MUTATORBLOCKED) nHidden += 1; \ + if (it.spawnflags & (WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED | WEP_FLAG_SPECIALATTACK)) nHidden += 1; \ }); \ vector table_size = HUD_GetTableSize_BestItemAR((Weapons_COUNT - 1) - nHidden, panel_size, aspect); \ columns = table_size.x; \ rows = table_size.y; \ weapon_size.x = panel_size.x / columns; \ weapon_size.y = panel_size.y / rows; \ -} MACRO_END +MACRO_END void HUD_Weapons() { @@ -94,13 +94,8 @@ void HUD_Weapons() if(weaponorder_bypriority != autocvar_cl_weaponpriority || !weaponorder[0]) { int weapon_cnt; - if(weaponorder_bypriority) - strunzone(weaponorder_bypriority); - if(weaponorder_byimpulse) - strunzone(weaponorder_byimpulse); - - weaponorder_bypriority = strzone(autocvar_cl_weaponpriority); - weaponorder_byimpulse = strzone(W_FixWeaponOrder_BuildImpulseList(W_FixWeaponOrder_ForceComplete(W_NumberWeaponOrder(weaponorder_bypriority)))); + strcpy(weaponorder_bypriority, autocvar_cl_weaponpriority); + strcpy(weaponorder_byimpulse, W_FixWeaponOrder_BuildImpulseList(W_FixWeaponOrder_ForceComplete(W_NumberWeaponOrder(weaponorder_bypriority)))); weaponorder_cmp_str = strcat(" ", weaponorder_byimpulse, " "); weapon_cnt = 0; @@ -113,7 +108,14 @@ void HUD_Weapons() } if(!autocvar_hud_panel_weapons_complainbubble || autocvar__hud_configure || time - complain_weapon_time >= when + fadetime) - complain_weapon = 0; + complain_weapon = NULL; + + entity wepent = viewmodels[0]; // TODO: unhardcode + + if (wepent.switchweapon == WEP_Null) + panel_switchweapon = NULL; + else if (!panel_switchweapon) + panel_switchweapon = wepent.switchweapon; if(autocvar__hud_configure) { @@ -121,7 +123,7 @@ void HUD_Weapons() { int j = 0; FOREACH(Weapons, it != WEP_Null && it.impulse >= 0 && (it.impulse % 3 != 0) && j < 6, { - if(!(it.spawnflags & WEP_FLAG_MUTATORBLOCKED)) + if(!(it.spawnflags & WEP_FLAG_MUTATORBLOCKED) && !(it.spawnflags & WEP_FLAG_SPECIALATTACK)) { if(!panel_switchweapon || j < 4) panel_switchweapon = it; @@ -164,10 +166,18 @@ void HUD_Weapons() // do we own this weapon? weapon_count = 0; - for(i = 0; i <= WEP_LAST-WEP_FIRST; ++i) - if((weapons_stat & WepSet_FromWeapon(weaponorder[i])) || (weaponorder[i].m_id == complain_weapon)) - ++weapon_count; - + if (autocvar_hud_panel_weapons_onlyowned >= 2) // only current + { + for (i = 0; i <= WEP_LAST-WEP_FIRST; ++i) + if (weaponorder[i] == panel_switchweapon || weaponorder[i] == complain_weapon) + ++weapon_count; + } + else + { + for (i = 0; i <= WEP_LAST-WEP_FIRST; ++i) + if ((weapons_stat & WepSet_FromWeapon(weaponorder[i])) || weaponorder[i] == complain_weapon) + ++weapon_count; + } // might as well commit suicide now, no reason to live ;) if (weapon_count == 0) @@ -378,13 +388,6 @@ void HUD_Weapons() switch_speed = frametime * autocvar_hud_panel_weapons_selection_speed; vector radius_size = weapon_size * (autocvar_hud_panel_weapons_selection_radius + 1); - entity wepent = viewmodels[0]; // TODO: unhardcode - - if(wepent.switchweapon == WEP_Null) - panel_switchweapon = NULL; - else if(!panel_switchweapon) - panel_switchweapon = wepent.switchweapon; - // draw background behind currently selected weapon // do it earlier to make sure bg is drawn behind every weapon icons while it's moving if(panel_switchweapon) @@ -400,15 +403,26 @@ void HUD_Weapons() if(!it || weapon_id < 0) { continue; } // skip this weapon if we don't own it (and onlyowned is enabled)-- or if weapons_complainbubble is showing for this weapon - if(autocvar_hud_panel_weapons_onlyowned) + if (autocvar_hud_panel_weapons_onlyowned) { - if (!((weapons_stat & WepSet_FromWeapon(it)) || (it.m_id == complain_weapon))) - continue; + if (autocvar_hud_panel_weapons_onlyowned >= 2) // only current + { + if (!(it == panel_switchweapon || it == complain_weapon)) + continue; + } + else + { + if (!((weapons_stat & WepSet_FromWeapon(it)) || (it == complain_weapon))) + continue; + } } else { - if (it.spawnflags & WEP_FLAG_MUTATORBLOCKED && !(weapons_stat & WepSet_FromWeapon(it))) + if (it.spawnflags & (WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED | WEP_FLAG_SPECIALATTACK) + && !(weapons_stat & WepSet_FromWeapon(it))) + { continue; + } } // figure out the drawing position of weapon @@ -479,7 +493,7 @@ void HUD_Weapons() } // draw ammo status bar - if(!infinite_ammo && autocvar_hud_panel_weapons_ammo && (it.ammo_type != RESOURCE_NONE)) + if(!infinite_ammo && autocvar_hud_panel_weapons_ammo && (it.ammo_type != RES_NONE)) { float ammo_full; a = getstati(GetAmmoStat(it.ammo_type)); // how much ammo do we have? @@ -488,12 +502,12 @@ void HUD_Weapons() { switch (it.ammo_type) { - case RESOURCE_SHELLS: ammo_full = autocvar_hud_panel_weapons_ammo_full_shells; break; - case RESOURCE_BULLETS: ammo_full = autocvar_hud_panel_weapons_ammo_full_nails; break; - case RESOURCE_ROCKETS: ammo_full = autocvar_hud_panel_weapons_ammo_full_rockets; break; - case RESOURCE_CELLS: ammo_full = autocvar_hud_panel_weapons_ammo_full_cells; break; - case RESOURCE_PLASMA: ammo_full = autocvar_hud_panel_weapons_ammo_full_plasma; break; - case RESOURCE_FUEL: ammo_full = autocvar_hud_panel_weapons_ammo_full_fuel; break; + case RES_SHELLS: ammo_full = autocvar_hud_panel_weapons_ammo_full_shells; break; + case RES_BULLETS: ammo_full = autocvar_hud_panel_weapons_ammo_full_nails; break; + case RES_ROCKETS: ammo_full = autocvar_hud_panel_weapons_ammo_full_rockets; break; + case RES_CELLS: ammo_full = autocvar_hud_panel_weapons_ammo_full_cells; break; + case RES_PLASMA: ammo_full = autocvar_hud_panel_weapons_ammo_full_plasma; break; + case RES_FUEL: ammo_full = autocvar_hud_panel_weapons_ammo_full_fuel; break; default: ammo_full = 60; } @@ -523,7 +537,7 @@ void HUD_Weapons() } // draw the complain message - if(it.m_id == complain_weapon) + if(it == complain_weapon) { if(fadetime) a = ((complain_weapon_time + when > time) ? 1 : bound(0, (complain_weapon_time + when + fadetime - time) / fadetime, 1));