#include "script_component.hpp" /* * Author: Alganthe, johnb43 * Adds a stat to ACE Arsenal. * * Arguments: * 0: Tabs to add the stat to * - 0: Left tab indexes * - 1: Right tab indexes * 1: Stat class (unique string for each stat) * 2: Config entries to pass * 3: Title * 4: Show bar / show text bools * - 0: Show bar (default: false) * - 1: Show text (default: false) * 5: Array of statements * - 0: Bar code (default: {}) * - 1: Text code (default: {}) * - 2: Condition code (default: {true}) * 6: Priority (default: 0) * * Return Value: * 0: Array of IDs * * Example: * [[[0, 1, 2], [7]], "scopeStat", ["scope"], "Scope", [false, true], [{}, { * params ["_statsArray", "_itemCfg"]; * getNumber (_itemCfg >> _statsArray select 0) * }, {true}]] call ace_arsenal_fnc_addStat * * Public: Yes */ params [ ["_tabs", [[], []], [[]], 2], ["_class", "", [""]], ["_stats", [], [[]]], ["_title", "", [""]], ["_bools", [false, false], [[]], 2], ["_statements", [{}, {}, {true}], [[]], 3], ["_priority", 0, [0]] ]; _tabs params [ ["_leftTabs", [], [[]]], ["_rightTabs", [], [[]]] ]; _bools params [ ["_showBar", false, [false]], ["_showText", false, [false]] ]; _statements params [ ["_barStatement", {}, [{}]], ["_textStatement", {}, [{}]], ["_condition", {true}, [{}]] ]; // Compile stats from config (in case this is called before preInit) call FUNC(compileStats); private _return = []; private _changes = []; private _fnc_addToTabs = { params ["_tabsList", "_tabsToAddTo", "_tabSide"]; private _statName = ""; private _currentTab = []; private _stat = []; { // Make stat name _statName = [_class, _tabSide, [str _x, format ["0%1", _x]] select (_x < 10)] joinString ""; _currentTab = _tabsList select _x; // Find if there is an entry with same ID if (_currentTab findIf {_x findIf {_x select 0 == _statName} != -1} != -1) then { TRACE_1("A stat with this ID already exists", _statName); } else { _stat = +_finalArray; _stat set [0, _statName]; private _index = _currentTab findIf {count _x < 5}; // Add to existing page if there's enough space, otherwise create a new page if (_index != -1) then { (_currentTab select _index) pushBack _stat; } else { _currentTab pushBack [_stat]; }; _return pushBack _statName; // Store information, so that only tabs that were changed can be sorted again _changes pushBackUnique [_x, _tabSide]; }; } forEach _tabsToAddTo; }; private _finalArray = ["", _stats, _title, [_showBar, _showText], [_barStatement, _textStatement, _condition], _priority]; if (_leftTabs isNotEqualTo []) then { [GVAR(statsListLeftPanel), _leftTabs, "L"] call _fnc_addToTabs; }; if (_rightTabs isNotEqualTo []) then { [GVAR(statsListRightPanel), _rightTabs, "R"] call _fnc_addToTabs; }; private _statsFlat = []; private _stats = []; private _tabToChange = []; // Ensure priority is kept { _x params ["_tab", "_tabSide"]; _tabToChange = if (_tabSide == "R") then { GVAR(statsListRightPanel) } else { GVAR(statsListLeftPanel) }; _statsFlat = []; // Get all stats of a tab into a single array { _statsFlat append _x; } forEach (_tabToChange select _tab); // Put priority up front { reverse _x; } forEach _statsFlat; // Sort numerically _statsFlat sort false; // Put it back at the rear { reverse _x; } forEach _statsFlat; _stats = []; // Group stats into groups of 5 for "_index" from 0 to count _statsFlat - 1 step 5 do { _stats pushBack (_statsFlat select [_index, _index + 5]); }; _tabToChange set [_tab, _stats]; } forEach _changes; _return