2022-09-01 18:44:19 +00:00
|
|
|
#include "script_component.hpp"
|
|
|
|
/*
|
|
|
|
* Author: PabstMirror
|
|
|
|
* Updates the menu display
|
|
|
|
*
|
|
|
|
* Arguments:
|
|
|
|
* 0: Display <DISPLAY>
|
|
|
|
* 1: Menu Item Needs Updating <BOOL>
|
|
|
|
*
|
|
|
|
* Return Value:
|
|
|
|
* None
|
|
|
|
*
|
|
|
|
* Example:
|
|
|
|
* [display, true] call ace_xm157_fnc_weaponInfo_drawMenu
|
|
|
|
*
|
|
|
|
* Public: No
|
|
|
|
*/
|
|
|
|
|
|
|
|
params ["_display", "_needsUpdate"];
|
|
|
|
|
|
|
|
if (isNil QGVAR(menu)) then {
|
|
|
|
private _arrayUp = {
|
|
|
|
params ["", "_var", "_thing"];
|
|
|
|
private _value = GVAR(data) getOrDefault [_var, 0];
|
2023-09-12 01:44:25 +00:00
|
|
|
_value = (_value + 1 + count _thing) % count _thing;
|
2022-09-01 18:44:19 +00:00
|
|
|
GVAR(data) set [_var, _value];
|
|
|
|
};
|
|
|
|
private _arrayDown = {
|
|
|
|
params ["", "_var", "_thing"];
|
|
|
|
private _value = GVAR(data) getOrDefault [_var, 0];
|
|
|
|
_value = (_value - 1 + count _thing) % count _thing;
|
|
|
|
GVAR(data) set [_var, _value];
|
|
|
|
};
|
|
|
|
private _rangeUp = {
|
|
|
|
private _range = GVAR(data) getOrDefault ["range", -1];
|
|
|
|
if (_range < 0) then { _range = 0; };
|
|
|
|
_range = RANGEFINDER_MAX min (100 + 100 * floor (_range/100));
|
|
|
|
GVAR(data) set ["range", _range];
|
|
|
|
};
|
|
|
|
private _rangeDown = {
|
|
|
|
private _range = GVAR(data) getOrDefault ["range", -1];
|
|
|
|
if (_range < 0) then { _range = 0; };
|
|
|
|
_range = 0 max (-100 + 100 * ceil (_range/100));
|
|
|
|
GVAR(data) set ["range", _range];
|
|
|
|
};
|
|
|
|
private _atmosphereInfo = {
|
|
|
|
private _altitude = (getPosASL ace_player) select 2;
|
|
|
|
private _relativeHumidity = EGVAR(weather,currentHumidity);
|
|
|
|
private _temperature = _altitude call EFUNC(weather,calculateTemperatureAtHeight);
|
|
|
|
private _barometricPressure = _altitude call EFUNC(weather,calculateBarometricPressure); // hPA
|
|
|
|
format ["%1%2 %3%4 %5hPA", _temperature toFixed 1, "°C", _relativeHumidity toFixed 1, "%", _barometricPressure toFixed 0]
|
|
|
|
};
|
|
|
|
GVAR(menu) = [
|
|
|
|
["", "", [""], _rangeUp, _rangeDown],
|
|
|
|
["Wind Speed (m/s)", "wind_speed", ["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"], _arrayUp, _arrayDown],
|
|
|
|
["Wind Direction", "wind_dir", ["N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"], _arrayUp, _arrayDown],
|
|
|
|
// ["CQB Reticle", "reticle_cqb", ["2 MOA Red Dot", "4 MOA Red Dot", "Off"], _arrayUp, _arrayDown],
|
|
|
|
["Bearing Display", "bearing_show", ["Degrees", "Mils", "Off"], _arrayUp, _arrayDown],
|
|
|
|
["Atmosphere", "", _atmosphereInfo, {}, {}]
|
|
|
|
];
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
private _index = GVAR(data) getOrDefault ["menu_index", 0];
|
|
|
|
(GVAR(menu) # _index) params ["_title", "_var", "_thing"];
|
|
|
|
if ((!_needsUpdate) && {_thing isEqualType []}) exitWith {};
|
|
|
|
|
|
|
|
private _ctrlMenuText = _display displayCtrl IDC_SCREEN_MENU_TEXT;
|
|
|
|
private _text = "";
|
|
|
|
if (_index != 0) then {
|
|
|
|
if (_thing isEqualType []) then {
|
|
|
|
GVAR(data) set ["menu_updated", false];
|
|
|
|
private _value = GVAR(data) getOrDefault [_var, 0];
|
|
|
|
_text = _title + "\n" + "<" + (_thing param [_value, "#BadIndex"]) + ">";
|
|
|
|
} else {
|
|
|
|
_text = _title + "\n" + ([_var] call _thing);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
_ctrlMenuText ctrlSetText _text;
|
|
|
|
|
|
|
|
GVAR(data) set ["menu_updated", false];
|