Add the setApproximateVariablePublic function to common

This commit is contained in:
esteldunedain 2016-01-19 16:58:07 -03:00
parent 3792acd7f7
commit 782934c4b2
2 changed files with 43 additions and 0 deletions

View File

@ -154,6 +154,7 @@ PREP(selectWeaponMode);
PREP(sendRequest); PREP(sendRequest);
PREP(serverLog); PREP(serverLog);
PREP(setAllGear); PREP(setAllGear);
PREP(setApproximateVariablePublic);
PREP(setCaptivityStatus); PREP(setCaptivityStatus);
PREP(setDefinedVariable); PREP(setDefinedVariable);
PREP(setDisableUserInputStatus); PREP(setDisableUserInputStatus);

View File

@ -0,0 +1,42 @@
/*
* Author: esteldunedain
* Publish a variable if it's different enough from the previously published value.
*
* Argument:
* 0: Object the variable should be assigned to <OBJECT>
* 1: Name of the variable <STRING>
* 2: Value of the variable <ANY>
* 3: Absolute tolerance <NUMBER>
*
* Return value:
* Nothing.
*
* Example:
* [player, "balls", 2, 0.1] call ace_common_fnc_setApproximateVariablePublic;
*
* Public: No
*/
// #define DEBUG_MODE_FULL
#include "script_component.hpp"
params ["_object", "_varName", "_value", "_tolerance"];
TRACE_4("params",_object,_varName,_value,_tolerance);
// Set exact new value locally
_object setVariable [_varName, _value];
// Exit if in SP - "duh"
if (!isMultiplayer) exitWith {};
// If new value is not different
private _oldVarName = format ["ACE_oldValue_%1", _varName];
private _oldValue = _object getVariable [_oldVarName, -100000];
// Exit if new value is not different enough from the old onedifferent
if (abs(_value - _oldValue) < _tolerance) exitWith {};
// Publish the new value:
_object setVariable [_varName, _value, true];
_object setVariable [_oldVarName, _value];
TRACE_2("Published variable:", _varName, _value);