-
Notifications
You must be signed in to change notification settings - Fork 736
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Functions to perform arithmetic ops on sets (#4514)
* Functions to perform arithmetic ops on a set * fix spelling
- Loading branch information
1 parent
2e147b3
commit dfa09d3
Showing
3 changed files
with
110 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
/* | ||
* Author: PabstMirror | ||
* Gets arithmetic result from a set. | ||
* | ||
* Arguments: | ||
* 0: Namespace <OBJECT><LOCATION><MISSIONNAMESPACE> | ||
* 1: Number Set ID <STRING> | ||
* 2: Operation (sum, product, min, max, avg) <STRING> | ||
* | ||
* Return Value: | ||
* <NUMBER> | ||
* | ||
* 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}; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
/* | ||
* Author: PabstMirror | ||
* Adds or removes a source to an arithmetic set. | ||
* | ||
* Arguments: | ||
* 0: Namespace <OBJECT><LOCATION><MISSIONNAMESPACE> | ||
* 1: Number Set ID <STRING> | ||
* 2: Source <STRING> | ||
* 3: Code that returns a number (can access var _namespace) [use {} to remove] <CODE> | ||
* | ||
* 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 |