/* * Author: Glowbal * Handle mine detection in a PFH loop * * Arguments: * 0: args * 1: PHD Id * * Return Value: * None * * Public: No */ #include "script_component.hpp" params ["_args", "_idPFH"]; _args params ["_unit", "_type", "_detectorConfig", "_lastPlayed"]; if !([_unit, _type] call FUNC(hasDetectorType)) 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 (ACE_player == _unit && {currentWeapon _unit == _type}) then { private _detected = [_unit, _detectorConfig] call FUNC(getDetectedObject); _detected params ["_hasDetected", "_object", "_distance"]; 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 (_hasDetected && (ACE_time - _lastPlayed > _distanceTiming)) then { _args set [3, ACE_time]; _detectorConfig params ["_type", "_radius", "_detectableTypes", "_sounds"]; private _sound = switch (true) do { case (_distance >= 2): {_sounds select 3}; case (_distance >= 1.25): {_sounds select 2}; case (_distance >= 0.5): {_sounds select 1}; default {_sounds select 0}; }; if ((_distance >= 1.2)) then { if (_distance >= 2) then { _sounds select 2; } else { _sounds select 1; }; } else { _sounds select 0; }; [_unit, _sound, true] call FUNC(playDetectorSound); }; };