mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
dfca4fdcf8
* Pass functions by "reference" to bis event handlers * Add Doc * Fix
82 lines
2.7 KiB
Plaintext
82 lines
2.7 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 ["ace_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) = [];
|
|
|
|
#include "initKeybinds.sqf"
|
|
|
|
["ace_settingsInitialized", {
|
|
// if not enabled, dont't add draw eventhandler or PFEH (for performance)
|
|
if !(GVAR(enabled)) exitWith {};
|
|
|
|
[{
|
|
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;
|