forked from Bob-Murphy/A3-Antistasi-1.4
-
-
Notifications
You must be signed in to change notification settings - Fork 173
Expand file tree
/
Copy pathfn_loadFaction.sqf
More file actions
107 lines (88 loc) · 3.22 KB
/
Copy pathfn_loadFaction.sqf
File metadata and controls
107 lines (88 loc) · 3.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
* File: fn_loadFaction.sqf
* Author: Spoffy
* Description:
* Loads a faction definition file
* Params:
* _filepaths - Single or array of faction definition filepath
* Returns:
* Namespace containing faction information
* Example Usage:
*/
#include "..\..\script_component.hpp"
params [
["_filepaths",[],["",[]]]
];
if (_filepaths isEqualType "") then {_filepaths = [_filepaths]};
if (count _filepaths == 0) then {Error("No filepaths provided.")};
private _dataStore = createHashMap;
private _fnc_saveToTemplate = {
params ["_name", "_data"];
_dataStore set [_name, _data];
};
private _fnc_getFromTemplate = {
params ["_name"];
_dataStore get _name;
};
//Keep track of loadout namespaces so we can delete them when we're done.
private _loadoutNamespaces = [];
private _fnc_createLoadoutData = {
private _namespace = createHashMap;
_namespace set ["shuffleBuffers", createHashMap];
_loadoutNamespaces pushBack _namespace;
_namespace
};
private _fnc_copyLoadoutData = {
params ["_sourceNamespace"];
+ _sourceNamespace //hashmaps deepcopy with +
};
private _allLoadouts = createHashMap;
_dataStore set ["loadouts", _allLoadouts];
private _fnc_saveUnitToTemplate = {
params ["_typeName", "_loadouts", ["_traits", []], ["_baseClass", ""]];
private _unitDefinition = [_loadouts, _traits, _baseClass];
_allLoadouts set [_typeName, _unitDefinition];
};
private _fnc_generateAndSaveUnitToTemplate = {
params ["_name", "_template", "_loadoutData", "_traits", "_count", "_baseClass"];
private _loadouts = [];
for "_i" from 1 to _count do {
_loadouts pushBack ([_template, _loadoutData] call A3A_fnc_loadout_builder);
};
[_name, _loadouts, _traits, _baseClass] call _fnc_saveUnitToTemplate;
};
private _fnc_generateAndSaveUnitsToTemplate = {
params ["_prefix", "_unitTemplates", "_loadoutData"];
private _shuffleBuffers = _loadoutData get "shuffleBuffers";
while {_unitTemplates isNotEqualTo []} do {
isNil {
private _endTime = diag_tickTime + 0.02;
while {_unitTemplates isNotEqualTo [] and diag_tickTime < _endTime} do {
private _unitLine = _unitTemplates deleteAt 0; // not many of these, array shuffle is cheap
_unitLine params ["_name", "_template", ["_traits", []], ["_count", 5], ["_baseClass", ""]];
private _finalName = format ["%1_%2", _prefix, _name];
[_finalName, _template, _loadoutData, _traits, _count, _baseClass] call _fnc_generateAndSaveUnitToTemplate;
};
};
};
/*
// Without the unscheduled optimization, for reference
{
_x params ["_name", "_template", ["_traits", []], ["_count", 5]];
private _finalName = format ["%1_%2", _prefix, _name];
[_finalName, _template, _loadoutData, _traits] call _fnc_generateAndSaveUnitToTemplate;
} forEach _unitTemplates;
*/
};
private _fnc_saveNames = {
params ["_names"];
private _nameConfig = configfile >> "CfgWorlds" >> "GenericNames" >> _names;
private _firstNames = configProperties [_nameConfig >> "FirstNames"] apply { getText(_x) };
["firstNames", _firstNames] call _fnc_saveToTemplate;
private _lastNames = configProperties [_nameConfig >> "LastNames"] apply { getText(_x) };
["lastNames", _lastNames] call _fnc_saveToTemplate;
};
{
call compile preprocessFileLineNumbers _x;
} forEach _filepaths;
_dataStore