waitUntil: Difference between revisions
Jump to navigation
Jump to search
Lou Montana (talk | contribs) m (Text replacement - " <h3 style="display:none">Bottom Section</h3>" to "") |
Lou Montana (talk | contribs) m (Text replacement - "{{Command " to "{{RV|type=command ") |
||
Line 1: | Line 1: | ||
{{ | {{RV|type=command | ||
| arma1 | | arma1 |
Revision as of 11:47, 24 January 2021
Description
- Description:
- Description needed
- Problems:
- For some unknown reason if you have waitUntil loop active and game is saved/loaded, some variables in the expression may appear undefined for a short time. As a workaround, assign expression to a variable and make sure it is defined before waitUntil checks it:
waitUntil { private _expression = var1 && (var2 > 10); !isNil "_expression" && { _expression } };
- Groups:
- Program Flow
Syntax
- Syntax:
- Syntax needed
- Parameters:
- condition: Code - the expression that must return a Boolean, true to finish waiting or false to continue waiting
- Return Value:
- Return value needed
Examples
- Example 1:
waitUntil { not alive player };
- Example 2:
_i = 0; waitUntil { _i = _i + 1; _i >= 100 };
- Example 3:
waitUntil {sleep 1; not alive player }; // Checks every 1 second
- Example 4:
- An on-the-fly custom event handler:
_myEH = ["ZoomIn"] spawn { while { true } do { waitUntil { inputAction (_this select 0) == 1; }; diag_log format ["%1 @ %2", _this select 0, diag_tickTime]; }; };
Although perhaps better to use onEachFrame, depending on the application. - Example 5:
- Use getVariable with default value:
// bad waitUntil { bank getVariable "money" > 0 }; // good waitUntil { bank getVariable ["money", 0] > 0 };
// bad waitUntil { isready }; // good waitUntil { missionNamespace getVariable ["isready", false] };
Always return Boolean:// bad waitUntil { if (not alive player) exitWith {}; _time = _time + 1 }; // good waitUntil { if (not alive player) exitWith { true }; _time = _time + 1; false }; // perfect waitUntil { not alive player };
Additional Information
- See also:
- See also needed
Notes
-
Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
- Posted on December 20, 2006 - 19:55
- CrashDome
- waitUntil suspends both SQF functions and SQF scripts. In functions, the calling script is still in suspension due to waiting for a return from the call command. The game engine will continue, however. See Function for more detail.
- Posted on April 2, 2010 - 17:10
- Roehre
- Prior to Arma 3 v1.92.145618 if waitUntil uses an undefined call code, waitUntil won't release, even when this code is separated from other conditions through or. Be warned that this won't cause an error message.
- Posted on Jan 07, 2011
- kju
- By default the cycle time for the condition check is per frame. Look at the example 3, how to set it at a lower rate yourself. Often times one does not need per-frame checking. Saves a lot CPU checks; especially when the condition is complex to compute.
- Posted on December 13, 2014 - 23:25 (UTC)
- Commy2
-
If you want to use waitUntil together with exitWith, remember that the loop only exits if the code block returns true.
It should look like this:waitUntil { // exit loop if the unit gets deleted {{cc|if (isNull _unit) exitWith { true }; // has to return true to continue !alive _unit; };