ACE3/addons/frag/functions/fnc_initRound.sqf

78 lines
2.1 KiB
Plaintext
Raw Normal View History

2024-01-11 20:01:50 +00:00
#include "..\script_component.hpp"
2024-01-09 00:06:57 +00:00
/*
* Author: Lambda.Tiger
* This function adds rounds using their config init EH
2024-01-09 00:06:57 +00:00
* Arguments:
* 0: _projectile <OBJECT> - The object created
*
2024-01-09 00:06:57 +00:00
* Return Value:
* None
2024-01-09 00:06:57 +00:00
*
* Example:
* [_proj] call ace_frag_fnc_initRound;
2024-01-09 00:06:57 +00:00
*
* Public: No
*/
TRACE_1("ACE_Frag rndInit",_this);
params [
["_projectile", objNull, [objNull]]
];
2024-01-11 21:44:15 +00:00
private _ammo = typeOf _projectile;
if (_ammo isEqualTo "" || {isNull _projectile}) exitWith {
TRACE_2("bad ammo or projectile",_ammo,_projectile);
2024-01-09 00:06:57 +00:00
};
private _shouldFrag = _ammo call FUNC(shouldFrag);
2024-01-12 08:08:41 +00:00
if (_shouldFrag && GVAR(enabled)) then {
_projectile addEventHandler [
"Explode",
{
params ["_proj", "_posASL"];
private _shotParents = getShotParents _proj;
private _ammo = typeOf _proj;
2024-01-11 01:47:05 +00:00
// wait for frag damage to kill units before spawning fragments
2024-01-11 21:44:15 +00:00
[
FUNC(doFrag),
_this + [_ammo, _shotParents]
] call CBA_fnc_execNextFrame;
if (GVAR(reflectionsEnabled)) then {
[_posASL, _ammo] call FUNC(doReflections);
};
2024-01-09 00:06:57 +00:00
}
];
};
private _shouldSpall = _ammo call FUNC(shouldSpall);
if (GVAR(spallEnabled) && {_shouldSpall}) then
{
_projectile addEventHandler [
2024-01-09 00:06:57 +00:00
"HitPart",
{
params ["_proj", "_hitObj", "",
"_posASL", "_vel", "_sNorm", "",
"", "_surfType"
];
private _shotPrnt = getShotParents _proj;
private _ammo = typeOf _proj;
private _vUp = vectorUp _proj;
/*
* Wait a round to see what happens to the round, may result in
* multiple hits / slowdowns getting shunted to the first hit
*/
2024-01-11 21:44:15 +00:00
[
FUNC(doSpall),
2024-01-11 21:44:15 +00:00
[_proj, _hitObj, _posASL, _vel, _sNorm, _surfType, _ammo, _shotPrnt, _vUp]
] call CBA_fnc_execNextFrame;
}
2024-01-09 00:06:57 +00:00
];
};
#ifdef DEBUG_MODE_DRAW
if (GVAR(debugOptions) && (_shouldFrag || _shouldSpall)) then {
[_projectile, "red", true] call FUNC(dev_trackObj);
};
#endif
TRACE_2("initExit",_shouldFrag,_shouldSpall);