ACE3/addons/missileguidance/functions/fnc_checkLos.sqf
2020-04-25 08:41:45 +02:00

47 lines
1.2 KiB
Plaintext

#include "script_component.hpp"
/*
* Author: jaynus
* Returns whether the seeker object can see the target position with checkVisibility
*
* Arguments:
* 0: Seeker <OBJECT>
* 1: Target <OBJECT>
* 2: Whether or not to use checkVisibility to test for LOS <BOOLEAN>
*
* Return Value:
* Has LOS <BOOL>
*
* Example:
* [player, cursorTarget] call ace_missileguidance_fnc_checkLos;
*
* Public: No
*/
params ["_seeker", "_target", ["_checkVisibilityTest", true]];
// Boolean checkVisibilityTest so that if the seeker type is one that ignores smoke we revert back to raw LOS checking.
if (_checkVisibilityTest) exitWith {
private _visibility = [_seeker, "VIEW", _target] checkVisibility [getPosASL _seeker, aimPos _target];
_visibility > 0.001
};
if ((isNil "_seeker") || {isNil "_target"}) exitWith {
ERROR_2("nil",_seeker,_target);
false
};
private _targetPos = getPosASL _target;
private _targetAimPos = aimPos _target;
private _seekerPos = getPosASL _seeker;
private _return = true;
if (!((terrainIntersectASL [_seekerPos, _targetPos]) && {terrainIntersectASL [_seekerPos, _targetAimPos]})) then {
if (lineIntersects [_seekerPos, _targetPos, _seeker, _target]) then {
_return = false;
};
} else {
_return = false;
};
_return