2015-01-11 16:42:31 +00:00
|
|
|
// TMR: Small Arms - Recoil initialization and functions
|
|
|
|
// (C) 2013 Ryan Schultz. See LICENSE.
|
2015-01-14 20:29:35 +00:00
|
|
|
// Edited for compatability in ACE by KoffeinFlummi
|
2015-01-11 16:42:31 +00:00
|
|
|
// Edited by commy2
|
|
|
|
|
2015-01-14 20:29:35 +00:00
|
|
|
#include "script_component.hpp"
|
|
|
|
|
2015-01-11 16:42:31 +00:00
|
|
|
private ["_unit", "_weapon", "_projectile"];
|
|
|
|
|
|
|
|
_unit = _this select 0;
|
|
|
|
_weapon = _this select 1;
|
|
|
|
_projectile = _this select 6;
|
|
|
|
|
|
|
|
if (_weapon in ["Throw", "Put"]) exitWith {};
|
|
|
|
|
|
|
|
private ["_lastFired", "_burst"];
|
|
|
|
|
2015-01-14 20:29:35 +00:00
|
|
|
_lastFired = _unit getVariable [QUOTE(GVAR(lastFired)), -1];
|
|
|
|
_burst = _unit getVariable [QUOTE(GVAR(burst)), 0];
|
2015-01-11 16:42:31 +00:00
|
|
|
|
|
|
|
if (time - _lastFired < 0.45) then {
|
|
|
|
private "_startDisperse";
|
|
|
|
_burst = _burst + 1;
|
2015-01-14 20:29:35 +00:00
|
|
|
_unit setVariable [QUOTE(GVAR(burst)), _burst, false];
|
2015-01-11 16:42:31 +00:00
|
|
|
|
|
|
|
_startDisperse = [1, 3] select (cameraView == "GUNNER");
|
|
|
|
|
|
|
|
if (_burst > _startDisperse) then {
|
|
|
|
// Reset burst size for calcs
|
|
|
|
_burst = _burst - _startDisperse;
|
|
|
|
|
|
|
|
// Increase dispersion cap if player is not using sights
|
|
|
|
_sightsBurst = [30, 0] select (cameraView == "GUNNER");
|
|
|
|
|
|
|
|
// Increase initial dispersion and cap if player is moving
|
|
|
|
if (speed _unit > 0.5) then {
|
|
|
|
_sightsBurst = 25;
|
|
|
|
_burst = _burst + 15;
|
|
|
|
};
|
|
|
|
|
|
|
|
// Maximum possible dispersion (without _sightsBurst mod)
|
|
|
|
_maxBurst = 50;
|
|
|
|
|
2015-01-14 20:29:35 +00:00
|
|
|
if (_unit getVariable [QUOTE(EGVAR(resting,weaponRested)), false]) then {_maxBurst = 25};
|
|
|
|
if (_unit getVariable [QUOTE(EGVAR(resting,bipodDeployed)), false]) then {_maxBurst = 18};
|
2015-01-11 16:42:31 +00:00
|
|
|
|
|
|
|
// Cap the dispersion
|
|
|
|
_burst = (_burst min _maxBurst) + _sightsBurst;
|
|
|
|
|
|
|
|
// Add random variance
|
|
|
|
_elevAngle = (_burst / 300) - random (_burst / 300) * 2;
|
|
|
|
_travAngle = (_burst / 260) - random (_burst / 260) * 2;
|
|
|
|
|
2015-01-14 20:29:35 +00:00
|
|
|
[_projectile, _travAngle, _elevAngle] call EFUNC(common,changeProjectileDirection);
|
2015-01-11 16:42:31 +00:00
|
|
|
};
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// Long enough delay, reset burst
|
2015-01-14 20:29:35 +00:00
|
|
|
_unit setVariable [QUOTE(GVAR(burst)), 0, false];
|
2015-01-11 16:42:31 +00:00
|
|
|
};
|
|
|
|
|
2015-01-14 20:29:35 +00:00
|
|
|
_unit setVariable [QUOTE(GVAR(lastFired)), time, false];
|