/* * Author: PabstMirror * Finds next valid index for the device array. * * Arguments: * 0: Offset from currentIndex (use 1 to find next valid after current) or a displayName string or * * Return Value: * The new index (-1 if no valid) * * Example: * [] call ace_common_fnc_deviceKeyFindValidIndex * ["kestral4500"] call ace_common_fnc_deviceKeyFindValidIndex * * Public: No */ #include "script_component.hpp" DEFAULT_PARAM(0,_searchOffsetOrName,0); private ["_validIndex", "_offsetBy", "_realIndex", "_offset"]; _validIndex = -1; if ((typeName _searchOffsetOrName) == "STRING") then { { if ((_x select 0) == _searchOffsetOrName) exitWith { _validIndex = _forEachIndex; }; } forEach GVAR(deviceKeyHandlingArray); } else { if ((count GVAR(deviceKeyHandlingArray)) > 0) then { _baseIndex = if (GVAR(deviceKeyCurrentIndex) == -1) then {0} else {GVAR(deviceKeyCurrentIndex) + _searchOffsetOrName}; for "_offset" from _baseIndex to ((count GVAR(deviceKeyHandlingArray)) - 1 + _baseIndex) do { _realIndex = _offset % (count GVAR(deviceKeyHandlingArray)); if ([] call ((GVAR(deviceKeyHandlingArray) select _realIndex) select 2)) exitWith { _validIndex = _realIndex; }; }; }; }; GVAR(deviceKeyCurrentIndex) = _validIndex; GVAR(deviceKeyCurrentIndex)