fix NLAW navigation profile

This commit is contained in:
Brandon Danyluk 2021-08-02 16:22:38 -06:00
parent 25b1b47f5f
commit aff19ec6ea
2 changed files with 52 additions and 7 deletions

View File

@ -1,7 +1,7 @@
#include "script_component.hpp"
/*
* Author: Brandon (TCVM)
* Holds angle as fed to by seeker
* Attempts to hold angle as fed to by seeker. Does so with a simple proportional controller
*
* Arguments:
* Guidance Arg Array <ARRAY>
@ -14,13 +14,54 @@
*
* Public: No
*/
// arbitrary constant
#define PROPORTIONALITY_CONSTANT 3
params ["_args", "_timestep", "_seekerTargetPos", "_profileAdjustedTargetPos", "_targetData", "_navigationParams"];
_args params ["_firedEH"];
_firedEH params ["","","","","","","_projectile"];
_args params ["", "", "_flightParams"];
_flightParams params ["_pitchRate", "_yawRate"];
_navigationParams params ["_yawChange", "_pitchChange", "_startTime"];
_navigationParams params ["_yawChange", "_pitchChange", "_lastPitch", "_lastYaw"];
_projectile vectorModelToWorldVisual [2 * _yawChange, 0, 2 * _pitchChange]
// for some reason we need to double this. I don't know why, but it just works
_pitchChange = _pitchChange * 2;
_yawChange = _yawChange * 2;
((velocity _projectile) call CBA_fnc_vect2polar) params ["", "_currentYaw", "_currentPitch"];
private _pitchRate = if (_timestep == 0) then {
0
} else {
(_currentPitch - _lastPitch) / _timestep
};
_navigationParams set [2, _currentPitch];
private _pitchModifier = if (_pitchChange == 0) then {
1
} else {
abs (_pitchRate / _pitchChange);
};
private _desiredPitchChange = (_pitchChange - _pitchRate) * PROPORTIONALITY_CONSTANT * _pitchModifier;
private _yawRate = if (_timestep == 0) then {
0
} else {
(_currentYaw - _lastYaw) / _timestep
};
_navigationParams set [3, _currentYaw];
private _yawModifier = if (_yawChange == 0) then {
1
} else {
abs (_yawRate / _yawChange);
};
private _desiredYawChange = (_yawChange - _yawRate) * PROPORTIONALITY_CONSTANT * _yawModifier;
#ifdef DRAW_NLAW_INFO
drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,1,1], ASLtoAGL getPosASLVisual _projectile, 0.75, 0.75, 0, format ["dP [%1] dY: [%2]", _desiredPitchChange, _desiredYawChange], 1, 0.025, "TahomaB"];
drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,1,1], [0, 0, 1] vectorAdd ASLtoAGL getPosASLVisual _projectile, 0.75, 0.75, 0, format ["pitch proportional [%1] yaw proportional [%2]", _pitchModifier, _yawModifier], 1, 0.025, "TahomaB"];
#endif
TRACE_6("nlaw navigation",_yawChange,_desiredYawChange,_pitchChange,_desiredPitchChange,_yawRate,_pitchRate);
_projectile vectorModelToWorldVisual [_yawChange + _desiredYawChange, 0, _pitchChange + _desiredPitchChange]

View File

@ -7,7 +7,7 @@
* Guidance Arg Array <ARRAY>
*
* Return Value:
* None
* Navigation Parameters <ARRAY>
*
* Example:
* [] call ace_nlaw_fnc_onFired
@ -55,8 +55,12 @@ if (_shooter == ACE_player) then {
_yawChange = -10 max _yawChange min 10;
_pitchChange = -10 max _pitchChange min 10;
((velocity _projectile) call CBA_fnc_vect2polar) params ["", "_currentYaw", "_currentPitch"];
TRACE_3("attackProfileStateParams",_firedLOS,_yawChange,_pitchChange);
_navigationParams set [0, _yawChange];
_navigationParams set [1, _pitchChange];
_navigationParams set [2, CBA_missionTime];
_navigationParams set [3, _currentPitch]; // last pitch
_navigationParams set [4, _currentYaw]; // last yaw
_navigationParams