diff --git a/cScripts/CfgFunctions.hpp b/cScripts/CfgFunctions.hpp index cfa38136d..b493c34f7 100644 --- a/cScripts/CfgFunctions.hpp +++ b/cScripts/CfgFunctions.hpp @@ -5,6 +5,8 @@ class cScripts { class init_aceTagging {}; class init_aceItemReplace {}; + class init_simulation {}; + class init_skillAdjustment {}; class init_vehicle {}; class init_staging {}; @@ -97,7 +99,7 @@ class cScripts { class addHaloJump {}; class setVehicleLable {}; - + class addBaseCrate {}; class addStagingZone {}; @@ -138,7 +140,6 @@ class cScripts { class addReGear {}; class addHeal {}; class addArsenal {}; - class createActionCategory {}; class doGetOutHeloSide {}; @@ -151,13 +152,13 @@ class cScripts { class getRadioBase {}; class isValidFaction {}; - + class createVehicleLable {}; class getVehicleLable {}; class renameObject {}; class getIcon {}; - + class getAttendance {}; class getServerMetrics {}; }; @@ -192,7 +193,7 @@ class cScripts { }; class modules { file = "cScripts\functions\modules"; - class zenModule_EnableUnitSimulation {}; + class zenModule_toggleUnitSimulation {}; class zenModule_CreateFieldHospital {}; class zenModule_CreateMedicalCrate {}; diff --git a/cScripts/cScripts_preInit.sqf b/cScripts/cScripts_preInit.sqf index d04f641f8..d6df34d7a 100644 --- a/cScripts/cScripts_preInit.sqf +++ b/cScripts/cScripts_preInit.sqf @@ -332,13 +332,25 @@ private _cScriptSettings = "cScripts Mission Settings"; true ] call CBA_fnc_addSetting; +// 9; Performance +[ // Dynamic Simulation + QEGVAR(Settings,dynamicSimulation), + "LIST", + ["Dynamic Simulation (Experimental)","Enable Dynamic Simulation for Eden and zeus spawned objects automatically\n"], + [_cScriptSettings, "9; Performance"], + [[0,1], ["Disabled", "Enabled"], 0], + true, + {}, + true +] call CBA_fnc_addSetting; + -// 9; Other +// 10; Other [ // Primary Clan Tag QEGVAR(Settings,primaryClanTag), "EDITBOX", ["Primary Clantag","Primary clan tag to to check for"], - [_cScriptSettings, "9; Other"], + [_cScriptSettings, "10; Other"], '7CAV', true, {}, @@ -376,4 +388,9 @@ if (EGVAR(Settings,setAiSystemDifficulty) >= 1 ) then { call EFUNC(init,eventHandlers); +// Dynamic Simulation handler +if (EGVAR(Settings,dynamicSimulation) >= 1) then { + call EFUNC(init,simulation); +}; + INFO("preInit", "Initialization completed."); diff --git a/cScripts/functions/init/fn_init_chatCommands.sqf b/cScripts/functions/init/fn_init_chatCommands.sqf index 6e6a218bc..af27b5b29 100644 --- a/cScripts/functions/init/fn_init_chatCommands.sqf +++ b/cScripts/functions/init/fn_init_chatCommands.sqf @@ -12,3 +12,10 @@ ["attendance", { [QGVAR(getAttendance)] call CBA_fnc_localEvent; }, "all"] call CBA_fnc_registerChatCommand; + +["enableAI", { + //[QGVAR(getAttendance)] call CBA_fnc_localEvent; +}, "all"] call CBA_fnc_registerChatCommand; +["disableAI", { + //[QGVAR(getAttendance)] call CBA_fnc_localEvent; +}, "all"] call CBA_fnc_registerChatCommand; \ No newline at end of file diff --git a/cScripts/functions/init/fn_init_simulation.sqf b/cScripts/functions/init/fn_init_simulation.sqf new file mode 100644 index 000000000..034a9443f --- /dev/null +++ b/cScripts/functions/init/fn_init_simulation.sqf @@ -0,0 +1,186 @@ +#define DEBUG_MODE +#include "..\script_component.hpp"; +/* + * Author: CPL.Brostrom.A + * This function add eventhandelers adding cav functionality to units and vehicles. + * + * Return Value: + * Nothing + * + * Example: + * call EFUNC(init,simulation) + * + * Public: No + */ + +if (EGVAR(Settings,dynamicSimulation) == 0) exitWith {}; + +INFO("DynamicSimulation", "Dynamic Simulation Enabled"); + +// System Values +"Group" setDynamicSimulationDistance 1800; +"Vehicle" setDynamicSimulationDistance 2400; +"EmptyVehicle" setDynamicSimulationDistance 250; +"Prop" setDynamicSimulationDistance 50; +"IsMoving" setDynamicSimulationDistanceCoef 3; + +enableDynamicSimulationSystem true; + +// Enables player trigger for dynamic simulation +player triggerDynamicSimulation true; + + + +// Handle AA units +private _antiAircraftUnits = []; +{ + private _name = configName _x; + private _nameLower = toLower _name; + if (["_aa", _nameLower] call BIS_fnc_inString) then { + if ((["_aaf", _nameLower] call BIS_fnc_inString)) then { + if (["_aa_aaf", _nameLower] call BIS_fnc_inString) then { + LOG_1("DEBUG", "AA UNIT: %1 (_aa_aaf)", _name); + _antiAircraftUnits append [_name]; + continue + }; + }; + if (["_aa_", _nameLower] call BIS_fnc_inString) then { + LOG_1("DEBUG", "AA UNIT: %1 (_aa_)", _name); + _antiAircraftUnits append [_name]; + continue + }; + }; + if (["zu23", _nameLower] call BIS_fnc_inString) then { + LOG_1("DEBUG", "AA UNIT: %1 (zu23)", _name); + _antiAircraftUnits append [_name]; + continue + }; +} forEach ("configName _x isKindOf 'LandVehicle' or configName _x isKindOf 'man'" configClasses (configFile >> "CfgVehicles")); + +// Apply event handlers to objects +INFO("DynamicSimulation", "Applying Event Handers (init) to mission objects..."); + +["CAManBase", "init", { + params ["_unit"]; + if (!isPlayer _unit) then {_unit triggerDynamicSimulation false}; + INFO_2("DynamicSimulation", "Enabling dynamic simulation system for unit %1 (%2)", _unit, typeOf _unit); + group _unit enableDynamicSimulation true; + _unit enableDynamicSimulation true; +}, true, [], true] call CBA_fnc_addClassEventHandler; +["Tank", "init", { + params ["_vehicle"]; + _vehicle triggerDynamicSimulation false; + INFO_2("DynamicSimulation", "Enabling dynamic simulation system for vehicle %1 (%2)", _vehicle, typeOf _vehicle); + _vehicle enableDynamicSimulation true; +}, true, [], true] call CBA_fnc_addClassEventHandler; +["Car", "init", { + params ["_vehicle"]; + INFO_2("DynamicSimulation", "Enabling dynamic simulation system for vehicle %1 (%2)", _vehicle, typeOf _vehicle); + _vehicle triggerDynamicSimulation false; + _vehicle enableDynamicSimulation true; +}, true, [], true] call CBA_fnc_addClassEventHandler; +["Ship", "init", { + params ["_vehicle"]; + INFO_2("DynamicSimulation", "Enabling dynamic simulation system for vehicle %1 (%2)", _vehicle, typeOf _vehicle); + _vehicle triggerDynamicSimulation false; + _vehicle enableDynamicSimulation true; +}, true, [], true] call CBA_fnc_addClassEventHandler; +["Thing", "init", { + params ["_object"]; + INFO_2("DynamicSimulation", "Enabling dynamic simulation system for object %1 (%2)", _object, typeOf _object); + _object triggerDynamicSimulation false; + _object enableDynamicSimulation true; +}, true, [], true] call CBA_fnc_addClassEventHandler; +["ThingX", "init", { + params ["_object"]; + INFO_2("DynamicSimulation", "Enabling dynamic simulation system for object %1 (%2)", _object, typeOf _object); + _object triggerDynamicSimulation false; + _object enableDynamicSimulation true; +}, true, [], true] call CBA_fnc_addClassEventHandler; + + +// Enabling animations for AA and Airframes +["CAManBase", "init", { + params ["_unit"]; + if (typeOf _unit in _antiAircraftUnits) exitWith { + [{ + params ["_unit"]; + INFO_2("DynamicSimulation", "Dynamic simulation system disabeld for Anti Aircraft unit %1 (%2)", _unit, typeOf _unit); + _unit enableDynamicSimulation false; + group _unit enableDynamicSimulation false; + { + group _x enableDynamicSimulation false; + _x enableDynamicSimulation false; + } forEach crew _vehicle; + }, [_unit], 2] call CBA_fnc_waitAndExecute; + }; +}, true, [], true] call CBA_fnc_addClassEventHandler; +["Tank", "init", { + params ["_vehicle"]; + if (typeOf _vehicle in _antiAircraftUnits) exitWith { + [{ + params ["_vehicle"]; + INFO_2("DynamicSimulation", "Dynamic simulation system disabeld for Anti Aircraft vehicle %1 (%2)", _vehicle, typeOf _vehicle); + _vehicle enableDynamicSimulation false; + group _unit enableDynamicSimulation false; + { + group _x enableDynamicSimulation false; + _x enableDynamicSimulation false; + } forEach crew _vehicle; + }, [_vehicle], 2] call CBA_fnc_waitAndExecute; + }; +}, true, [], true] call CBA_fnc_addClassEventHandler; +["Car", "init", { + params ["_vehicle"]; + if (typeOf _vehicle in _antiAircraftUnits) exitWith { + [{ + params ["_vehicle"]; + INFO_2("DynamicSimulation", "Dynamic simulation system disabeld for Anti Aircraft vehicle %1 (%2)", _vehicle, typeOf _vehicle); + _vehicle enableDynamicSimulation false; + group _unit enableDynamicSimulation false; + { + group _x enableDynamicSimulation false; + _x enableDynamicSimulation false; + } forEach crew _vehicle; + }, [_vehicle], 2] call CBA_fnc_waitAndExecute; + }; +}, true, [], true] call CBA_fnc_addClassEventHandler; +["Air", "init", { + params ["_vehicle"]; + [{ + params ["_vehicle"]; + { + INFO_1("DynamicSimulation", "Disabling DynamicSimulation for aircrew unit: %1", _x); + group (_x) enableDynamicSimulation false; + _x enableDynamicSimulation false; + } forEach crew _vehicle; + }, [_vehicle], 3] call CBA_fnc_waitAndExecute; +}, true, [], true] call CBA_fnc_addClassEventHandler; + + +// Handle aircraft and death +player addEventHandler ["GetInMan", { + params ["_unit", "_role", "_vehicle", "_turret"]; + if (isPlayer _unit) then { + if (_vehicle isKindOf "Air") then { + INFO_2("DynamicSimulation", "Disabled simulation activation for %1 (%2) due to entre aircraft", _unit, typeof _unit); + _unit triggerDynamicSimulation false; + }; + }; +}]; +player addEventHandler ["GetOutMan", { + params ["_unit", "_role", "_vehicle", "_turret"]; + if (isPlayer _unit) then { + if (_vehicle isKindOf "Air") then { + INFO_2("DynamicSimulation", "Enabled simulation activation for %1 (%2) due to exit aircraft", _unit, typeof _unit); + _unit triggerDynamicSimulation true; + }; + }; +}]; +player addEventHandler ["Killed", { + params ["_unit", "_killer", "_instigator", "_useEffects"]; + if (isPlayer _unit) then { + INFO_2("DynamicSimulation", "Enabled simulation activation for %1 (%2) due to death", _unit, typeof _unit); + _unit triggerDynamicSimulation true; + }; +}]; \ No newline at end of file diff --git a/cScripts/functions/init/fn_init_zenModuels.sqf b/cScripts/functions/init/fn_init_zenModuels.sqf index 261bc0461..810a4e11a 100644 --- a/cScripts/functions/init/fn_init_zenModuels.sqf +++ b/cScripts/functions/init/fn_init_zenModuels.sqf @@ -20,10 +20,10 @@ if !(EGVAR(Settings,enable7cavZeusModules)) exitWith {}; INFO("init", "Initializing custom Zen Modules."); -["7Cav AI", "Enable Unit Simulation", +["7Cav AI", "Toggle Unit Simulation", { params ["_modulePos", "_objectPos"]; - [_modulePos, _objectPos] call EFUNC(zenModule,EnableUnitSimulation); + [_modulePos, _objectPos] call EFUNC(zenModule,toggleUnitSimulation); }, "\A3\ui_f\data\map\vehicleicons\iconManVirtual_ca.paa" ] call zen_custom_modules_fnc_register; diff --git a/cScripts/functions/modules/fn_zenModule_enableUnitSimulation.sqf b/cScripts/functions/modules/fn_zenModule_enableUnitSimulation.sqf deleted file mode 100644 index c9be31cc3..000000000 --- a/cScripts/functions/modules/fn_zenModule_enableUnitSimulation.sqf +++ /dev/null @@ -1,36 +0,0 @@ -#include "..\script_component.hpp"; -/* - * Author: CPL.Brostrom.A - * This module function enables adn unhide a units, vehicle and its group; - * that have been hidden and disabled by simulation manager and dynamic simulation. - * - * Arguments: - * 0: modulePos - * 1: objectPos - * - * Example: - * [getPos logic, this] call cScripts_fnc_zenModule_enableUnitSimulation - * - * Public: No - */ - -params ["_modulePos", "_objectPos"]; - -if (isNull _objectPos) exitWith { - ["Not a valid unit"] call zen_common_fnc_showMessage; -}; -if (!(isObjectHidden _objectPos) && simulationEnabled _objectPos) exitWith { - ["Unit already active"] call zen_common_fnc_showMessage; -}; - -_objectPos enableDynamicSimulation false; -[_objectPos, true] remoteExec ["enableSimulationGlobal", 2]; -[_objectPos, false] remoteExec ["hideObjectGlobal", 2]; - -group _objectPos enableDynamicSimulation false; -{ - [_x, true] remoteExec ["enableSimulationGlobal", 2]; - [_x, false] remoteExec ["hideObjectGlobal", 2]; -} forEach units group _objectPos; - -["Unit have been activated"] call zen_common_fnc_showMessage; diff --git a/cScripts/functions/modules/fn_zenModule_toggleUnitSimulation.sqf b/cScripts/functions/modules/fn_zenModule_toggleUnitSimulation.sqf new file mode 100644 index 000000000..eb94566af --- /dev/null +++ b/cScripts/functions/modules/fn_zenModule_toggleUnitSimulation.sqf @@ -0,0 +1,46 @@ +#include "..\script_component.hpp"; +/* + * Author: CPL.Brostrom.A + * This module function enables adn unhide a units, vehicle and its group; + * that have been hidden and disabled by simulation manager and dynamic simulation. + * + * Arguments: + * 0: modulePos + * 1: objectPos + * + * Example: + * [getPos logic, this] call cScripts_fnc_zenModule_enableUnitSimulation + * + * Public: No + */ + +params ["_modulePos", "_objectPos"]; + +if (isNull _objectPos) exitWith { + ["Not a valid unit"] call zen_common_fnc_showMessage; +}; + +if ((isObjectHidden _objectPos) || !(simulationEnabled _objectPos)) then { + _objectPos enableDynamicSimulation false; + [_objectPos, true] remoteExec ["enableSimulationGlobal", 2]; + [_objectPos, false] remoteExec ["hideObjectGlobal", 2]; + + group _objectPos enableDynamicSimulation false; + { + [_x, true] remoteExec ["enableSimulationGlobal", 2]; + [_x, false] remoteExec ["hideObjectGlobal", 2]; + _objectPos enableDynamicSimulation false; + } forEach units group _objectPos; + + ["Unit group have been enabled, revealed and have it's dynamic simulation disabled"] call zen_common_fnc_showMessage; +} else { + _objectPos enableDynamicSimulation true; + + group _objectPos enableDynamicSimulation true; + { + _objectPos enableDynamicSimulation true; + } forEach units group _objectPos; + + ["Unit group have been disabled and have its dynamic simulation enabled"] call zen_common_fnc_showMessage; +}; +