/* * Author: Glowbal * * Draw progress bar and execute given function if succesful. * Finish/Failure/Conditional are all passed [_args, _elapsedTime, _totalTime, _errorCode] * * Argument: * 0: icon ID * 1: show * 2: Icon Path * 3: Icon color * 4: timeAlive. -1 = forever * * Return value: * Nothing * * Example: * ["myID", true, QUOTE(PATHTOF(data\icon_group.paa)), [1,1,1,1], 0] call ace_gui_fnc_displayIcon; */ #include "script_component.hpp" // positions for the icon UI #define RIGHT_SIDE (safezoneW + safezoneX) #define LEFT_SIDE safezoneX #define TOP_SIDE safeZoneY #define BOTTOM_SIDE (safeZoneH + safezoneY) #define ICON_WIDTH (2 * (((safezoneW / safezoneH) min 1.2) / 40)) #define X_POS_ICONS (RIGHT_SIDE - (1.5 * ICON_WIDTH)) #define Y_POS_ICONS (TOP_SIDE + (2.5 * ICON_WIDTH)) #define DIFFERENCE_ICONS (1.1 * ICON_WIDTH) #define X_POS_ICONS_SECOND (RIGHT_SIDE - (4.4 * ICON_WIDTH)) #define Y_POS_ICONS_SECOND (TOP_SIDE + (1.1 * ICON_WIDTH)) // setting values #define TOP_RIGHT_DOWN 1 #define TOP_RIGHT_LEFT 2 #define TOP_LEFT_DOWN 3 #define TOP_LEFT_RIGHT 4 // other constants #define DEFAULT_TIME 6 private ["_iconId", "_show", "_icon", "_allControls", "_refresh", "_timeAlive", "_list", "_color"]; _iconId = _this select 0; _show = _this select 1; _icon = _this select 2; _color = _this select 3; _timeAlive = if (count _this > 4) then {_this select 4} else {DEFAULT_TIME}; disableSerialization; _list = missionNamespace getvariable [QGVAR(displayIconList),[]]; _refresh = { private ["_allControls"]; // Refreshing of all icons.. _allControls = missionNamespace getvariable [QGVAR(displayIconListControls), []]; { ctrlDelete _x; }foreach _allControls; _allControls = []; private ["_ctrl", "_setting"]; _setting = missionNamespace getvariable[QGVAR(settingFeedbackIcons), 0]; if (_setting > 0) then { { // +19000 because we want to make certain we are using free IDCs.. _ctrl = ((findDisplay 46) ctrlCreate ["RscPicture", _foreachIndex + 19000]); _position = switch (_setting) do { case TOP_RIGHT_DOWN: {[X_POS_ICONS, Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]}; case TOP_RIGHT_LEFT: {[X_POS_ICONS_SECOND - ((_foreachIndex+3) * DIFFERENCE_ICONS), Y_POS_ICONS_SECOND - (ICON_WIDTH / 2), ICON_WIDTH, ICON_WIDTH]}; case TOP_LEFT_DOWN: {[LEFT_SIDE + (0.5 * ICON_WIDTH), Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]}; case TOP_LEFT_RIGHT: {[LEFT_SIDE + (0.5 * ICON_WIDTH) - ((_foreachIndex+3) * DIFFERENCE_ICONS), Y_POS_ICONS_SECOND, ICON_WIDTH, ICON_WIDTH]}; default {[X_POS_ICONS, Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]}; }; _ctrl ctrlSetPosition _position; _ctrl ctrlsetText (_x select 1); _ctrl ctrlSetTextColor (_x select 2); _ctrl ctrlCommit 0; _allControls pushback _ctrl; }foreach (missionNamespace getvariable [QGVAR(displayIconList),[]]); }; missionNamespace setvariable [QGVAR(displayIconListControls), _allControls]; }; if (_show) then { if ({(_x select 0 == _iconId)} count _list == 0) then { _list pushback [_iconId, _icon, _color, time]; } else { { if (_x select 0 == _iconId) exitwith { _list set [_foreachIndex, [_iconId, _icon, _color, time]]; }; }foreach _list; }; missionNamespace setvariable [QGVAR(displayIconList), _list]; call _refresh; if (_timeAlive >= 0) then { [{ [_this select 0, false, "", [0,0,0], 0] call FUNC(displayIcon); }, [_iconId], _timeAlive, _timeAlive] call EFUNC(common,waitAndExecute); }; } else { if ({(_x select 0 == _iconId)} count _list == 1) then { private "_newList"; _newList = []; { if (_x select 0 != _iconId) then { _newList pushback _x; }; }foreach _list; missionNamespace setvariable [QGVAR(displayIconList), _newList]; call _refresh; }; };