Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dragging - Use improved loadAbs for weight calculation #8457

Merged
merged 3 commits into from
Jun 22, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 9 additions & 68 deletions addons/dragging/functions/fnc_getWeight.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -18,78 +18,19 @@

params ["_object"];

private _weight = 0;
private _cfgWeapons = configFile >> "CfgWeapons";
private _cfgGlasses = configFile >> "CfgGlasses";
private _cfgVehicles = configFile >> "CfgVehicles";
private _cfgMagazines = configFile >> "CfgMagazines";

// Add the masses of "regular" items in the object's inventory
// Handle separating CfgGlasses items from this cargo array
getItemCargo _object params ["_itemTypes", "_itemCounts"];

{
private _itemConfig = if (isClass (_cfgGlasses >> _x)) then {
_cfgGlasses >> _x
} else {
_cfgWeapons >> _x >> "ItemInfo"
};

_weight = _weight + getNumber (_itemConfig >> "mass") * (_itemCounts select _forEachIndex);
} forEach _itemTypes;

// Add the masses of magazine items in the object's inventory
getMagazineCargo _object params ["_magazineTypes", "_magazineCounts"];

{
_weight = _weight + getNumber (_cfgMagazines >> _x >> "mass") * (_magazineCounts select _forEachIndex);
} forEach _magazineTypes;

// Add the masses of backpack items in the object's inventory
getBackpackCargo _object params ["_backpackTypes", "_backpackCounts"];

{
_weight = _weight + getNumber (_cfgVehicles >> _x >> "mass") * (_backpackCounts select _forEachIndex);
} forEach _backpackTypes;

{
_x params ["_weapon", "_muzzle", "_pointer", "_optic", "_primaryMagazine", "_secondaryMagazine", "_bipod"];

// Add the weapon's mass
_weight = _weight + getNumber (_cfgWeapons >> _weapon >> "WeaponSlotsInfo" >> "mass");

// Add the masses of the weapon's attachments if they exist
{
if (_x != "") then {
_weight = _weight + getNumber (_cfgWeapons >> _x >> "ItemInfo" >> "mass");
};
} forEach [_muzzle, _pointer, _optic, _bipod];

// Add the masses of the weapon's magazines if they exist
{
_x params ["_magazine"];

if (!isNil "_magazine") then {
_weight = _weight + getNumber (_cfgMagazines >> _magazine >> "mass");
};
} forEach [_primaryMagazine, _secondaryMagazine];
} forEach weaponsItemsCargo _object;
private _weight = loadAbs _object;

// Add the mass of the object itself
// The mass of sub-containers such as vests was added through the items cargo
// The container object is generally of type SupplyX and has mass of zero
_weight = _weight + getNumber (_cfgVehicles >> typeOf _object >> "mass");
_weight = _weight + getNumber (configOf _object >> "mass");

// Mass in Arma isn't an exact amount but rather a volume/weight value
// This attempts to work around that by making it a usable value (sort of)
// Note: this is done before the recursive calls to avoid reducing the weight multiple times
_weight = _weight * 0.5;

// Handle sub-containers within the object's inventory
// Contents of backpacks get counted twice (see https://github.com/acemod/ACE3/pull/8457#issuecomment-1062522447)
// This is a workaround until that is fixed on BI's end
{
_x params ["", "_container"];
_weight = _weight - (loadAbs _container);
} forEach (everyContainer _object);

_weight = _weight + (_container call FUNC(getWeight));
} forEach everyContainer _object;

_weight
// Mass in Arma isn't an exact amount but rather a volume/weight value
// This attempts to work around that by making it a usable value (sort of)
_weight * 0.5;