From f3bea7bb3011451b5ae4484fdae325be99c53014 Mon Sep 17 00:00:00 2001 From: Brandon Danyluk Date: Sat, 1 May 2021 22:58:11 -0600 Subject: [PATCH] change how IR seeker performs The angle check is better now. Relative velocites guarenteed --- addons/aim9/CfgAmmo.hpp | 10 +++++----- addons/manpad/CfgAmmo.hpp | 10 ++++++++++ .../missileguidance/functions/fnc_onFired.sqf | 2 +- .../functions/fnc_seekerType_IR.sqf | 19 +++++++++---------- 4 files changed, 25 insertions(+), 16 deletions(-) diff --git a/addons/aim9/CfgAmmo.hpp b/addons/aim9/CfgAmmo.hpp index 63be988ba7..eed1b3e652 100644 --- a/addons/aim9/CfgAmmo.hpp +++ b/addons/aim9/CfgAmmo.hpp @@ -1,7 +1,7 @@ class CfgAmmo { class Missile_AA_04_F; class GVAR(m): Missile_AA_04_F { - missileLockCone = 45; + missileLockCone = 3; // caged lock missileKeepLockedCone = 45; missileLockMaxDistance = 5000; missileLockMinDistance = 250; @@ -45,7 +45,7 @@ class CfgAmmo { class ammo_Missile_BIM9X; class GVAR(x): ammo_Missile_BIM9X { - missileLockCone = 120; + missileLockCone = 3; // caged lock missileKeepLockedCone = 120; missileLockMaxDistance = 5000; missileLockMinDistance = 250; @@ -90,7 +90,7 @@ class CfgAmmo { // AIM-132 class M_Air_AA; class GVAR(aim132): M_Air_AA { - missileLockCone = 120; + missileLockCone = 3; // caged lock missileKeepLockedCone = 120; missileLockMaxDistance = 8000; missileLockMinDistance = 250; @@ -135,7 +135,7 @@ class CfgAmmo { // R-73 class ammo_Missile_AA_R73; class GVAR(r73): ammo_Missile_AA_R73 { - missileLockCone = 40; + missileLockCone = 3; // caged lock missileKeepLockedCone = 40; missileLockMaxDistance = 5000; missileLockMinDistance = 250; @@ -179,7 +179,7 @@ class CfgAmmo { class Missile_AA_03_F; class GVAR(r74): Missile_AA_03_F { - missileLockCone = 75; + missileLockCone = 3; // caged lock missileKeepLockedCone = 75; missileLockMaxDistance = 8000; missileLockMinDistance = 250; diff --git a/addons/manpad/CfgAmmo.hpp b/addons/manpad/CfgAmmo.hpp index 25e854b525..97edff0f8d 100644 --- a/addons/manpad/CfgAmmo.hpp +++ b/addons/manpad/CfgAmmo.hpp @@ -4,6 +4,11 @@ class CfgAmmo { maneuvrability = 0; missileLockMaxSpeed = 2000; + missileLockCone = 3; // caged lock + missileKeepLockedCone = 45; + missileLockMaxDistance = 5000; + missileLockMinDistance = 250; + class ace_missileguidance { enabled = 1; @@ -43,6 +48,11 @@ class CfgAmmo { maneuvrability = 0; missileLockMaxSpeed = 2000; + missileLockCone = 3; // caged lock + missileKeepLockedCone = 45; + missileLockMaxDistance = 5000; + missileLockMinDistance = 250; + class ace_missileguidance { enabled = 1; diff --git a/addons/missileguidance/functions/fnc_onFired.sqf b/addons/missileguidance/functions/fnc_onFired.sqf index 983df2c5ab..8018cae9eb 100644 --- a/addons/missileguidance/functions/fnc_onFired.sqf +++ b/addons/missileguidance/functions/fnc_onFired.sqf @@ -190,7 +190,7 @@ if (_states isEqualTo []) then { TRACE_1("navigation on fired",_onFiredFunc); if (_onFiredFunc != "") then { private _navState = (_args call (missionNamespace getVariable _onFiredFunc)); - (_navigationStateData select 4) set [4, _navState]; + (_args select 4) set [4, _navState]; }; } else { { diff --git a/addons/missileguidance/functions/fnc_seekerType_IR.sqf b/addons/missileguidance/functions/fnc_seekerType_IR.sqf index 2fb2495d6c..8d92bf73b0 100644 --- a/addons/missileguidance/functions/fnc_seekerType_IR.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_IR.sqf @@ -16,9 +16,9 @@ * Public: No */ #ifdef DEBUG_MODE_FULL -#define TRACK_ON_PAUSE false +#define TRACK_ON_PAUSE true #else -#define TRACK_ON_PAUSE false +#define TRACK_ON_PAUSE true #endif _args params ["_firedEH", "_launchParams", "_flightParams", "_seekerParams", "_stateParams", "_targetData"]; @@ -32,9 +32,6 @@ _targetData params ["_targetDirection", "_attackProfileDirection", "_targetRange _seekerStateParams params ["_flareDistanceFilter", "_flareAngleFilter", "_trackingTarget"]; -private _projectileVelocity = velocity _projectile; -private _closingVelocity = _targetVelocity vectorDiff _projectileVelocity; - private _withinView = [_projectile, getPosASLVisual _trackingTarget, _seekerAngle] call FUNC(checkSeekerAngle); private _canSee = [_projectile, _trackingTarget, false] call FUNC(checkLos); @@ -81,16 +78,18 @@ if (TRACK_ON_PAUSE || {accTime > 0 && !isGamePaused}) then { (_x isEqualTo _target && _trackingTarget isNotEqualTo _target) || { (_withinView && _canSee && _isFlare) } }; - + + private _relativeTargetVelocity = _projectile vectorWorldToModelVisual velocity _trackingTarget; + _relativeTargetVelocity set [1, 0]; private _foundDecoy = false; { if (_trackingTarget isNotEqualTo _x) then { private _considering = false; - private _distanceToFlare = _trackingTarget distanceSqr _x; + private _flareRelativeVelocity = _projectile vectorWorldToModelVisual velocity _x; + _flareRelativeVelocity set [1, 0]; + private _angleBetweenVelocities = acos (_relativeTargetVelocity vectorCos _flareRelativeVelocity); if !(_foundDecoy) then { - private _flareRelativeVelocity = (velocity _x) vectorDiff _projectileVelocity; - private _angleBetweenVelocities = acos (_closingVelocity vectorCos _flareRelativeVelocity); if (_angleBetweenVelocities <= _flareAngleFilter) then { _considering = true; if (_seekerAccuracy <= random 1) then { @@ -109,7 +108,7 @@ if (TRACK_ON_PAUSE || {accTime > 0 && !isGamePaused}) then { if (_trackingTarget isEqualTo _x) then { _colour = [0, 0, 1, 1]; }; - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", _colour, _flarePos, 0.75, 0.75, 0, "F", 1, 0.025, "TahomaB"]; + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", _colour, _flarePos, 0.75, 0.75, 0, format ["F %1", _angleBetweenVelocities], 1, 0.025, "TahomaB"]; }; }; } forEach _nearby;