/* * Author: jaynus * Turns on laser self designation from this vehicle based on the turret. * There are no arguments, because it is all strictly based on the users vehicle. * * Argument: * * Return value: * N/A */ //#define DEBUG_MODE_FULL #include "script_component.hpp" TRACE_1("enter", _this); #define FCS_UPDATE_DELAY 1 FUNC(laserHudDesignatePFH) = { private["_strongestResultPos", "_args", "_localLaserTarget", "_laserResultPosition", "_laserResult", "_shooter", "_vehicle", "_weapon", "_gunnerInfo", "_turretInfo", "_pov", "_gunBeg", "_gunEnd", "_povPos", "_povDir", "_result", "_resultPositions", "_firstResult", "_forceUpdateTime"]; _args = _this select 0; _shooter = _args select 0; _localLaserTarget = _args select 2; _vehicle = vehicle _shooter; TRACE_1("", _args); if((vehicle _shooter) == _shooter || {!alive _shooter} || {isNull _vehicle} || {!GVAR(active)} ) exitWith { _args call FUNC(laserHudDesignateOff); }; if(!([_shooter] call FUNC(unitTurretHasDesignator)) ) exitWith { _args call FUNC(laserHudDesignateOff); }; if( (count _args) < 4) then { _args set[3, ACE_diagTime + FCS_UPDATE_DELAY]; }; _forceUpdateTime = _args select 3; // @TODO: We don't have anything here we need to do the calculations for right now /* _gunnerInfo = [_vehicle, (currentWeapon _vehicle)] call CBA_fnc_getFirer; _turretInfo = [_vehicle, _gunnerInfo select 1] call EFUNC(common,getTurretDirection); _povPos = _turretInfo select 0; _laserCode = (vehicle ACE_player) getVariable["ace_laser_code", ACE_DEFAULT_LASER_CODE]; _waveLength = (vehicle ACE_player) getVariable["ace_laser_waveLength", ACE_DEFAULT_LASER_WAVELENGTH]; _laserResult = [_povPos, [_waveLength,_waveLength], _laserCode] call EFUNC(laser,seekerFindLaserSpot); _laserResultPosition = _laserResult select 0; TRACE_1("Search", _laserResult); if((count _laserResult) > 0) then { // @TODO: Nou gets to field all tickets about missing lasers. //_localLaserTarget setPosASL _laserResultPosition; }; */ if(ACE_diagTime > _forceUpdateTime) then { ["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent; _args set[3, ACE_diagTime + FCS_UPDATE_DELAY]; }; _this set[0, _args]; }; private ["_laserTarget", "_handle", "_vehicle", "_laserUuid", "_waveLength", "_beamSpread", "_laserCode"]; if(!GVAR(active)) then { GVAR(active) = true; TRACE_1("Activating laser", ""); // Get the self-designation variables, or use defaults _laserCode = (vehicle ACE_player) getVariable["ace_laser_code", ACE_DEFAULT_LASER_CODE]; _waveLength = (vehicle ACE_player) getVariable["ace_laser_waveLength", ACE_DEFAULT_LASER_WAVELENGTH]; _beamSpread = (vehicle ACE_player) getVariable["ace_laser_beamSpread", ACE_DEFAULT_LASER_BEAMSPREAD]; _laserUuid = [(vehicle ACE_player), ACE_player, QFUNC(findLaserSource), _waveLength, _laserCode, _beamSpread] call EFUNC(laser,laserOn); // @TODO: Create the local target for the players side // @TODO: Nou gets to field all tickets about missing lasers. //_localLaserTarget = "LaserTargetW" createVehicleLocal (getpos ACE_player); GVAR(selfDesignateHandle) = [FUNC(laserHudDesignatePFH), 0.1, [ACE_player, _laserUuid, nil]] call CBA_fnc_addPerFrameHandler; } else { [] call FUNC(laserHudDesignateOff); [] call FUNC(laserHudDesignateOn); };