From 555f0c892106bf32d294a73cd41ae318798e692a Mon Sep 17 00:00:00 2001 From: Brandon Danyluk Date: Tue, 13 Apr 2021 20:51:21 -0600 Subject: [PATCH] SALH: only update seeker pos if it within small error --- .../functions/fnc_navigationType_zeroEffortMiss.sqf | 4 ++++ addons/missileguidance/functions/fnc_seekerType_SALH.sqf | 7 +++++++ addons/missileguidance/todo.txt | 3 +-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/addons/missileguidance/functions/fnc_navigationType_zeroEffortMiss.sqf b/addons/missileguidance/functions/fnc_navigationType_zeroEffortMiss.sqf index 78d78da10b..81afcf1687 100644 --- a/addons/missileguidance/functions/fnc_navigationType_zeroEffortMiss.sqf +++ b/addons/missileguidance/functions/fnc_navigationType_zeroEffortMiss.sqf @@ -25,6 +25,10 @@ private _vectorToTarget = _attackProfileDirection vectorMultiply _targetRange; private _closingVelocity = _targetVelocity vectorDiff velocity _projectile; private _timeToGo = _targetRange / vectorMagnitude _closingVelocity; +if (_timeToGo == 0) then { + _timeToGo = 0.001; +}; + private _zeroEffortMiss = _vectorToTarget vectorAdd (_closingVelocity vectorMultiply _timeToGo); private _zeroEffortMissProjectiled = _attackProfileDirection vectorMultiply (_zeroEffortMiss vectorDotProduct _attackProfileDirection); private _zeroEffortMissNormal = _zeroEffortMiss vectorDiff _zeroEffortMissProjectiled; diff --git a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf index da2d298f53..3e3c4b77e5 100644 --- a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf @@ -17,6 +17,7 @@ * Public: No */ #define MAX_AVERAGES 15 +#define MINIMUM_DISTANCE_UNTIL_NEW_POS 1 params ["", "_args", "", "", "_timestep"]; _args params ["_firedEH", "_launchParams", "", "_seekerParams", "", "_targetData"]; @@ -49,6 +50,12 @@ private _aproximateVelocity = [0, 0, 0]; _positionSum = _positionSum vectorAdd _foundTargetPos; if (MAX_AVERAGES == count _lastPositions) then { _positionSum = _positionSum vectorMultiply (1 / (1 + count _lastPositions)); + + // if we are within a meter of the previous average, just use the previous average + if (_positionSum distanceSqr _lastPositionSum < MINIMUM_DISTANCE_UNTIL_NEW_POS * MINIMUM_DISTANCE_UNTIL_NEW_POS) then { + _positionSum = _lastPositionSum; + }; + if (_timestep != 0) then { _aproximateVelocity = (_positionSum vectorDiff _lastPositionSum) vectorMultiply (1 / _timestep); }; diff --git a/addons/missileguidance/todo.txt b/addons/missileguidance/todo.txt index 2c2b970bfc..a65ffe7850 100644 --- a/addons/missileguidance/todo.txt +++ b/addons/missileguidance/todo.txt @@ -37,7 +37,7 @@ Seeker Types: Navigation Types: X GBU-12 - LOS Guidance X NLAW - LOS Guidance - + X Dragon - NA Metis - Wire/Beam Guidance @@ -57,7 +57,6 @@ Navigation Types: R-77 - ZEM AIM-120 - ZEM AIM-132 - ZEM - KH-25 - Pro Nav GBU-SDB - ZEM Navigation State Machine: