Cargo - Cache cargo vehicle classes (#6806)

* Cache cargo vehicle classes to init

* fix

* Apply suggestions from code review

Co-Authored-By: dedmen <dedmen@users.noreply.github.com>

* Fix initEH being added twice for static weapons
This commit is contained in:
Dedmen Miller 2019-02-17 18:41:05 +01:00 committed by PabstMirror
parent 25d847ef12
commit af1cf2c7f6
2 changed files with 63 additions and 39 deletions

View File

@ -105,47 +105,25 @@ GVAR(objectAction) = [
LINKFUNC(addCargoVehiclesActions)
] call EFUNC(interact_menu,createAction);
// find all remaining configured classes and init them, see XEH_preStart.sqf
private _vehicleClassesAddAction = call (uiNamespace getVariable [QGVAR(initializedVehicleClasses), {[]}]);
{
[_x, 0, ["ACE_MainActions"], GVAR(vehicleAction)] call EFUNC(interact_menu,addActionToClass);
} forEach _vehicleClassesAddAction;
GVAR(initializedVehicleClasses) append _vehicleClassesAddAction;
private _initVehicleClasses = ["ThingX", "LandVehicle", "Air", "Ship_F"];
private _initObjectClasses = ["ThingX", "StaticWeapon"];
private _objectClassesAddAction = call (uiNamespace getVariable [QGVAR(initializedItemClasses), {[]}]);
{
[_x, 0, ["ACE_MainActions"], GVAR(objectAction)] call EFUNC(interact_menu,addActionToClass);
} forEach _objectClassesAddAction;
GVAR(initializedItemClasses) append _objectClassesAddAction;
private _vehicleClassesAddClassEH = call (uiNamespace getVariable [QGVAR(vehicleClasses_classEH), {[]}]);
{
[_x, "initPost", DFUNC(initVehicle), nil, nil, true] call CBA_fnc_addClassEventHandler;
} forEach _initVehicleClasses;
} forEach _vehicleClassesAddClassEH;
private _objectClassesAddClassEH = call (uiNamespace getVariable [QGVAR(objectClasses_classEH), {[]}]);
{
[_x, "initPost", DFUNC(initObject), nil, nil, true] call CBA_fnc_addClassEventHandler;
} forEach _initObjectClasses;
// find all remaining configured classes and init them
{
private _class = configName _x;
// init vehicle
if (
1 == getNumber (_x >> QGVAR(hasCargo))
&& {{if (_class isKindOf _x) exitWith {false}; true} forEach _initVehicleClasses}
) then {
if (_class isKindOf "Static") then {
if (2 == getNumber (_x >> "scope")) then {
[_class, 0, ["ACE_MainActions"], GVAR(vehicleAction)] call EFUNC(interact_menu,addActionToClass);
GVAR(initializedVehicleClasses) pushBack _class;
};
} else {
[_class, "initPost", DFUNC(initVehicle), nil, nil, true] call CBA_fnc_addClassEventHandler;
_initVehicleClasses pushBack _class;
};
};
// init object
if (
1 == getNumber (_x >> QGVAR(canLoad))
&& {{if (_class isKindOf _x) exitWith {false}; true} forEach _initObjectClasses}
) then {
if (_class isKindOf "Static") then {
if (2 == getNumber (_x >> "scope")) then {
[_class, 0, ["ACE_MainActions"], GVAR(objectAction)] call EFUNC(interact_menu,addActionToClass);
GVAR(initializedItemClasses) pushBack _class;
};
} else {
[_class, "initPost", DFUNC(initObject), nil, nil, true] call CBA_fnc_addClassEventHandler;
_initObjectClasses pushBack _class;
};
};
} forEach ("true" configClasses (configFile >> "CfgVehicles"));
} forEach _objectClassesAddClassEH;

View File

@ -1,3 +1,49 @@
#include "script_component.hpp"
#include "XEH_PREP.hpp"
//See XEH_postInit.sqf
private _vehicleClasses_addClassEH = ["ThingX", "LandVehicle", "Air", "Ship_F"];
private _objectClasses_addClassEH = ["ThingX", "StaticWeapon"];
private _vehicleClasses_addAction = [];
private _itemClasses_addAction = [];
// find all remaining configured classes and init them
{
private _class = configName _x;
// init vehicle
if (
1 == getNumber (_x >> QGVAR(hasCargo))
&& {-1 == _vehicleClasses_addClassEH findIf {_class isKindOf _x}}
) then {
if (_class isKindOf "Static") then {
if (2 == getNumber (_x >> "scope")) then {
_vehicleClasses_addAction pushBackUnique _class;
};
} else {
_vehicleClasses_addClassEH pushBackUnique _class;
};
};
// init object
if (
1 == getNumber (_x >> QGVAR(canLoad))
&& {-1 == _objectClasses_addClassEH findIf {_class isKindOf _x}}
) then {
if (_class isKindOf "Static") then {
if (2 == getNumber (_x >> "scope")) then {
_itemClasses_addAction pushBackUnique _class;
};
} else {
_objectClasses_addClassEH pushBackUnique _class;
};
};
} forEach ("true" configClasses (configFile >> "CfgVehicles"));
uiNamespace setVariable [QGVAR(vehicleClasses_classEH), compileFinal str _vehicleClasses_addClassEH];
uiNamespace setVariable [QGVAR(objectClasses_classEH), compileFinal str _objectClasses_addClassEH];
uiNamespace setVariable [QGVAR(initializedVehicleClasses), compileFinal str _vehicleClasses_addAction];
uiNamespace setVariable [QGVAR(initializedItemClasses), compileFinal str _itemClasses_addAction];
TRACE_4("compiled",count _vehicleClasses_addClassEH,count _objectClasses_addClassEH,count _vehicleClasses_addAction,count _itemClasses_addAction);