/*
 * Author: commy2
 *
 * Display a message.
 *
 * Argument:
 * 0: Message (String)
 * 1: Play a clicking sound (Bool, optional default: false)
 * 2: How long before hiding the message in seconds (Number, optional default: 2 sec)
 * 3: Priority, higher priority messages will override lesser important ones (Number, optional default: 0)
 *
 * Return value:
 * Nothing
 */
#include "script_component.hpp"

#define DEFAULT_PLAY_SOUND false
#define DEFAULT_DELAY 2
#define DEFAULT_PRIORITY 0

_this resize 4;

private ["_text", "_sound", "_delay", "_priority", "_lastHintTime", "_lastHintPriority", "_time"];
_text = _this select 0;
_sound = _this select 1;
_delay = _this select 2;
_priority = _this select 3;

if (isNil QGVAR(lastHint)) then {
    GVAR(lastHint) = [0, 0];
};

_lastHintTime = GVAR(lastHint) select 0;
_lastHintPriority = GVAR(lastHint) select 1;

if !(typeName _text in ["STRING", "TEXT"]) then {_text = str _text};
if (isNil "_sound") then {_sound = DEFAULT_PLAY_SOUND};
if (isNil "_delay") then {_delay = DEFAULT_DELAY};
if (isNil "_priority") then {_priority = DEFAULT_PRIORITY};

_time = time;
if (_time > _lastHintTime + _delay || {_priority >= _lastHintPriority}) then {
    hintSilent _text;
    if (_sound) then {playSound "ACE_Sound_Click"};
    GVAR(lastHint) set [0, _time];
    GVAR(lastHint) set [1, _priority];

    [{if ((_this select 0) == GVAR(lastHint) select 0) then {hintSilent ""};}, [_time], _delay, 0] call FUNC(waitAndExecute);
};