/*
 * Author: TheDrill, PabstMirror
 * The perFrameEventHandler to draw the icons
 *
 * Arguments:
 * None
 *
 * Return Value:
 * None
 *
 * Example:
 * [fromCBA] call ace_finger_fnc_perFrameEH;
 *
 * Public: No
 */
#include "script_component.hpp"

private["_drawColor", "_fovCorrection", "_iconSize", "_timeLeftToShow", "_cameraOffset"];

if (!alive ACE_player) then {GVAR(fingersHash) = HASH_CREATE;};
// Conditions: canInteract
if !([ACE_player, ACE_player, ["isNotInside"]] call EFUNC(common,canInteractWith)) then {GVAR(fingersHash) = HASH_CREATE;};
//make sure player is dismounted or in a static weapon:
if ((ACE_player != vehicle ACE_player) && {!((vehicle ACE_player) isKindOf "StaticWeapon")}) then {GVAR(fingersHash) = HASH_CREATE;};

_cameraOffset = worldToScreen (positionCameraToWorld [1000, 0, 10000]);
_fovCorrection = 0;
if (count _cameraOffset > 0) then {_fovCorrection = (_cameraOffset select 0) - 0.5;};
_iconSize = BASE_SIZE * _fovCorrection;

{
    _data = HASH_GET(GVAR(fingersHash), _x);
    EXPLODE_3_PVT(_data,_lastTime,_pos,_name);
    _timeLeftToShow = _lastTime + FP_TIMEOUT - ACE_diagTime;
    if (_timeLeftToShow <= 0) then {
        HASH_REM(GVAR(fingersHash), _x);
    } else {
        _drawColor = + GVAR(indicatorColor);
        //Fade out:
        if (_timeLeftToShow < 0.5) then {
            _drawColor set [3, ((_drawColor select 3) * (_timeLeftToShow / 0.5))];
        };

        drawIcon3D [QUOTE(PATHTOF(UI\fp_icon.paa)), _drawColor, _pos, _iconSize, _iconSize, 0, _name, 1, 0.03, "PuristaMedium"];
    };
} forEach (GVAR(fingersHash) select 0);

if ((count (GVAR(fingersHash) select 0)) == 0) then {
    [GVAR(pfeh_id)] call CBA_fnc_removePerFrameHandler;
    GVAR(pfeh_id) = -1;
};