/* fnc_rainEffect.sqf Author: Garth de Wet (LH) Description: Parameters: Nothing Returns: Nothing Example: [] spawn FUNC(RainEffect); */ #include "script_component.hpp" private ["_fnc_underCover"]; if (isNull(ace_player) || {!(alive ace_player)}) exitWith {}; _fnc_underCover = { private ["_pos", "_unit"]; _unit = (_this select 0); if (vehicle _unit != _unit && {!([_unit] call EFUNC(common,isTurnedOut))}) exitWith {true}; _pos = eyePos _unit; ((positionCameraToWorld [0,0,1] select 2) < ((positionCameraToWorld [0,0,0] select 2) - 0.4)) || {(lineIntersects [_pos, _pos vectorAdd [0,0,15], _unit])} }; if (isNull(findDisplay 312)) exitWith { if (GVAR(RainActive)) then { call FUNC(RemoveRainEffect); }; }; // Ignore if ace_player is under water if (!GVAR(EffectsActive) || {underwater ace_player}) exitWith{call FUNC(RemoveRainEffect);}; if (GVAR(RainLastRain) != rain) then { call FUNC(RemoveRainEffect); GVAR(RainLastRain) = rain; // Rain is happening if (GVAR(RainLastRain) > 0.05 && {!([ace_player] call _fnc_underCover)}) then { GVAR(RainActive) = true; GVAR(RainDrops) = "#particlesource" createVehicleLocal GetPos ace_player; GVAR(RainDrops) setParticleClass "ACERainEffect"; GVAR(RainDrops) setDropInterval (0.07 * (1.1 - GVAR(RainLastRain))); GVAR(RainDrops) attachTo [vehicle ace_player,[0,0,0]]; }; }else{ if (GVAR(RainLastRain) > 0.05) then { if (GVAR(RainActive) && {[ace_player] call _fnc_underCover}) exitWith { call FUNC(RemoveRainEffect); }; if (!GVAR(RainActive)) then { GVAR(RainLastRain) = -1; }; }; };