common: add waitAndExecute function

This commit is contained in:
Nicolás Badano 2015-01-17 02:58:24 -03:00
parent c85db9baf9
commit 2f4f6f3161
2 changed files with 42 additions and 0 deletions

View File

@ -119,6 +119,7 @@ PREP(toBitmask);
PREP(toHex);
PREP(toNumber);
PREP(unmuteUnit);
PREP(waitAndExecute);
// ACE_Debug
PREP(exportConfig);

View File

@ -0,0 +1,41 @@
/*
* Author: CAA-Picard
*
* Executes a code once with a given game time delay, using a PFH
*
* Argument:
* 0: Code to execute (Code or String)
* 1: Parameters to run the code with (Array)
* 2: Delay in seconds before executing the code (Number)
* 3: Interval of time in which the execution is evaluated, 0 means every frame (Number)
*
* Return value:
* PFH handler ID
*/
#include "script_component.hpp"
EXPLODE_4_PVT(_this,_func,_params,_delay,_interval);
[
{
EXPLODE_2_PVT(_this,_params,_phfId);
EXPLODE_2_PVT(_params,_delayedExecParams,_startTime);
EXPLODE_3_PVT(_delayedExecParams,_func,_funcParams,_delay);
// Exit if the time was not reached yet
if (time < _startTime + _delay) exitWith {};
// Remove the PFH
[_pfhId] call cba_fnc_removePerFrameHandler;
// Compile the function if necesary
if (typeName _func == "STRING") then {
_func = compile _func;
};
// Execute the function
_funcParams call _func;
},
_interval,
[_this, time]
] call CBA_fnc_addPerFrameHandler