From d036639b46f2a55002ae273b4c18068a903fa7bf Mon Sep 17 00:00:00 2001 From: SilentSpike Date: Fri, 3 Jul 2015 02:14:58 +0100 Subject: [PATCH] Adding hideUnit functions to ace_common --- addons/common/XEH_postInit.sqf | 6 +++- addons/common/XEH_preInit.sqf | 2 ++ addons/common/functions/fnc_hideUnit.sqf | 34 ++++++++++++++++++++++ addons/common/functions/fnc_unhideUnit.sqf | 34 ++++++++++++++++++++++ 4 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 addons/common/functions/fnc_hideUnit.sqf create mode 100644 addons/common/functions/fnc_unhideUnit.sqf diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 3796a4fdc8..22513ec468 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -6,7 +6,7 @@ //Singe PFEH to handle execNextFrame and waitAndExec: [{ private ["_entry"]; - + //Handle the waitAndExec array: while {((count GVAR(waitAndExecArray)) > 0) && {((GVAR(waitAndExecArray) select 0) select 0) <= ACE_Time}} do { _entry = GVAR(waitAndExecArray) deleteAt 0; @@ -56,6 +56,10 @@ ["setFuel", {(_this select 0) setFuel (_this select 1)}] call FUNC(addEventhandler); ["setSpeaker", {(_this select 0) setSpeaker (_this select 1)}] call FUNC(addEventhandler); +if (isServer) then { + ["hideObjectGlobal", {(_this select 0) hideObjectGlobal (_this select 1)}] call FUNC(addEventHandler); +}; + // hack to get PFH to work in briefing [QGVAR(onBriefingPFH), "onEachFrame", { if (ACE_time > 0) exitWith { diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index 72e85e4b6b..54f374fcc2 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -102,6 +102,7 @@ PREP(goKneeling); PREP(hadamardProduct); PREP(hasItem); PREP(hasMagazine); +PREP(hideUnit); PREP(inheritsFrom); PREP(insertionSort); PREP(interpolateFromArray); @@ -179,6 +180,7 @@ PREP(toBin); PREP(toBitmask); PREP(toHex); PREP(toNumber); +PREP(unhideUnit); PREP(uniqueElementsOnly); PREP(unloadPerson); PREP(unloadPersonLocal); diff --git a/addons/common/functions/fnc_hideUnit.sqf b/addons/common/functions/fnc_hideUnit.sqf new file mode 100644 index 0000000000..b3cd6f7b77 --- /dev/null +++ b/addons/common/functions/fnc_hideUnit.sqf @@ -0,0 +1,34 @@ +/* + * Author: SilentSpike (based on muteUnit) + * Globally hides a unit. This allows the handling of more than one reason to hide an object globally. + * + * Arguments: + * 0: Unit + * 1: Reason to hide the unit + * + * Return Value: + * nil + * + * Example: + * [ACE_Player, "SpectatorMode"] call ace_common_fnc_hideUnit + * + * Public: No + */ + +#include "script_component.hpp" + +PARAMS_2(_unit,_reason); + +if (isNull _unit) exitWith {}; + +private "_setHiddenReasons"; +_setHiddenReasons = _unit getVariable [QGVAR(setHiddenReasons), []]; + +if !(_reason in _setHiddenReasons) then { + _setHiddenReasons pushBack _reason; + _unit setVariable [QGVAR(setHiddenReasons), _setHiddenReasons, true]; +}; + +if !(isObjectHidden _unit) then { + ["hideObjectGlobal",[_unit,true]] call FUNC(serverEvent); +}; diff --git a/addons/common/functions/fnc_unhideUnit.sqf b/addons/common/functions/fnc_unhideUnit.sqf new file mode 100644 index 0000000000..190be47664 --- /dev/null +++ b/addons/common/functions/fnc_unhideUnit.sqf @@ -0,0 +1,34 @@ +/* + * Author: SilentSpike (based on unmuteUnit) + * Globally unhides a unit. Only unhides if the last reason was removed. + * + * Arguments: + * 0: Unit + * 1: Reason to unhide the unit + * + * Return Value: + * nil + * + * Example: + * [ACE_Player, "SpectatorMode"] call ace_common_fnc_unhideUnit + * + * Public: No + */ + +#include "script_component.hpp" + +PARAMS_2(_unit,_reason); + +if (isNull _unit) exitWith {}; + +private "_setHiddenReasons"; +_setHiddenReasons = _unit getVariable [QGVAR(setHiddenReasons), []]; + +if (_reason in _setHiddenReasons) then { + _setHiddenReasons deleteAt (_setHiddenReasons find _reason); + _unit setVariable [QGVAR(setHiddenReasons), _setHiddenReasons, true]; +}; + +if (_setHiddenReasons isEqualTo []) then { + ["hideObjectGlobal",[_unit,false]] call FUNC(serverEvent); +};