DLib/functions/Spectrum/fn_findTarget.sqf

67 lines
2.1 KiB
Plaintext
Raw Permalink Normal View History

2020-10-20 16:18:52 +00:00
/*
Author: Djeeberjr
Description:
Points the Sectrum device to a spesific object
Parameter(s):
0: OBJECT - target of the scan
1: NUMBER - interval of update e.g. 0.3
2: NUMBER - Frequency to scan on (UI only)
3: NUMBER - Cutoff signale after angle e.g. 90
4: NUMBER - Min distance to target befor device goes 100%
5: NUMBER - Max distance the target can be detected. Signal strength relativ to max distance.
6: OBJECT - receiver object most of the time the player
*/
_this spawn {
params ["_target","_interval","_scanFreq","_angleCutoff","_minDistance","_maxDistance",["_receiverObject",player]];
missionNamespace setVariable ["#EM_FMin", _scanFreq - 3];
missionNamespace setVariable ["#EM_FMax", _scanFreq + 3];
missionNamespace setVariable ["#EM_SelMin", _scanFreq - 0.3];
missionNamespace setVariable ["#EM_SelMax", _scanFreq + 0.3];
missionNamespace setVariable ["#EM_Progress", 0];
while {alive _receiverObject} do {
// Get distance
_objectDistance = round (_receiverObject distance _target);
// Get angle difference to target range from 0 to 180
_objectRelativeDirection = round (_receiverObject getRelDir _target);
if (_objectRelativeDirection >= 180) then{
_objectRelativeDirection = (360 - _objectRelativeDirection);
}else{
_objectRelativeDirection = _objectRelativeDirection;
};
// Apply angle cutoff
if (_objectRelativeDirection > _angleCutoff) then {
_objectRelativeDirection = 180; // Set angle to max value
};
_dirSignalStrength = 1 - linearConversion [0,_angleCutoff,_objectRelativeDirection,0,1,true];
_distSignalStrength = 1 - linearConversion [0,_maxDistance,_objectDistance,0,1,true];
_absSignalStrength = _dirSignalStrength * _distSignalStrength;
if (_objectDistance < _minDistance) then {
_absSignalStrength = 1;
_distSignalStrength = 1;
};
missionNamespace setVariable ["#EM_Values", [
_scanFreq,
linearConversion [0,1,_absSignalStrength,missionNamespace getVariable "#EM_SMin",missionNamespace getVariable "#EM_SMax"]
]];
missionNamespace setVariable ["#EM_Progress", _distSignalStrength];
sleep _interval;
};
};