ACE3/addons/advanced_fatigue/functions/fnc_getWeaponInertia.sqf
pterolatypus 4a3ad40c04
Adv Fatigue - Make stamina penalty for weapon raised/ready scale with weapon inertia (#8669)
* Stamina penalty for weapon raised/ready is scaled by weapon inertia

* Newline

* Tabs

my editor hates me

* Use format

* Improved item validation and caching
2023-06-27 19:40:07 +03:00

39 lines
1014 B
Plaintext

#include "script_component.hpp"
/*
* Author: Pterolatypus
* Calculates total weapon inertia, accounting for attachments.
*
* Arguments:
* 0: Unit <OBJECT>
*
* Return Value:
* Total inertia <NUMBER>
*
* Example:
* [ACE_player] call ace_advanced_fatigue_fnc_getWeaponInertia
*
* Public: No
*/
params [["_unit", ACE_player, [objNull]]];
private _cache = GVAR(inertiaCache);
private _weapon = currentWeapon _unit;
private _weaponAndItems = [_weapon] + (_unit weaponAccessories _weapon);
private _inertia = _cache get _weaponAndItems;
if (isNil "_inertia") then {
_inertia = 0;
private _cfgWeapons = configFile >> "CfgWeapons";
{
// if item is "" or inertia property is undefined, just ignore it
private _itemInertia = getNumber (_cfgWeapons >> _x >> "inertia");
if (isNil "_itemInertia") then { continue };
_inertia = _inertia + _itemInertia;
} forEach _weaponAndItems;
_cache set [_weaponAndItems, _inertia];
};
GVAR(inertia) = _inertia;
_inertia