Improve selective UI API (#3805)

* Improve selective UI API, Disable ammo count when reload component is loaded, Fix stance UI

* Upgrade Selective UI framework for controls that share IDCs for gunner and soldier

* Separate more soldier and gunner settings sharing same IDCs, Remove vehicle gunner weapon which has no effect anymore

* Separate more soldier and gunner IDC sharing elements, Fix typo, Fix API setting not being respected in case where selective type is not the same on load

* Rework Selective UI using ACE_UI config, Cleanup, Add ACE_UI to FCS component to mark it (is already disabled due to other necessary settings for FCS to function)

* Do location check in function, Rename condition to location, change to number

* Use macros in ACE_UI location
This commit is contained in:
jonpas 2016-06-02 14:32:39 +02:00
parent 5c7148de1f
commit 4c995d4c5c
18 changed files with 496 additions and 129 deletions

View File

@ -111,4 +111,8 @@ class RscInGameUI {
class RscStaminaBar {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscStaminaBar"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2(QUOTE(QGVAR(dlgStaminaBar)),_this select 0)]);
};
class RscStanceInfo {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscStanceInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Stance')])] call FUNC(localEvent););
};
};

7
addons/fcs/ACE_UI.hpp Normal file
View File

@ -0,0 +1,7 @@
class ACE_UI {
class gunnerZeroing {
class conditions {
ADDON = "false";
};
};
};

View File

@ -14,6 +14,7 @@ class CfgPatches {
};
#include "CfgEventHandlers.hpp"
#include "ACE_UI.hpp"
#include "CfgAmmo.hpp"
#include "CfgMagazines.hpp"

7
addons/reload/ACE_UI.hpp Normal file
View File

@ -0,0 +1,7 @@
class ACE_UI {
class ammoCount {
class conditions {
ADDON = "false";
};
};
};

View File

@ -14,11 +14,8 @@ class CfgPatches {
};
#include "CfgVehicles.hpp"
#include "CfgMagazines.hpp"
#include "CfgEventHandlers.hpp"
#include "CfgActions.hpp"
#include "ACE_Settings.hpp"
#include "ACE_UI.hpp"

View File

@ -45,7 +45,7 @@ class ACE_Settings {
};
// ADVANCED
// Upper Weapon Info
// Soldier
class GVAR(weaponName) {
category = CSTRING(Category);
displayName = CSTRING(WeaponName);
@ -70,8 +70,6 @@ class ACE_Settings {
value = 1;
isClientSettable = 1;
};
// Lower Weapon Info
class GVAR(ammoType) {
category = CSTRING(Category);
displayName = CSTRING(AmmoType);
@ -85,7 +83,7 @@ class ACE_Settings {
displayName = CSTRING(AmmoCount);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
value = 0;
value = 1;
isClientSettable = 1;
};
class GVAR(magCount) {
@ -122,14 +120,12 @@ class ACE_Settings {
};
class GVAR(weaponLowerInfoBackground) {
category = CSTRING(Category);
displayName = CSTRING(WeaponLowerInfoBackground); //todo
displayName = CSTRING(WeaponLowerInfoBackground);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
value = 1;
isClientSettable = 1;
};
// Stance
class GVAR(stance) {
category = CSTRING(Category);
displayName = CSTRING(Stance);
@ -138,8 +134,6 @@ class ACE_Settings {
value = 1;
isClientSettable = 1;
};
// Stamina Bar
class GVAR(staminaBar) {
category = CSTRING(Category);
displayName = CSTRING(StaminaBar);
@ -149,6 +143,88 @@ class ACE_Settings {
isClientSettable = 1;
};
// Gunner
class GVAR(gunnerWeaponName) {
category = CSTRING(Category);
displayName = CSTRING(GunnerWeaponName);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
value = 1;
isClientSettable = 1;
};
class GVAR(gunnerWeaponNameBackground) {
category = CSTRING(Category);
displayName = CSTRING(GunnerWeaponNameBackground);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
value = 1;
isClientSettable = 1;
};
class GVAR(gunnerFiringMode) {
category = CSTRING(Category);
displayName = CSTRING(GunnerFiringMode);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
value = 1;
isClientSettable = 1;
};
class GVAR(gunnerAmmoType) {
category = CSTRING(Category);
displayName = CSTRING(GunnerAmmoType);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
value = 1;
isClientSettable = 1;
};
class GVAR(gunnerAmmoCount) {
category = CSTRING(Category);
displayName = CSTRING(GunnerAmmoCount);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
value = 1;
isClientSettable = 1;
};
class GVAR(gunnerMagCount) {
category = CSTRING(Category);
displayName = CSTRING(GunnerMagCount);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
value = 1;
isClientSettable = 1;
};
class GVAR(gunnerLaunchableName) {
category = CSTRING(Category);
displayName = CSTRING(gunnerLaunchableName);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
value = 1;
isClientSettable = 1;
};
class GVAR(gunnerLaunchableCount) {
category = CSTRING(Category);
displayName = CSTRING(gunnerLaunchableCount);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
value = 1;
isClientSettable = 1;
};
class GVAR(gunnerZeroing) {
category = CSTRING(Category);
displayName = CSTRING(GunnerZeroing);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
value = 1;
isClientSettable = 1;
};
class GVAR(gunnerWeaponLowerInfoBackground) {
category = CSTRING(Category);
displayName = CSTRING(GunnerWeaponLowerInfoBackground);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
value = 1;
isClientSettable = 1;
};
// Vehicle
class GVAR(vehicleName) {
category = CSTRING(Category);
@ -206,12 +282,4 @@ class ACE_Settings {
value = 1;
isClientSettable = 1;
};
class GVAR(vehicleGunnerWeapon) {
category = CSTRING(Category);
displayName = CSTRING(VehicleGunnerWeapon);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
value = 1;
isClientSettable = 1;
};
};

180
addons/ui/ACE_UI.hpp Normal file
View File

@ -0,0 +1,180 @@
#define ANYWHERE 0
#define GROUND_ONLY 1
#define VEHICLE_ONLY 2
class ACE_UI {
class weaponName {
idd = 300;
elements[] = {118};
location = GROUND_ONLY;
class conditions {};
};
class weaponNameBackground {
idd = 300;
elements[] = {1001, 1008};
location = GROUND_ONLY;
class conditions {};
};
class firingMode {
idd = 300;
elements[] = {187, 1203};
location = GROUND_ONLY;
class conditions {};
};
class ammoType {
idd = 300;
elements[] = {155};
location = GROUND_ONLY;
class conditions {};
};
class ammoCount {
idd = 300;
elements[] = {184};
location = GROUND_ONLY;
class conditions {};
};
class magCount {
idd = 300;
elements[] = {185};
location = GROUND_ONLY;
class conditions {};
};
class throwableName {
idd = 300;
elements[] = {152};
location = GROUND_ONLY;
class conditions {};
};
class throwableCount {
idd = 300;
elements[] = {151};
location = GROUND_ONLY;
class conditions {};
};
class zeroing {
idd = 300;
elements[] = {168};
location = GROUND_ONLY;
class conditions {};
};
class weaponLowerInfoBackground {
idd = 300;
elements[] = {1202};
location = GROUND_ONLY;
class conditions {};
};
class staminaBar {
idd = 305;
elements[] = {193};
location = GROUND_ONLY;
class conditions {};
};
class stance {
idd = 303;
elements[] = {188, 1201};
location = GROUND_ONLY;
class conditions {};
};
class gunnerWeaponName {
idd = 300;
elements[] = {118};
location = VEHICLE_ONLY;
class conditions {};
};
class gunnerWeaponNameBackground {
idd = 300;
elements[] = {1001, 1008};
location = VEHICLE_ONLY;
class conditions {};
};
class gunnerFiringMode {
idd = 300;
elements[] = {187, 1203};
location = VEHICLE_ONLY;
class conditions {};
};
class gunnerAmmoType {
idd = 300;
elements[] = {155};
location = VEHICLE_ONLY;
class conditions {};
};
class gunnerAmmoCount {
idd = 300;
elements[] = {184};
location = VEHICLE_ONLY;
class conditions {};
};
class gunnerMagCount {
idd = 300;
elements[] = {185};
location = VEHICLE_ONLY;
class conditions {};
};
class gunnerLaunchableName {
idd = 300;
elements[] = {152};
location = VEHICLE_ONLY;
class conditions {};
};
class gunnerLaunchableCount {
idd = 300;
elements[] = {151};
location = VEHICLE_ONLY;
class conditions {};
};
class gunnerZeroing {
idd = 300;
elements[] = {168};
location = VEHICLE_ONLY;
class conditions {};
};
class gunnerWeaponLowerInfoBackground {
idd = 300;
elements[] = {1202};
location = VEHICLE_ONLY;
class conditions {};
};
class vehicleName {
idd = 300;
elements[] = {120};
location = VEHICLE_ONLY;
class conditions {};
};
class vehicleNameBackground {
idd = 300;
elements[] = {1000, 1013};
location = VEHICLE_ONLY;
class conditions {};
};
class vehicleFuelBar {
idd = 300;
elements[] = {113, 1202};
location = VEHICLE_ONLY;
class conditions {};
};
class vehicleSpeed {
idd = 300;
elements[] = {121, 1004, 1006};
location = VEHICLE_ONLY;
class conditions {};
};
class vehicleAltitude {
idd = 300;
elements[] = {122, 1005, 1014};
location = VEHICLE_ONLY;
class conditions {};
};
class vehicleDamage {
idd = 300;
elements[] = {111};
location = VEHICLE_ONLY;
class conditions {};
};
class vehicleInfoBackground {
idd = 300;
elements[] = {1200};
location = VEHICLE_ONLY;
class conditions {};
};
};

View File

@ -44,7 +44,7 @@ class CfgVehicles {
};
// ADVANCED
// Upper Weapon Info
// Soldier
class weaponName {
displayName = CSTRING(WeaponName);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
@ -63,8 +63,6 @@ class CfgVehicles {
typeName = "BOOL";
defaultValue = 1;
};
// Lower Weapon Info
class ammoType {
displayName = CSTRING(AmmoType);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
@ -75,7 +73,7 @@ class CfgVehicles {
displayName = CSTRING(AmmoCount);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
defaultValue = 0;
defaultValue = 1;
};
class magCount {
displayName = CSTRING(MagCount);
@ -107,16 +105,12 @@ class CfgVehicles {
typeName = "BOOL";
defaultValue = 1;
};
// Stance
class stance {
displayName = CSTRING(Stance);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
defaultValue = 1;
};
// Stamina Bar
class staminaBar {
displayName = CSTRING(StaminaBar);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
@ -124,6 +118,68 @@ class CfgVehicles {
defaultValue = 1;
};
// Gunner
class gunnerWeaponName {
displayName = CSTRING(GunnerWeaponName);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
defaultValue = 1;
};
class gunnerWeaponNameBackground {
displayName = CSTRING(GunnerWeaponNameBackground);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
defaultValue = 1;
};
class gunnerFiringMode {
displayName = CSTRING(GunnerFiringMode);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
defaultValue = 1;
};
class gunnerAmmoType {
displayName = CSTRING(GunnerAmmoType);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
defaultValue = 1;
};
class gunnerAmmoCount {
displayName = CSTRING(GunnerAmmoCount);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
defaultValue = 1;
};
class gunnerMagCount {
displayName = CSTRING(GunnerMagCount);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
defaultValue = 1;
};
class gunnerLaunchableName {
displayName = CSTRING(gunnerLaunchableName);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
defaultValue = 1;
};
class gunnerLaunchableCount {
displayName = CSTRING(gunnerLaunchableCount);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
defaultValue = 1;
};
class gunnerZeroing {
displayName = CSTRING(GunnerZeroing);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
defaultValue = 1;
};
class gunnerWeaponLowerInfoBackground {
displayName = CSTRING(GunnerWeaponLowerInfoBackground);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
defaultValue = 1;
};
// Vehicle
class vehicleName {
displayName = CSTRING(VehicleName);
@ -167,12 +223,6 @@ class CfgVehicles {
typeName = "BOOL";
defaultValue = 1;
};
class vehicleGunnerWeapon {
displayName = CSTRING(VehicleGunnerWeapon);
description = CSTRING(RequiresSoldierVehicleWeaponInfo);
typeName = "BOOL";
defaultValue = 1;
};
};
class ModuleDescription {
description = CSTRING(ModuleDescription);

View File

@ -13,28 +13,27 @@ if (!hasInterface) exitWith {};
// Defaults must be set in this EH to make sure controls are activated and advanced settings can be modified
private _force = [true, false] select (GVAR(allowSelectiveUI));
{
[_x select 0, _x select 1, _x select 2, _force] call FUNC(setAdvancedElement);
} forEach ELEMENTS_ADVANCED;
private _name = configName _x;
[_name, missionNamespace getVariable (format [QGVAR(%1), _name]), false, _force] call FUNC(setAdvancedElement);
} forEach ("true" configClasses (configFile >> "ACE_UI"));
// Execute local event for when it's safe to modify UI through this API
// infoDisplayChanged can execute multiple times, make sure it only happens once
if (!GVAR(interfaceInitialized)) then {
["InterfaceInitialized", []] call EFUNC(common,localEvent);
GVAR(interfaceInitialized) = true;
};
}] call EFUNC(common,addEventHandler);
// On changing settings
["SettingChanged", {
params ["_name"];
// Selective UI Basic
if (_name in ELEMENTS_BASIC) then {
[false] call FUNC(setElements);
} else {
[_name select [7], missionNamespace getVariable _name, true] call FUNC(setAdvancedElement);
};
// Selective UI Advanced
{
_x params ["_idd", "_elements", "_elementName"];
if (_name == _elementName) then {
[_idd, _elements, _elementName] call FUNC(setAdvancedElement);
TRACE_2("Setting Changed",_name,_elementName);
};
} forEach ELEMENTS_ADVANCED;
}] call EFUNC(common,addEventHandler);
}] call EFUNC(common,addEventHandler);

View File

@ -5,5 +5,6 @@ ADDON = false;
#include "XEH_PREP.hpp"
GVAR(elementsSet) = [];
GVAR(interfaceInitialized) = false;
ADDON = true;

View File

@ -16,6 +16,7 @@ class CfgPatches {
#include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp"
#include "ACE_Settings.hpp"
#include "ACE_UI.hpp"
#include "RscChat.hpp"
#include "RscVignette.hpp"

View File

@ -18,12 +18,13 @@ params ["_logic", "_units", "_activated"];
if (!_activated) exitWith {};
[_logic, QGVAR(allowSelectiveUI), "allowSelectiveUI"] call EFUNC(common,readSettingFromModule);
// Basic
if (isArray (missionConfigFile >> "showHUD")) then {
// HUD visibility is hardcoded in mission config and showHUD command is overriden
ACE_LOGINFO("User Interface Module Failed to Initialize Basic settings - showHUD overriden in mission config!");
} else {
[_logic, QGVAR(allowSelectiveUI), "allowSelectiveUI"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(soldierVehicleWeaponInfo), "soldierVehicleWeaponInfo"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(vehicleRadar), "vehicleRadar"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(vehicleCompass), "vehicleCompass"] call EFUNC(common,readSettingFromModule);
@ -44,6 +45,16 @@ if (isArray (missionConfigFile >> "showHUD")) then {
[_logic, QGVAR(weaponLowerInfoBackground), "weaponLowerInfoBackground"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(stance), "stance"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(staminaBar), "staminaBar"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(gunnerWeaponName), "gunnerWeaponName"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(gunnerWeaponNameBackground), "gunnerWeaponNameBackground"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(gunnerFiringMode), "gunnerFiringMode"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(gunnerAmmoType), "gunnerAmmoType"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(gunnerAmmoCount), "gunnerAmmoCount"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(gunnerMagCount), "gunnerMagCount"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(gunnerLaunchableName), "gunnerLaunchableName"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(gunnerLaunchableCount), "gunnerLaunchableCount"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(gunnerZeroing), "gunnerZeroing"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(gunnerWeaponLowerInfoBackground), "gunnerWeaponLowerInfoBackground"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(vehicleName), "vehicleName"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(vehicleNameBackground), "vehicleNameBackground"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(vehicleFuelBar), "vehicleFuelBar"] call EFUNC(common,readSettingFromModule);
@ -51,6 +62,5 @@ if (isArray (missionConfigFile >> "showHUD")) then {
[_logic, QGVAR(vehicleAltitude), "vehicleAltitude"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(vehicleDamage), "vehicleDamage"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(vehicleInfoBackground), "vehicleInfoBackground"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(vehicleGunnerWeapon), "vehicleGunnerWeapon"] call EFUNC(common,readSettingFromModule);
ACE_LOGINFO_1("User Interface Module Initialized. Allow client modifications: %1",GVAR(allowSelectiveUI));

View File

@ -3,33 +3,65 @@
* Sets advanced visible element of the UI using displays and controls.
*
* Arguments:
* 0: Element IDD <NUMBER>
* 1: Element IDCs <ARRAY>
* 2: Show/Hide Element OR Element ACE Settings Variable <BOOL/STRING>
* 0: Element Name <STRING>
* 1: Show/Hide Element <BOOL>
* 2: Show Hint <BOOL>
* 3: Force change even when disallowed <BOOL> (default: false)
*
* Return Value:
* Successfully Set <BOOL>
*
* Example:
* [303, [188], true, false] call ace_ui_fnc_setAdvancedElement
* ["ace_ui_ammoCount", true, false] call ace_ui_fnc_setAdvancedElement
*
* Public: No
*/
#include "script_component.hpp"
params ["_idd", "_elements", "_show", ["_force", false, [true]] ];
if (_elementInfo in GVAR(elementsSet)) exitWith {};
params ["_element", "_show", ["_showHint", false, [true]], ["_force", false, [true]] ];
if (!_force && {!GVAR(allowSelectiveUI)}) exitWith {
[LSTRING(Disallowed), 2] call EFUNC(common,displayTextStructured)
[LSTRING(Disallowed), 2] call EFUNC(common,displayTextStructured);
false
};
// Get show/hide boolean from mission namespace if it's a string
if (typeName _show == "STRING") then {
_show = missionNamespace getVariable _show;
private _config = configFile >> "ACE_UI" >> _element;
// Exit if main vehicle type condition not fitting
private _location = getNumber (_config >> "location"); // (0-both, 1-ground, 2-vehicle)
private _currentLocation = ACE_player == vehicle ACE_player;
if ((_currentLocation && _location == 2) || (!_currentLocation && _location == 1)) exitWith {false};
private _idd = getNumber (_config >> "idd");
private _elements = getArray (_config >> "elements");
// Get setting from config API
{
private _condition = call compile (getText _x);
if !(_condition) exitWith {
TRACE_2("Condition False",_element,_x);
// Display and print info which component forced the element except for default vehicle check
if (_showHint) then {
[LSTRING(Disabled), 2] call EFUNC(common,displayTextStructured);
};
_show = false;
};
} forEach (configProperties [_config >> "conditions"]);
// Get setting from scripted API
if (!_force) then {
private _index = GVAR(elementsSet) find [_element, _show];
if (_index == -1) then {
_index = GVAR(elementsSet) find [_element, !_show];
if (_index != -1) then {
if (_showHint) then {
[LSTRING(Disabled), 2] call EFUNC(common,displayTextStructured);
};
_show = ((GVAR(elementsSet)) select _index) select 1;
};
};
};
_show = [1, 0] select _show;
// Disable/Enable elements
@ -40,7 +72,7 @@ private _success = false;
// Loop through IGUI displays as they can be present several times for some reason
{
if (_idd == ctrlIDD _x) then {
TRACE_3("Setting Element Visibility",_show,_idd,_idc);
//TRACE_3("Setting Element Visibility",_show,_idd,_idc);
(_x displayCtrl _idc) ctrlSetFade _show;
(_x displayCtrl _idc) ctrlCommit 0;

View File

@ -3,16 +3,15 @@
* Setter for toggling advanced element visibility.
*
* Arguments:
* 0: Set/Unset <BOOL> (default: true)
* 1: Element IDD <NUMBER> (default: 0)
* 2: Element IDCs <ARRAY> (default: [])
* 3: Show/Hide Element OR Element ACE Settings Variable <BOOL/STRING> (default: false)
* 0: Set/Unset <BOOL>
* 1: Element Name <ARRAY/STRING>
* 2: Show/Hide Element <BOOL> (default: false)
*
* Return Value:
* None
*
* Example:
* [true, 300, [188], false] call ace_ui_fnc_setElementVisibility
* [true, "ace_ui_ammoCount", false] call ace_ui_fnc_setElementVisibility
*
* Public: Yes
*/
@ -20,30 +19,43 @@
params [
["_set", true, [true]],
["_idd", 0, [0]],
["_elements", [], [[]]],
["_show", false, [true, ""]]
["_element", "", [""]],
["_show", false, [true]]
];
// Verify element is bound
if (!isClass (configFile >> "ACE_UI" >> _element)) exitWith {
ACE_LOGWARNING_1("Element '%1' does not exist",_element);
};
private _return = false;
if (_set) then {
if ([_idd, _elements] in GVAR(elementsSet)) exitWith { TRACE_3("Element already set",_idd,_elements,GVAR(elementsSet)); };
// Exit if element has been set from another component, print warning if after interface initialization
if ([_element, _show] in GVAR(elementsSet) || {[_element, !_show] in GVAR(elementsSet)}) exitWith {
if (GVAR(interfaceInitialized)) then {
ACE_LOGWARNING_2("Element '%1' already set in %2",_element,GVAR(elementsSet));
};
};
TRACE_4("Setting element",_idd,_elements,_show,GVAR(elementsSet));
private _success = [_idd, _elements, _show] call FUNC(setAdvancedElement);
TRACE_3("Setting element",_element,_show,GVAR(elementsSet));
private _success = [_element, _show, false, true] call FUNC(setAdvancedElement);
if (_success) then {
GVAR(elementsSet) pushBack [_idd, _elements];
GVAR(elementsSet) pushBack [_element, _show];
_return = true;
};
} else {
if ([_idd, _elements] in GVAR(elementsSet)) then {
TRACE_4("Setting element",_idd,_elements,_show,GVAR(elementsSet));
[_idd, _elements, _show] call FUNC(setAdvancedElement);
if ([_element, _show] in GVAR(elementsSet) || {[_element, !_show] in GVAR(elementsSet)}) then {
TRACE_3("Unsetting element",_element,_show,GVAR(elementsSet));
private _index = GVAR(elementsSet) find [_idd, _elements];
private _index = GVAR(elementsSet) find [_element, _show];
if (_index == -1) then {
_index = GVAR(elementsSet) find [_element, !_show];
};
GVAR(elementsSet) deleteAt _index;
[_element, _show, false, true] call FUNC(setAdvancedElement);
_return = true;
};
};

View File

@ -19,10 +19,6 @@ if (isArray (missionConfigFile >> "showHUD")) exitWith {};
params [ ["_force", false, [true]] ];
if (!_force && {!GVAR(allowSelectiveUI)}) exitWith {
[LSTRING(Disallowed), 2] call EFUNC(common,displayTextStructured);
};
["ui", [
true,
GVAR(soldierVehicleWeaponInfo),

View File

@ -17,51 +17,26 @@
#include "\z\ace\addons\main\script_macros.hpp"
// Elements
// Basic Elements
#define ELEMENTS_BASIC [QGVAR(soldierVehicleWeaponInfo), QGVAR(vehicleRadar), QGVAR(vehicleCompass), QGVAR(commandMenu), QGVAR(groupBar)]
// IDD, IDC, Element (must be string to compare to changed setting name)
#define ELEMENTS_ADVANCED [ \
[300, [118], QGVAR(weaponName)], \
[300, [1001, 1008], QGVAR(weaponNameBackground)], \
[300, [187, 1203], QGVAR(firingMode)], \
[300, [155], QGVAR(ammoType)], \
[300, [184], QGVAR(ammoCount)], \
[300, [185], QGVAR(magCount)], \
[300, [152], QGVAR(throwableName)], \
[300, [151], QGVAR(throwableCount)], \
[300, [1202], QGVAR(weaponLowerInfoBackground)], \
[300, [168], QGVAR(zeroing)], \
[305, [193], QGVAR(staminaBar)], \
[303, [188, 1201], QGVAR(stance)], \
[300, [120], QGVAR(vehicleName)], \
[300, [1000, 1013], QGVAR(vehicleNameBackground)], \
[300, [113, 1202], QGVAR(vehicleFuelBar)], \
[300, [121, 1004, 1006], QGVAR(vehicleSpeed)], \
[300, [122, 1005, 1014], QGVAR(vehicleAltitude)], \
[300, [111], QGVAR(vehicleDamage)], \
[300, [1200], QGVAR(vehicleInfoBackground)], \
[300, [150], QGVAR(vehicleGunnerWeapon)] \
]
/*
RscUnitInfo = 300
--------------------
118 (Weapon Name)
+ 1001 (Weapon Name Background 1/2)
+ 1008 (Weapon Name Background 2/2)
118 (Weapon Name / Gunner Weapon Name)
+ 1001 (Weapon Name Background 1/2 / Gunner Weapon Name Background 1/2)
+ 1008 (Weapon Name Background 2/2 / Gunner Weapon Name Background 2/2)
187 (Firing Mode)
+ 1203 (Firing Mode Background)
187 (Firing Mode / Gunner Firing Mode)
+ 1203 (Firing Mode Background / Gunner Firing Mode Background)
155 (Ammo Type)
184 (Ammo Count) - disabled in config by ace_reload
185 (Magazine Count)
152 (Grenade/Flare Type)
151 (Grenade/Flare Count)
1202 (Lower Weapon Info Background)
168 (Zeroing)
155 (Ammo Type / Gunner Ammo Type)
184 (Ammo Count / Gunner Ammo Count)
185 (Magazine Count / Gunner Magazine Count)
152 (Grenade/Flare Type / Launchable Type)
151 (Grenade/Flare Count / Launchable Count)
1202 (Lower Weapon Info Background / Gunner Lower Weapon Info Background)
168 (Zeroing / Gunner Zeroing)
120 (Vehicle Name)
@ -80,8 +55,6 @@ RscUnitInfo = 300
111 (Vehicle Damage)
1200 (Vehicle Info Background)
150 (Vehicle Gunner Weapon)
RscStanceInfo = 303
--------------------

View File

@ -87,6 +87,36 @@
<English>Stamina Bar</English>
<Czech>Panel výdrže</Czech>
</Key>
<Key ID="STR_ACE_UI_GunnerWeaponName">
<English>Gunner Weapon Name</English>
</Key>
<Key ID="STR_ACE_UI_GunnerWeaponNameBackground">
<English>Gunner Weapon Name Background</English>
</Key>
<Key ID="STR_ACE_UI_GunnerFiringMode">
<English>Gunner Firing Mode</English>
</Key>
<Key ID="STR_ACE_UI_GunnerAmmoType">
<English>Gunner Ammo Type</English>
</Key>
<Key ID="STR_ACE_UI_GunnerAmmoCount">
<English>Gunner Ammo Count</English>
</Key>
<Key ID="STR_ACE_UI_GunnerMagCount">
<English>Gunner Magazine Count</English>
</Key>
<Key ID="STR_ACE_UI_GunnerLaunchableName">
<English>Gunner Launchable Type</English>
</Key>
<Key ID="STR_ACE_UI_GunnerLaunchableCount">
<English>Gunner Launchable Count</English>
</Key>
<Key ID="STR_ACE_UI_GunnerZeroing">
<English>Gunner Zeroing</English>
</Key>
<Key ID="STR_ACE_UI_GunnerWeaponLowerInfoBackground">
<English>Gunner Weapon Lower Info Background</English>
</Key>
<Key ID="STR_ACE_UI_VehicleName">
<English>Vehicle Name</English>
<Czech>Název vozidla</Czech>
@ -115,17 +145,16 @@
<English>Vehicle Info Background</English>
<Czech>Info o vozidle v pozadí</Czech>
</Key>
<Key ID="STR_ACE_UI_VehicleGunnerWeapon">
<English>Vehicle Gunner Weapon</English>
<Czech>Střelcova zbraň ve vozidle</Czech>
</Key>
<Key ID="STR_ACE_UI_RequiresSoldierVehicleWeaponInfo">
<English>Requires Soldier/Vehicle/Weapons Information.</English>
<English>Requires Soldier/Vehicle/Weapon Information.</English>
<Czech>Vyžaduje informace o Vojákovi/Vozidlu/Zbrani</Czech>
</Key>
<Key ID="STR_ACE_UI_Disallowed">
<English>Modifying User Interface is disabled.</English>
<Czech>Změna uživatelského rozhraní je zakázána.</Czech>
</Key>
<Key ID="STR_ACE_UI_Disabled">
<English>Cannot modify a forced User Interface element.</English>
</Key>
</Package>
</Project>