#include "script_component.hpp" /* * Author: PabstMirror, LinkIsGrim * Gets nearby magazines that can be loaded in the static weapon * * Arguments: * 0: Vehicle * 1: Player * * Return Value: * Mags * [Carry Magazine , Turret Path , Load Info , Magazine Source ] * * Example: * [cursorObject, player] call ace_csw_fnc_reload_getLoadableMagazines * * Public: No */ params ["_vehicle", "_player"]; private _magGroupsConfig = configFile >> QGVAR(groups); // so we don't solve in loop every time private _availableMagazines = createHashMap; // slower than array, still needed for setting source of magazine // filter enemy & player units while allowing pulling from friendly AI, crates, etc private _sources = [_player] call FUNC(getNearbySources); // send the mag source with the highest ammo private _bestMagAmmo = createHashMap; { private _xSource = _x; private _cswMags = (magazinesAmmoCargo _xSource) select {isClass (_magGroupsConfig >> _x select 0)}; { _x params ["_classname", "_ammo"]; if (_ammo > (_bestMagAmmo getOrDefault [_classname, 0])) then { _bestMagAmmo set [_classname, _ammo]; _availableMagazines set [_classname, _xSource]; }; } forEach _cswMags; } forEach _sources; if (_availableMagazines isEqualTo createHashMap) exitWith { [] }; // fast exit if no available mags private _loadInfo = []; private _return = []; // Go through turrets and find weapons that we could reload { private _turretPath = _x; { private _weapon = _x; { //IGNORE_PRIVATE_WARNING ["_x", "_y"]; private _carryMag = _x; private _magSource = _y; private _carryGroup = _magGroupsConfig >> _carryMag; { if ( ((getNumber (_carryGroup >> _x)) == 1) && {_loadInfo = [_vehicle, _turretPath, _carryMag, _magSource] call FUNC(reload_canLoadMagazine); _loadInfo select 0} ) exitWith { _return pushBack [_carryMag, _turretPath, _loadInfo, _magSource, _player]; }; } forEach (compatibleMagazines _weapon); } forEach _availableMagazines; } forEach (_vehicle weaponsTurret _turretPath); } forEach (allTurrets _vehicle); // Note: these nested forEach's looks terrible, but most only have one element _return