ACE3/addons/minedetector/functions/fnc_getDetectedObject.sqf

55 lines
1.6 KiB
Plaintext

#include "..\script_component.hpp"
/*
* Author: Glowbal
* Get the distance to the nearest detectable object
*
* Arguments:
* 0: Unit <OBJECT>
* 1: Configuration <ARRAY>
*
* Return Value:
* [isDetected <BOOL>, mine <OBJECT>, distance <NUMBER>] <ARRAY>
*
* Example:
* [ace_player, DETECTOR_CONFIG] call ace_minedetector_fnc_getDetectedObject
*
* Public: No
*/
params ["_unit", "_detectorConfig"];
_detectorConfig params ["", "_radius"];
private _worldPosition = _unit modelToWorld (_unit selectionPosition "granat");
private _ref = (_unit weaponDirection currentWeapon _unit) call EFUNC(common,createOrthonormalReference);
_ref params ["_v1", "_v2", "_v3"];
private _detectorPointAGL = _worldPosition vectorAdd
(_v1 vectorMultiply ( 0.9 * __DR)) vectorAdd
(_v2 vectorMultiply (-0.2 * __DR)) vectorAdd
(_v3 vectorMultiply ( 0.4 * __DR));
private _nearestObjects = nearestObjects [_detectorPointAGL, [], _radius];
#ifdef DEBUG_MODE_FULL
GVAR(debugDetector) = [_detectorPointAGL, _nearestObjects];
#endif
private _isDetectable = false;
private _mine = objNull;
private _distance = -1;
{
if ((getModelInfo _x) select 0 == "empty.p3d") then {
continue;
};
// If an object was detected, exit the search
if ((typeOf _x) in (uiNamespace getVariable QGVAR(detectableClasses))) exitWith {
_isDetectable = true;
_distance = _detectorPointAGL distance _x;
_mine = _x;
TRACE_3("return",_isDetectable,_mine,_distance);
};
} forEach _nearestObjects;
[_isDetectable, _mine, _distance];