ACE3/addons/modules/XEH_postInit.sqf
2015-10-18 23:34:11 -05:00

53 lines
2.2 KiB
Plaintext

#include "script_component.hpp"
["InitSettingsFromModules", {
// TODO This is a basic and limited implementation that mimics some of the functionality from the A3 module framework, but not all of it.
// We have to execute this in the postInit XEH because on object init, the parameters of the modules are not yet available. They are if we execute it at the start of postInit execution.
local _uniqueModulesHandled = [];
{
[_x] call {
params ["_logic"];
local _logicType = typeof _logic;
_logic hideobject true;
if (_logic getvariable [QGVAR(initalized), false]) exitwith {};
local _config = (configFile >> "CfgVehicles" >> _logicType);
if !(isClass _config) exitwith {};
local _isGlobal = getNumber (_config >> "isGlobal") > 0;
local _isDisposable = getNumber (_config >> "isDisposable") > 0;
local _isPersistent = getNumber (_config >> "isPersistent") > 0 || getnumber (_config >> "isGlobal") > 1;
local _isSingular = getNumber (_config >> "isSingular") > 0;
local _function = getText (_config >> "function");
if (isnil _function) then {
_function = compile _function;
} else {
_function = missionNamespace getvariable _function;
};
if (_isSingular && {_logicType in _uniqueModulesHandled}) then { //ToDo: should this be an exit?
ACE_LOGWARNING_1("Module [%1] - More than 1 singular module placed", _logicType);
};
if (_isSingular) then {_uniqueModulesHandled pushBack _logicType;};
if (_isGlobal || isServer) then {
[_logic, (synchronizedObjects _logic), true] call _function;
};
if !(_isPersistent) then {
_logic setvariable [QGVAR(initalized), true];
};
if (_isDisposable) then {
deleteVehicle _logic;
};
};
} forEach GVAR(moduleInitCollection);
if (isServer) then {
GVAR(serverModulesRead) = true;
publicVariable QGVAR(serverModulesRead);
};
}] call EFUNC(common,addEventhandler);