ACE3/addons/missileguidance/functions/fnc_onFired.sqf

89 lines
3.7 KiB
Plaintext
Raw Normal View History

//#define DEBUG_MODE_FULL
#include "script_component.hpp"
2015-04-08 15:19:19 +00:00
// Bail if guidance is disabled
2015-04-08 15:01:39 +00:00
// Bail on locality of the projectile, it should be local to us
if(GVAR(enabled) < 1 || {!local _projectile} ) exitWith { false };
2015-04-15 01:25:02 +00:00
if( !isPlayer _shooter && { GVAR(enabled) < 2 } ) exitWith { false };
2015-01-20 04:16:33 +00:00
2015-04-08 15:01:39 +00:00
private["_config", "_enabled", "_target", "_seekerType", "_attackProfile"];
2015-04-08 15:19:19 +00:00
PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile);
2015-04-07 05:38:34 +00:00
// Bail on not missile
if(! (_ammo isKindOf "MissileBase") ) exitWith { false };
2015-04-14 15:24:13 +00:00
_config = configFile >> "CfgAmmo" >> _ammo >> QUOTE(ADDON);
2015-04-08 15:01:39 +00:00
_enabled = getNumber ( _config >> "enabled");
2015-01-20 04:16:33 +00:00
2015-04-08 15:01:39 +00:00
// Bail if guidance is not enabled
if(isNil "_enabled" || {_enabled != 1}) exitWith { false };
2015-04-07 05:38:34 +00:00
_target = (vehicle _shooter) getVariable [QGVAR(target), nil];
2015-04-15 01:25:02 +00:00
_targetPos = (vehicle _shooter) getVariable [QGVAR(targetPosition), nil];
_seekerType = (vehicle _shooter) getVariable [QGVAR(seekerType), nil];
_attackProfile = (vehicle _shooter) getVariable [QGVAR(attackProfile), nil];
_lockMode = (vehicle _shooter) getVariable [QGVAR(lockMode), nil];
2015-04-15 01:25:02 +00:00
_launchPos = getPosASL (vehicle _shooter);
2015-04-08 21:31:44 +00:00
TRACE_3("Begin guidance", _target, _seekerType, _attackProfile);
2015-04-08 15:01:39 +00:00
if ( isNil "_seekerType" || { ! ( _seekerType in (getArray (_config >> "seekerTypes" ) ) ) } ) then {
_seekerType = getText (_config >> "defaultSeekerType");
};
if ( isNil "_attackProfile" || { ! ( _attackProfile in (getArray (_config >> "attackProfiles" ) ) ) } ) then {
_attackProfile = getText (_config >> "defaultAttackProfile");
};
if ( isNil "_lockMode" || { ! ( _lockMode in (getArray (_config >> "seekerLockModes" ) ) ) } ) then {
_lockMode = getText (_config >> "defaultSeekerLockMode");
};
2015-04-08 15:01:39 +00:00
// If we didn't get a target, try to fall back on tab locking
if(isNil "_target") then {
2015-04-15 01:25:02 +00:00
if(!isPlayer _shooter) then {
// This was an AI shot, lets still guide it on the AI target
_target = _shooter getVariable[QGVAR(vanilla_target), nil];
TRACE_1("Detected AI Shooter!", _target);
} else {
_canUseLock = getNumber (_config >> "canVanillaLock");
// @TODO: Get vanilla target
if(_canUseLock > 0 || cadetMode) then {
2015-04-15 01:25:02 +00:00
_vanillaTarget = cursorTarget;
TRACE_1("Using Vanilla Locking", _vanillaTarget);
if(!isNil "_vanillaTarget") then {
_target = _vanillaTarget;
};
};
};
};
2015-04-08 15:01:39 +00:00
TRACE_4("Beginning ACE guidance system",_target,_ammo,_seekerType,_attackProfile);
[FUNC(guidancePFH), 0, [_this,
2015-04-15 01:25:02 +00:00
[_shooter,
2015-04-08 15:01:39 +00:00
[_target, _targetPos, _launchPos],
_seekerType,
_attackProfile,
_lockMode
2015-04-08 15:01:39 +00:00
],
[
getNumber ( _config >> "minDeflection" ),
getNumber ( _config >> "maxDeflection" ),
getNumber ( _config >> "incDeflection" )
],
[
getNumber ( _config >> "seekerAngle" ),
getNumber ( _config >> "seekerAccuracy" ),
getNumber ( _config >> "seekerMaxRange" )
2015-04-08 22:34:59 +00:00
],
[ diag_tickTime, [], [] ]
2015-04-08 15:01:39 +00:00
]
] call cba_fnc_addPerFrameHandler;
/* Clears locking settings
(vehicle _shooter) setVariable [QGVAR(target), nil];
(vehicle _shooter) setVariable [QGVAR(seekerType), nil];
(vehicle _shooter) setVariable [QGVAR(attackProfile), nil];
(vehicle _shooter) setVariable [QGVAR(lockMode), nil];
*/