#include "script_component.hpp"
/*
* Author: PabstMirror
* Updates the display (several times a second) called from the pfeh
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ace_radiodirectionfinder_fnc_updateDisplayAnim
*
* Public: No
*/
private _unit = ace_player;
private _backpackObject = backpackContainer _unit;
if (!([_unit] call FUNC(displayCondition))) exitWith {
TRACE_2("displayCondition failed",_unit,_backpackObject);
[DISPLAY_MODE_CLOSED] call FUNC(toggleDisplayMode);
};
params ["_args"];
_args params ["_deltaTime"];
_deltaTime = CBA_missionTime - _deltaTime;
_args set [0, CBA_missionTime];
private _canShow = [_unit, objNull, ["isNotSitting"]] call EFUNC(common,canInteractWith);
private _display = displayNull;
private _shown = false;
if (GVAR(currentShowMode) == DISPLAY_MODE_DISPLAY) then {
_display = uiNamespace getVariable [QGVAR(display), displayNull];
private _desiredPhase = if (_canShow && {cameraView != "GUNNER"} && {EGVAR(interact_menu,openedMenuType) < 0}) then {
if (weaponLowered _unit) then { 0.9 } else { 0.7 };
} else {
0
};
_shown = [_display, _desiredPhase, _deltaTime] call FUNC(updateDisplayAnim);
} else {
_display = uiNamespace getVariable [QGVAR(dialog), displayNull];
if ((!_canShow) || {isNull _display}) exitWith { [DISPLAY_MODE_DISPLAY, 1] call FUNC(toggleDisplayMode); };
_shown = [_display, 1, _deltaTime * 2] call FUNC(updateDisplayAnim);
};
if (!_shown) exitWith {};
if (GVAR(nextGuiUpate) > CBA_missionTime) exitWith {};
GVAR(nextGuiUpate) = CBA_missionTime + 0.1;
BEGIN_COUNTER(hudUpdate);
private _currentTargetFreq = _backpackObject getVariable [QGVAR(targetFreq), 0];
private _menuTab = _backpackObject getVariable [QGVAR(currentMode), IDC_MENU_BUTTON1];
// Update clock:
private _ctrlTime = _display displayCtrl IDC_CLOCK_TEXT;
_ctrlTime ctrlSetText ([daytime, "HH:MM"] call bis_fnc_timeToString);
// Update Menus:
(_display displayCtrl IDC_MODE1_GROUP) ctrlShow (_menuTab == IDC_MENU_BUTTON1);
(_display displayCtrl IDC_MODE2_GROUP) ctrlShow (_menuTab == IDC_MENU_BUTTON2);
(_display displayCtrl IDC_MODE3_GROUP) ctrlShow (_menuTab == IDC_MENU_BUTTON3);
(_display displayCtrl IDC_MENU_BG1) ctrlSetText (["#(argb,8,8,3)color(0.15,0.15,0.15,1)", "#(argb,8,8,3)color(0.5,0.5,0.5,1)"] select (_menuTab == IDC_MENU_BUTTON1));
(_display displayCtrl IDC_MENU_BG2) ctrlSetText (["#(argb,8,8,3)color(0.15,0.15,0.15,1)", "#(argb,8,8,3)color(0.5,0.5,0.5,1)"] select (_menuTab == IDC_MENU_BUTTON2));
(_display displayCtrl IDC_MENU_BG3) ctrlSetText (["#(argb,8,8,3)color(0.15,0.15,0.15,1)", "#(argb,8,8,3)color(0.5,0.5,0.5,1)"] select (_menuTab == IDC_MENU_BUTTON3));
switch (_menuTab) do {
case (IDC_MENU_BUTTON1): {
private _signals = [getPosASL _unit, _currentTargetFreq, 10] call FUNC(getSignals);
private _baseDir = getDir _unit;
// re-sort by relative dir
_signals = _signals apply {
_x params ["_rtx", "_freqMhz", "_bearing"];
private _relDir = (_bearing - getDir _unit) call CBA_fnc_simplifyAngle180;
[abs _relDir, _rtx, _freqMhz, _relDir, _bearing];
};
_signals sort true;
// Update compass
private _ctrlCircleArrow = _display displayCtrl IDC_MODE1_CIRCLE_ARROW;
_ctrlCircleArrow ctrlSetAngle [-_baseDir, 0.5, 0.5, true];
// Update dot for most front aligned signal
private _ctrlCircleDot = _display displayCtrl IDC_MODE1_CIRCLE_DOT;
private _primarySignalInfo = [];
if (_signals isEqualTo []) then {
_primarySignalInfo pushBack format ["Nothing", _freqMhz];
_ctrlCircleDot ctrlShow false;
} else {
_ctrlCircleDot ctrlShow true;
(_signals select 0) params ["", "_rtx", "_freqMhz", "_relDir", "_bearing"];
_ctrlCircleDot ctrlSetAngle [_relDir, 0.5, 0.5, true];
_primarySignalInfo pushBack format ["Center Frequency%1 MHz", _freqMhz toFixed 1];
_primarySignalInfo pushBack format ["Recieved Power%1 dBm", _rtx toFixed 1];
_primarySignalInfo pushBack format ["Bearing%1°", _bearing toFixed 0];
};
private _ctrlText = _display displayCtrl IDC_MODE1_SCAN_INFO_TEXT;
_ctrlText ctrlSetStructuredText parseText (_primarySignalInfo joinString "
");
// Update lines
private _lines = _display getVariable [QGVAR(lines), []];
{
if (_forEachIndex < (count _signals)) then {
_x ctrlShow true;
(_signals select _forEachIndex) params ["", "", "", "_relDir"];
_x ctrlSetAngle [_relDir, 0.5, 0.5, true];
} else {
_x ctrlShow false;
};
} forEach _lines;
};
case (IDC_MENU_BUTTON2): {
private _signals = [getPosASL _unit, _currentTargetFreq, 10] call FUNC(getSignals);
private _ctrlFreqSelectionText = _display displayCtrl IDC_MODE2_FREQ_TEXT;
private _currentTargetFreqText = if (_currentTargetFreq > 0) then { format ["%1 MHz",_currentTargetFreq] } else { "Any" };
_ctrlFreqSelectionText ctrlSetStructuredText parseText format ["Target Frequency: %1", _currentTargetFreqText];
private _ctrlSignalCount = _display displayCtrl IDC_MODE2_SIGNAL_COUNT;
_ctrlSignalCount ctrlSetText format ["Signal Count: %1", count _signals];
private _ctrlResetBackground = _display displayCtrl IDC_MODE2_RESET_BACKGROUND;
_ctrlResetBackground ctrlSetText (["#(argb,8,8,3)color(0.2,0.2,0.2,1)", "#(argb,8,8,3)color(0.9,0.1,0.1,1)"] select (_currentTargetFreq > 0));
};
case (IDC_MENU_BUTTON3): {
private _signals = [getPosASL _unit, 0, 20] call FUNC(getSignals); // no freq filter
_signals = _signals apply {
_x params ["_rtx", "_freqMhz", "_bearing"];
[_freqMhz, _rtx, _bearing]
};
_signals sort true;
private _ctrlSignalList = _display displayCtrl IDC_MODE3_LIST;
lnbClear _ctrlSignalList;
{
_x params ["_freqMhz", "_rtx", "_bearing"];
_ctrlSignalList lbAdd format ["%1 MHz (%2 dBm)", _freqMhz toFixed 0, _rtx toFixed 2];
_ctrlSignalList lbSetTextRight [_forEachIndex, format ["%1°", _bearing toFixed 0]];
} forEach _signals;
};
default {
ERROR_1("bad enum %1",_menuTab);
_backpackObject setVariable [QGVAR(currentMode), nil];
};
};
END_COUNTER(hudUpdate);