forked from acemod/ACE3
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfnc_toggleLST.sqf
69 lines (57 loc) · 2.6 KB
/
fnc_toggleLST.sqf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "script_component.hpp"
/*
* Author: LorenLuke
* Toggles the laser spot tracker for any enabled vehicle;
*
* Arguments:
* 0: Vehicle <OBJECT>
*
* Return Value:
* Nothing
*
* Example:
* [vehicle player] call ace_laser_fnc_toggleLST
*
* Public: No
*/
params ["_vehicle"];
if !(_vehicle getVariable [QGVAR(hasLaserSpotTracker), false]) exitWith {};
private _enabled = _vehicle getVariable [QGVAR(laserSpotTrackerOn), false];
_vehicle setVariable [QGVAR(laserSpotTrackerOn), ! _enabled];
private _LSTmessage = if (_vehicle getVariable [QGVAR(laserSpotTrackerOn), false]) then {localize LSTRING(LSTOn)} else {localize LSTRING(LSTOff)};
private _string = format ["%1<br/>", _LSTmessage];
private _laserCode = _vehicle getVariable [QGVAR(code), ACE_DEFAULT_LASER_CODE];
_string = format ["%1%2: %3<br/>",_string, localize LSTRING(laserCode), _laserCode];
[_string] call EFUNC(common,displayTextStructured);
GVAR(TrackerpfID) = [{
params ["_args", "_pfID"];
_args params ["_vehicle"];
if (!(_vehicle getVariable [QGVAR(laserSpotTrackerOn), false]) || (!alive _vehicle)) exitWith {
[_pfID] call CBA_fnc_removePerFrameHandler;
};
private _pos = _vehicle modelToWorldWorld [0,0,0];
private _pilotCameraPos = getPilotCameraPosition _vehicle;
private _pilotCameraRotation = getPilotCameraRotation _vehicle;
private _laserCode = _vehicle getVariable [QEGVAR(laser,code), ACE_DEFAULT_LASER_CODE];
private _angle = 30;
if ((getPilotCameraTarget _vehicle) select 0) then {
_angle = 0.75;
};
private _pilotCameraLookPos = [
sin(-deg(_pilotCameraRotation select 0)) * cos(-deg(_pilotCameraRotation select 1)),
cos(-deg(_pilotCameraRotation select 0)) * cos(-deg(_pilotCameraRotation select 1)),
sin(-deg(_pilotCameraRotation select 1))
];
private _pilotCameraVector = _pos vectorFromTo (_vehicle modelToWorldWorld _pilotCameraLookPos);
private _laserSource = _vehicle modelToWorldWorld _pilotCameraPos;
private _laserResult = [_laserSource, _pilotCameraVector, _angle, 5000, [ACE_DEFAULT_LASER_WAVELENGTH,ACE_DEFAULT_LASER_WAVELENGTH], _laserCode, _vehicle, _vehicle] call FUNC(seekerFindLaserSpot);
private _foundTargetPos = _laserResult select 0;
if ((getPilotCameraTarget _vehicle) select 0) then {
private _distance = ((getPilotCameraTarget _vehicle) select 1) distance _foundTargetPos;
if (_distance > 0.75) then {
_vehicle setPilotCameraTarget _foundTargetPos;
};
} else {
_vehicle setPilotCameraTarget _foundTargetPos;
};
}, 0, [_vehicle]] call CBA_fnc_addPerFrameHandler;