From dfa09d31612eac8b247ec12e87da77284ccc9c7f Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 6 Oct 2016 03:18:14 -0500 Subject: [PATCH] Functions to perform arithmetic ops on sets (#4514) * Functions to perform arithmetic ops on a set * fix spelling --- addons/common/XEH_PREP.hpp | 2 + .../functions/fnc_arithmeticGetResult.sqf | 69 +++++++++++++++++++ .../functions/fnc_arithmeticSetSource.sqf | 39 +++++++++++ 3 files changed, 110 insertions(+) create mode 100644 addons/common/functions/fnc_arithmeticGetResult.sqf create mode 100644 addons/common/functions/fnc_arithmeticSetSource.sqf diff --git a/addons/common/XEH_PREP.hpp b/addons/common/XEH_PREP.hpp index 1f6086b24e..44e6010b4e 100644 --- a/addons/common/XEH_PREP.hpp +++ b/addons/common/XEH_PREP.hpp @@ -7,6 +7,8 @@ PREP(addToInventory); PREP(assignedItemFix); PREP(assignObjectsInList); PREP(ambientBrightness); +PREP(arithmeticGetResult); +PREP(arithmeticSetSource); PREP(ASLToPosition); PREP(binarizeNumber); PREP(blurScreen); diff --git a/addons/common/functions/fnc_arithmeticGetResult.sqf b/addons/common/functions/fnc_arithmeticGetResult.sqf new file mode 100644 index 0000000000..d3fb67b1af --- /dev/null +++ b/addons/common/functions/fnc_arithmeticGetResult.sqf @@ -0,0 +1,69 @@ +/* + * Author: PabstMirror + * Gets arithmetic result from a set. + * + * Arguments: + * 0: Namespace + * 1: Number Set ID + * 2: Operation (sum, product, min, max, avg) + * + * Return Value: + * + * + * Example: + * [ace_player, "ace_aimCoefficents", "product"] call ace_common_fnc_arithmeticGetResult + * [missionNameSpace, "ace_hearing", "min"] call ace_common_fnc_arithmeticGetResult + * + * Public: Yes + */ +// #define DEBUG_MODE_FULL +#include "script_component.hpp" + +params ["_namespace", "_setID", "_op"]; +TRACE_3("params",_namespace,_setID,_op); + +private _data = (_namespace getVariable _setID) param [2, []]; + +switch (_op) do { + case ("sum"): { + private _result = 0; + { + _result = _result + (call _x); + nil + } count _data; + _result // return + }; + case ("product"): { + private _result = 1; + { + _result = _result * (call _x); + nil + } count _data; + _result // return + }; + case ("min"): { + private _result = 1e99; + { + _result = _result min (call _x); + nil + } count _data; + _result // return + }; + case ("max"): { + private _result = -1e99; + { + _result = _result max (call _x); + nil + } count _data; + _result // return + }; + case ("avg"): { + private _result = 0; + { + _result = _result + (call _x); + nil + } count _data; + _result / (count _data); // return + }; + default {3735928559}; +}; diff --git a/addons/common/functions/fnc_arithmeticSetSource.sqf b/addons/common/functions/fnc_arithmeticSetSource.sqf new file mode 100644 index 0000000000..1cb156bcc3 --- /dev/null +++ b/addons/common/functions/fnc_arithmeticSetSource.sqf @@ -0,0 +1,39 @@ +/* + * Author: PabstMirror + * Adds or removes a source to an arithmetic set. + * + * Arguments: + * 0: Namespace + * 1: Number Set ID + * 2: Source + * 3: Code that returns a number (can access var _namespace) [use {} to remove] + * + * Return Value: + * Nothing + * + * Example: + * [missionNameSpace, "ace_hearing", "myMission", {0.5}] call ace_common_fnc_arithmeticSetSource + * [ace_player, "ace_aimCoefficents", "ace_medical", {linearConversion [0,1,(_namespace getVariable "ace_medical_pain",1,0.2,true]}] call ace_common_fnc_arithmeticSetSource + * + * Public: Yes + */ +// #define DEBUG_MODE_FULL +#include "script_component.hpp" + +params ["_namespace", "_setID", "_source", "_variable"]; +TRACE_4("params",_namespace,_setID,_source,_variable); + +private _hash = _namespace getVariable _setID; +if (isNil "_hash") then { + _hash = [] call CBA_fnc_hashCreate; + _namespace setVariable [_setID, _hash]; +}; +if (_variable isEqualTo {}) then { + TRACE_1("removing",_source); + [_hash, _source] call CBA_fnc_hashRem; +} else { + TRACE_2("adding",_source,_variable); + [_hash, _source, _variable] call CBA_fnc_hashSet; +}; + +nil