#include "script_component.hpp" /* * Author: Glowbal * Handle mine detection in a PFH loop * * Arguments: * 0: args * 1: PHD Id * * Return Value: * None * * Example: * [[args], 2] call ACE_minedetector_fnc_detectorLoop * * Public: No */ params ["_args", "_idPFH"]; _args params ["_unit", "_type", "_detectorConfig", "_lastPlayed"]; // If locality switched just turn off the detector if !(local _unit) exitWith { [QGVAR(disableDetector), [_unit, _type], _unit] call CBA_fnc_targetEvent; [_idPFH] call CBA_fnc_removePerFrameHandler; }; if !([_unit, _type] call FUNC(hasDetector)) exitWith { // disable detector type [_unit, _type] call FUNC(disableDetector); [_idPFH] call CBA_fnc_removePerFrameHandler; }; if (!alive _unit) exitWith { [_unit, _type] call FUNC(disableDetector); [_idPFH] call CBA_fnc_removePerFrameHandler; }; if !([_unit, _type] call FUNC(isDetectorEnabled)) exitWith { [_idPFH] call CBA_fnc_removePerFrameHandler; }; if (currentWeapon _unit != _type) exitWith { [_unit, _type] call FUNC(disableDetector); [_idPFH] call CBA_fnc_removePerFrameHandler; }; private _detected = [[_unit, _detectorConfig], FUNC(getDetectedObject), _unit, QGVAR(detectedObjects), 0.15] call EFUNC(common,cachedCall); _detected params ["_hasDetected", "_mine", "_distance"]; if (!_hasDetected) exitWith {}; // Launch a local event stating which mine was detected for mission purposes [QGVAR(mineDetected), [_unit, _mine, _distance]] call CBA_fnc_localEvent; private _distanceTiming = switch (true) do { case (_distance >= 2): {1}; case (_distance >= 1.25): {0.85}; case (_distance >= 0.75): {0.7}; default {0.5}; }; if (CBA_missionTime - _lastPlayed < _distanceTiming) exitWith {}; _args set [3, CBA_missionTime]; _detectorConfig params ["", "", "_soundClasses"]; private _soundClass = switch (true) do { case (_distance >= 2): {_soundClasses select 3}; case (_distance >= 1.25): {_soundClasses select 2}; case (_distance >= 0.5): {_soundClasses select 1}; default {_soundClasses select 0}; }; [_unit, _soundClass] call FUNC(playDetectorSound);