diff --git a/addons/medical/functions/fnc_createLitter.sqf b/addons/medical/functions/fnc_createLitter.sqf index 740a7e7c56..a19ad3cace 100644 --- a/addons/medical/functions/fnc_createLitter.sqf +++ b/addons/medical/functions/fnc_createLitter.sqf @@ -31,30 +31,51 @@ if !(isArray (_config >> "litter")) exitwith {}; _litter = getArray (_config >> "litter"); _createLitter = { - _position = getPos (_this select 0); - _litterClass = _this select 1; - _litterObject = createVehicle [_litterClass, _position, [], 0, "NONE"]; - _litterObject setPos [(_position select 0) + random 0.5, (_position select 1) + random 1.2, _position select 2]; - _litterObject setDir (random 360); - _litterObject; + _position = getPos (_this select 0); + _litterClass = _this select 1; + _litterObject = createVehicle [_litterClass, _position, [], 0, "NONE"]; + _litterObject setPos [(_position select 0) + random 0.5, (_position select 1) + random 1.2, _position select 2]; + _litterObject setDir (random 360); + _litterObject; +}; + +if (isnil QGVAR(allCreatedLitter)) then { + GVAR(allCreatedLitter) = []; + GVAR(litterPFHRunning) = false; }; _createdLitter = []; { - if (typeName _x == "ARRAY") then { - { - if (typeName _x == "STRING") exitwith { - _createdLitter pushback ([_target, _x] call _createLitter); - }; - }foreach _x; - }; - if (typeName _x == "STRING") then { - _createdLitter pushback ([_target, _x] call _createLitter); - }; + if (typeName _x == "ARRAY") then { + { + if (typeName _x == "STRING") exitwith { + _createdLitter pushback ([_target, _x] call _createLitter); + }; + }foreach _x; + }; + if (typeName _x == "STRING") then { + _createdLitter pushback ([_target, _x] call _createLitter); + }; }foreach _litter; -[{ - { - deleteVehicle _x; - }foreach (_this select 0); -}, [_createdLitter], 1800, 0] call EFUNC(common,waitAndExecute); +GVAR(allCreatedLitter) pushback [time, 1800, _createdLitter]; + +if !(GVAR(litterPFHRunning)) then { + GVAR(litterPFHRunning) = true; + [{ + { + if (time - (_x select 0) >= (_x select 1)) then { + { + deleteVehicle _x; + }foreach (_this select 2); + GVAR(allCreatedLitter) set[_foreachIndex, objNull]; + }; + }foreach GVAR(allCreatedLitter); + GVAR(allCreatedLitter) = GVAR(allCreatedLitter) - [objNull]; + + if (count GVAR(allCreatedLitter) == 0) exitwith { + GVAR(litterPFHRunning) = false; + [_this select 1] call CBA_fnc_removePerFrameHandler; + }; + }, 30, []] call CBA_fnc_addPerFrameHandler; +};