#include "script_component.hpp"

if (!hasInterface) exitWith {};

GVAR(cacheAmmoLoudness) = call CBA_fnc_createNamespace;

GVAR(deafnessDV) = 0;
GVAR(deafnessPrior) = 0;
GVAR(volume) = 1;
GVAR(playerVehAttenuation) = 1;
GVAR(time3) = 0;
GVAR(damageCoefficent) = 1;
GVAR(volumeAttenuation) = 1;

["ace_settingsInitialized", {
    TRACE_1("settingInit",GVAR(EnableCombatDeafness));
    // Only run PFEH and install event handlers if combat deafness is enabled
    if (!GVAR(EnableCombatDeafness)) exitWith {};

    //Add XEH:
    ["CAManBase", "FiredNear", FUNC(firedNear)] call CBA_fnc_addClassEventHandler;
    ["CAManBase", "Explosion", FUNC(explosionNear)] call CBA_fnc_addClassEventHandler;

    // Update hearing protection now:
    [] call FUNC(updateHearingProtection);

    // Spawn volume updating process
    [FUNC(updateVolume), 1, [false]] call CBA_fnc_addPerFrameHandler;

    // Update veh attunation when player veh changes
    ["vehicle", FUNC(updatePlayerVehAttenuation)] call CBA_fnc_addPlayerEventHandler;
    ["turret", FUNC(updatePlayerVehAttenuation)] call CBA_fnc_addPlayerEventHandler;

    // Reset deafness on respawn (or remote control player switch)
    ["unit", {
        GVAR(deafnessDV) = 0;
        GVAR(deafnessPrior) = 0;
        ACE_player setVariable [QGVAR(deaf), false];
        GVAR(time3) = 0;
        [] call FUNC(updateHearingProtection);
    }] call CBA_fnc_addPlayerEventHandler;

    // Update protection on possible helmet change
    ["loadout", FUNC(updateHearingProtection)] call CBA_fnc_addPlayerEventHandler;
}] call CBA_fnc_addEventHandler;