ACE3/addons/laserpointer/XEH_postInit.sqf
jonpas bc70571765 Use CBA Accessory Functions for Laser mode switching (#4855)
* Use CBA Accessory Functions for Laser mode switching

* Use CBA ACC EH to prevent switching to unusable lzr (#4860)

* Use CBA ACC EH to prevent switching to unusable lzr

* Re-call CBA_accessory_fnc_switchAttachment

* Require CBA 3.2.0
2017-02-25 17:16:40 +01:00

89 lines
3.2 KiB
Plaintext

// by commy2
#include "script_component.hpp"
// fixes laser when being captured. Needed, because the selectionPosition of the right hand is used
[QEGVAR(captives,setHandcuffed), {if (_this select 1) then {(_this select 0) action ["GunLightOff", _this select 0]};}] call CBA_fnc_addEventHandler;
if (!hasInterface) exitWith {};
GVAR(nearUnits) = [];
GVAR(index) = -1;
GVAR(laserClassesCache) = [] call CBA_fnc_createNamespace;
GVAR(redLaserUnits) = [];
GVAR(greenLaserUnits) = [];
["ace_settingsInitialized", {
// If not enabled, dont't add draw eventhandler or PFEH (for performance)
if (!GVAR(enabled)) exitWith {
["CBA_attachmentSwitched", {
params ["_unit", "_prevItem", "_newItem", "_currWeaponType"];
TRACE_4("CBA_attachmentSwitched eh",_unit,_prevItem,_newItem,_currWeaponType);
if ((getNumber (configFile >> "CfgWeapons" >> _newItem >> "ACE_laserpointer")) > 0) then {
TRACE_1("removing ACE_laserpointer",getNumber (configFile >> "CfgWeapons" >> _newItem >> "ACE_laserpointer"));
[1, "prev"] call CBA_accessory_fnc_switchAttachment;
};
}] call CBA_fnc_addEventHandler;
};
[{
private _oldNearUnits = GVAR(nearUnits);
GVAR(nearUnits) = call FUNC(getNearUnits);
// remove units that moved away
{
GVAR(redLaserUnits) deleteAt (GVAR(redLaserUnits) find _x);
GVAR(greenLaserUnits) deleteAt (GVAR(greenLaserUnits) find _x);
} forEach (_oldNearUnits - GVAR(nearUnits));
}, 5, []] call CBA_fnc_addPerFrameHandler;
private _fnc_processUnit = {
params ["_unit"];
private _weapon = currentWeapon _unit;
private _laser = [(_unit weaponAccessories _weapon) select 1] param [0, ""];
if (_laser isEqualTo "") exitWith {};
private _laserID = GVAR(laserClassesCache) getVariable _laser;
if (isNil "_laserID") then {
_laserID = getNumber (configFile >> "CfgWeapons" >> _laser >> "ACE_laserpointer");
GVAR(laserClassesCache) setVariable [_laser, _laserID];
};
if (_unit isFlashlightOn _weapon) then {
if (_laserID isEqualTo 1) exitWith {
GVAR(redLaserUnits) pushBackUnique _unit;
GVAR(greenLaserUnits) deleteAt (GVAR(greenLaserUnits) find _unit);
};
if (_laserID isEqualTo 2) exitWith {
GVAR(greenLaserUnits) pushBackUnique _unit;
GVAR(redLaserUnits) deleteAt (GVAR(redLaserUnits) find _unit);
};
} else {
GVAR(redLaserUnits) deleteAt (GVAR(redLaserUnits) find _unit);
GVAR(greenLaserUnits) deleteAt (GVAR(greenLaserUnits) find _unit);
};
};
// custom scheduler
[{
params ["_fnc_processUnit"];
ACE_player call _fnc_processUnit;
GVAR(index) = GVAR(index) + 1;
private _unit = GVAR(nearUnits) param [GVAR(index), objNull];
if (isNull _unit) exitWith {
GVAR(index) = -1;
};
_unit call _fnc_processUnit;
}, 0.1, _fnc_processUnit] call CBA_fnc_addPerFrameHandler;
addMissionEventHandler ["Draw3D", {call FUNC(onDraw)}];
}] call CBA_fnc_addEventHandler;