mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
162 lines
5.4 KiB
Plaintext
162 lines
5.4 KiB
Plaintext
#include "..\script_component.hpp"
|
|
#include "..\defines.hpp"
|
|
/*
|
|
* Author: mharis001, johnb43
|
|
* Populates 3DEN's ace arsenal attribute listbox with items of given category.
|
|
*
|
|
* Arguments:
|
|
* 0: Attribute controls group <CONTROL>
|
|
*
|
|
* Return Value:
|
|
* None
|
|
*
|
|
* Example:
|
|
* [CONTROL] call ace_arsenal_fnc_attributeAddItems
|
|
*
|
|
* Public: No
|
|
*/
|
|
|
|
params ["_controlsGroup"];
|
|
|
|
forceUnicode 0; // handle non-ANSI characters
|
|
|
|
private _category = lbCurSel (_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_CATEGORY);
|
|
private _filter = ctrlText (_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_SEARCHBAR);
|
|
private _configItems = uiNamespace getVariable QGVAR(configItems);
|
|
private _magazineMiscItems = uiNamespace getVariable QGVAR(magazineMiscItems);
|
|
private _attributeValue = uiNamespace getVariable [QGVAR(attributeValue), [[], 0]];
|
|
_attributeValue params ["_attributeItems", "_attributeMode"];
|
|
|
|
TRACE_3("Populating list",_category,_filter,_attributeValue);
|
|
if (_filter != "") then {
|
|
_filter = _filter call EFUNC(common,escapeRegex);
|
|
_filter = ".*?" + (_filter splitString " " joinString ".*?") + ".*?/io";
|
|
} else {
|
|
_filter = ".*?/io";
|
|
};
|
|
|
|
|
|
private _modeSymbol = [SYMBOL_ITEM_VIRTUAL, SYMBOL_ITEM_REMOVE] select _attributeMode;
|
|
|
|
// Clear listbox
|
|
private _listbox = _controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_LIST;
|
|
lnbClear _listbox;
|
|
|
|
private _cfgWeapons = configFile >> "CfgWeapons";
|
|
private _cfgMagazines = configFile >> "CfgMagazines";
|
|
private _cfgVehicles = configFile >> "CfgVehicles";
|
|
private _cfgGlasses = configFile >> "CfgGlasses";
|
|
private _dlcName = "";
|
|
|
|
// Exit with current items (no specific category)
|
|
if (_category == IDX_CAT_ALL) exitWith {
|
|
private _config = configNull;
|
|
private _displayName = "";
|
|
private _index = -1;
|
|
|
|
{
|
|
// Get appropriate config for each item (different since items can be from any category)
|
|
_config = switch (true) do {
|
|
case (_x in _magazineMiscItems);
|
|
case (_x in (_configItems get IDX_VIRT_ITEMS_ALL));
|
|
case (_x in (_configItems get IDX_VIRT_GRENADES));
|
|
case (_x in (_configItems get IDX_VIRT_EXPLOSIVES)): {_cfgMagazines >> _x};
|
|
case (_x in (_configItems get IDX_VIRT_BACKPACK)): {_cfgVehicles >> _x};
|
|
case (_x in (_configItems get IDX_VIRT_GOGGLES)): {_cfgGlasses >> _x};
|
|
default {_cfgWeapons >> _x};
|
|
};
|
|
|
|
_displayName = getText (_config >> "displayName");
|
|
|
|
// Add item if not filtered
|
|
if (_displayName regexMatch _filter || {_x regexMatch _filter}) then {
|
|
_index = _listbox lnbAddRow ["", _displayName, _modeSymbol];
|
|
_listbox lnbSetData [[_index, 1], _x];
|
|
_listbox lnbSetPicture [[_index, 0], getText (_config >> "picture")];
|
|
_listbox lnbSetTooltip [[_index, 0], _x];
|
|
|
|
_dlcName = _config call EFUNC(common,getAddon);
|
|
|
|
if (_dlcName != "") then {
|
|
_listbox lnbSetPicture [[_index, 2], (modParams [_dlcName, ["logo"]]) param [0, ""]];
|
|
};
|
|
};
|
|
} forEach _attributeItems;
|
|
|
|
// Sort alphabetically
|
|
_listbox lnbSort [1, false];
|
|
};
|
|
|
|
// Get list of category items
|
|
private _categoryItems = switch (true) do {
|
|
// Weapons
|
|
case (_category < IDX_CAT_OPTICS_ATTACHMENTS): {
|
|
(_configItems get IDX_VIRT_WEAPONS) get (_category - 1)
|
|
};
|
|
// Weapon attachments
|
|
case (_category < IDX_CAT_ITEMS_ALL): {
|
|
(_configItems get IDX_VIRT_ATTACHMENTS) get (_category - 4)
|
|
};
|
|
// Other
|
|
default {
|
|
_configItems get (_category - 6)
|
|
};
|
|
};
|
|
|
|
// Get config for current category
|
|
private _cfgClass = switch (true) do {
|
|
case (_category in [IDX_CAT_ITEMS_ALL, IDX_CAT_GRENADES, IDX_CAT_EXPLOSIVES]): {_cfgMagazines};
|
|
case (_category == IDX_CAT_BACKPACK): {_cfgVehicles};
|
|
case (_category == IDX_CAT_GOGGLES): {_cfgGlasses};
|
|
default {_cfgWeapons};
|
|
};
|
|
|
|
private _displayName = "";
|
|
private _symbol = SYMBOL_ITEM_NONE;
|
|
private _alpha = 0;
|
|
private _index = -1;
|
|
private _config = _cfgClass;
|
|
|
|
// Populate listbox with category items
|
|
{
|
|
// "Misc. items" magazines (e.g. spare barrels, intel, photos)
|
|
if (_category == IDX_CAT_MISC_ITEMS) then {
|
|
_config = [_cfgClass, _cfgMagazines] select (_x in _magazineMiscItems);
|
|
};
|
|
|
|
_displayName = getText (_config >> _x >> "displayName");
|
|
|
|
// Add item if not filtered
|
|
if (_displayName regexMatch _filter || {_x regexMatch _filter}) then {
|
|
// Change symbol and alpha if item already selected
|
|
if (_x in _attributeItems) then {
|
|
_symbol = _modeSymbol;
|
|
_alpha = 1;
|
|
} else {
|
|
_symbol = SYMBOL_ITEM_NONE;
|
|
_alpha = 0.5;
|
|
};
|
|
|
|
_index = _listbox lnbAddRow ["", _displayName, "", _symbol];
|
|
_listbox lnbSetData [[_index, 1], _x];
|
|
_listbox lnbSetPicture [[_index, 0], getText (_config >> _x >> "picture")];
|
|
_listbox lnbSetTooltip [[_index, 0], _x];
|
|
_listbox lnbSetColor [[_index, 1], [1, 1, 1, _alpha]];
|
|
_listbox lnbSetColor [[_index, 3], [1, 1, 1, _alpha]];
|
|
|
|
// Mod icon is in column 2
|
|
_dlcName = (_config >> _x) call EFUNC(common,getAddon);
|
|
|
|
if (_dlcName != "") then {
|
|
_listbox lnbSetPicture [[_index, 2], (modParams [_dlcName, ["logo"]]) param [0, ""]];
|
|
_listbox lnbSetPictureColor [[_index, 2], [1, 1, 1, _alpha]];
|
|
};
|
|
};
|
|
} forEach (keys _categoryItems);
|
|
|
|
// Sort alphabetically
|
|
_listbox lnbSort [1, false];
|
|
|
|
// Reset unicode flag
|
|
forceUnicode -1;
|