/*
 * Author: commy2, PabstMirror and esteldunedain
 * Update the ppEffects everytime something changes
 *
 * Arguments:
 * Nothing
 *
 * Return Value:
 * Nothing
 *
 * Example:
 * [someEvent] call ace_nightvision_fnc_updatePPEffects
 *
 * Public: No
 */
#include "script_component.hpp"

private ["_currentVehicle", "_grainSetting", "_blurSetting", "_radBlurSetting", "_config", "_hmd", "_cameraView", "_turret"];

_currentVehicle = vehicle ACE_player;

// If the Zeus display is on or the player has no nightvision
if ((!isNull findDisplay 312) || ((currentVisionMode ACE_player) != 1)) exitWith {
    GVAR(ppEffectFilmGrain) ppEffectEnable false;
    GVAR(ppEffectBlur) ppEffectEnable false;
    GVAR(ppEffectRadialBlur) ppEffectEnable false;
    GVAR(ppEffectNVGBrightness) ppEffectEnable false;
};

// The unit has nightvision
_config = configFile >> "CfgVehicles" >> typeOf _currentVehicle;
_hmd = hmd ACE_player;
_cameraView = cameraView;
_turret = [ACE_player] call EFUNC(common,getTurretIndex);


_fnc_isUsingHMD = {
    if (_cameraView != "GUNNER") exitWith {true};  // asume hmd usage outside of gunner view

    if (ACE_player == (driver _currentVehicle)) exitWith {
        !("NVG" in getArray (_config >> "ViewOptics" >> "visionMode"));
    };

    private ["_result", "_turretConfig", "_turretConfigOpticsIn", "_index"];
    _result = true;
    _turretConfig = [_config, _turret] call EFUNC(common,getTurretConfigPath);
    _turretConfigOpticsIn = _turretConfig >> "OpticsIn";

    if (isClass _turretConfigOpticsIn) then {
        for "_index" from 0 to (count _turretConfigOpticsIn - 1) do {
            if ("NVG" in getArray (_turretConfigOpticsIn select _index >> "visionMode")) exitWith {_result = false};
        };
    } else {
        //No OpticsIn usualy means RCWS, still need to test on more vehicles
        _result = false;
    };
    _result
};

if ((_currentVehicle == ACE_player) || _fnc_isUsingHMD) then {
    _grainSetting = getNumber (configFile >> "CfgWeapons" >> _hmd >> "ACE_NightVision_grain");
    _blurSetting = getNumber (configFile >> "CfgWeapons" >> _hmd >> "ACE_NightVision_blur");
    _radBlurSetting = getNumber (configFile >> "CfgWeapons" >> _hmd >> "ACE_NightVision_radBlur");
    TRACE_3("New NVG Settings From Player NVG",_grainSetting,_blurSetting,_radBlurSetting)
} else {
    _grainSetting = _currentVehicle getVariable ["ACE_NightVision_grain", getNumber (_config >> "ACE_NightVision_grain")];
    _blurSetting = _currentVehicle getVariable ["ACE_NightVision_blur", getNumber (_config >> "ACE_NightVision_blur")];
    _radBlurSetting = _currentVehicle getVariable ["ACE_NightVision_radBlur", getNumber (_config >> "ACE_NightVision_radBlur")];
    TRACE_3("New NVG Settings From Vehicle",_grainSetting,_blurSetting,_radBlurSetting)
};


// Enable the effects
GVAR(ppEffectFilmGrain) ppEffectEnable true;
GVAR(ppEffectBlur) ppEffectEnable true;
GVAR(ppEffectRadialBlur) ppEffectEnable true;
GVAR(ppEffectNVGBrightness) ppEffectEnable true;

// Configure effects parameters
GVAR(ppEffectFilmGrain) ppEffectAdjust [0.25, 2.5, 2.5, _grainSetting, _grainSetting, false];
GVAR(ppEffectFilmGrain) ppEffectCommit 0;
GVAR(ppEffectBlur) ppEffectAdjust [_blurSetting];
GVAR(ppEffectBlur) ppEffectCommit 0;
GVAR(ppEffectRadialBlur) ppEffectAdjust [_radBlurSetting, _radBlurSetting, 0.2, 0.2];
GVAR(ppEffectRadialBlur) ppEffectCommit 0;