Add Advanced Throwing torque (rotation) (#5621)

* Add throwable rotation

* torque grenade config

* Cleanup

* Do vectorNormalized on direction only
This commit is contained in:
jonpas 2017-10-15 20:06:18 +02:00 committed by GitHub
parent 6e219b8678
commit 7183a765f5
4 changed files with 23 additions and 7 deletions

View File

@ -0,0 +1,7 @@
class CfgAmmo {
class Default;
class Grenade: Default {
GVAR(torqueDirection)[] = {1, 1, 0};
GVAR(torqueMagnitude) = "(50 + random 100) * selectRandom [1, -1]";
};
};

View File

@ -117,7 +117,9 @@ addMissionEventHandler ["Draw3D", { // Blue is predicted before throw, red is re
drawIcon3D ["\a3\ui_f\data\gui\cfg\hints\icon_text\group_1_ca.paa", [0,0,1,1], _newTrajAGL, 1, 1, 0, "", 2];
} forEach GVAR(predictedPath);
{
drawIcon3D ["\a3\ui_f\data\gui\cfg\hints\icon_text\group_1_ca.paa", [1,0,0,1], _x, 1, 1, 0, "", 2];
} forEach GVAR(flightPath)
_x params ["_pos", "_vectorUp"];
drawIcon3D ["\a3\ui_f\data\gui\cfg\hints\icon_text\group_1_ca.paa", [1,0,0,1], _pos, 1, 1, 0, "", 2];
drawLine3D [_pos, _pos vectorAdd _vectorUp, [1,0,1,1]];
} forEach GVAR(flightPath);
}];
#endif

View File

@ -15,5 +15,6 @@ class CfgPatches {
};
#include "ACE_Settings.hpp"
#include "CfgAmmo.hpp"
#include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp"

View File

@ -49,9 +49,15 @@ if (!(_unit getVariable [QGVAR(primed), false])) then {
_newVelocity = _newVelocity vectorAdd (velocity (vehicle _unit));
};
private _config = configFile >> "CfgAmmo" >> typeOf _activeThrowable;
private _torqueDir = vectorNormalized (getArray (_config >> QGVAR(torqueDirection)));
private _torqueMag = getNumber (_config >> QGVAR(torqueMagnitude));
private _torque = _torqueDir vectorMultiply _torqueMag;
// Drop if unit dies during throw process
if (alive _unit) then {
_activeThrowable setVelocity _newVelocity;
_activeThrowable addTorque (_unit vectorModelToWorld _torque);
};
// Invoke listenable event
@ -67,12 +73,12 @@ if (!(_unit getVariable [QGVAR(primed), false])) then {
#ifdef DRAW_THROW_PATH
GVAR(predictedPath) = call FUNC(drawArc); // save the current throw arc
GVAR(predictedPath) = call FUNC(drawArc); // Save the current throw arc
GVAR(flightPath) = [];
[_unit getVariable QGVAR(activeThrowable)] spawn {
params ["_grenade"];
while {!isNull _grenade} do {
GVAR(flightPath) pushBack ASLtoAGL getPosASL _grenade;
GVAR(flightRotation) = [];
(_unit getVariable QGVAR(activeThrowable)) spawn {
while {!isNull _this && {(getPosATL _this) select 2 > 0.05}} do {
GVAR(flightPath) pushBack [ASLtoAGL (getPosASL _this), vectorUp _this];
sleep 0.05;
};
};