ACE3/TO_MERGE/ace/arty_m119/fnc_recoil.sqf

34 lines
1.3 KiB
Plaintext

//fnc_recoil.sqf
private["_gun", "_currentRound", "_elevatePhase", "_recoilLength", "_charge", "_chargeFactor",
"_elvOff", "_defOff", "_azOff"];
_gun = _this select 0;
_currentRound = _this select 1;
_elevatePhase = (_gun animationPhase "MainGun") max 0;
_recoilLength = 1.07-(((1.07-0.36)/1244)*_elevatePhase);
_charge = _currentRound select 3;
_chargeFactor = _charge/8;
_elvOff = (-1+(random 2))*_chargeFactor;
_defOff = (-0.5+(random 1))*_chargeFactor;
_azOff = (-0.25+(random 0.5))*_chargeFactor;
_recoilLength = _recoilLength*_chargeFactor;
_azimuthPhase = (_gun animationPhase "MainTurret");
_elevationPhase = (_gun animationPhase "MainGun");
_traversePhase = (_gun animationPhase "MainTurretTraverse");
_elvOff = (((_elvOff+_elevationPhase) max -100) min 1244);
_azOff = (_azOff+_azimuthPhase);
_defOff = (((_defOff+_traversePhase) max -100) min 100);
_gun animate ["recoil_source", _recoilLength];
_gun animate ["MainGun", _elvOff];
_gun animate ["MainTurret", _azOff];
_gun animate ["MainTurretTraverse", _defOff];
[_gun, _recoilLength] spawn {
private ["_gun", "_recoilLength"];
_gun = _this select 0;
_recoilLength = _this select 1;
waitUntil {
(_gun animationPhase "recoil_source" >= _recoilLength);
};
_gun animate ["recoil_source", 0];
};