Add Known Issues section to document issue #256 |
overhaul cleanup etc. |
||
Line 15: | Line 15: | ||
|}} | |}} | ||
The '''While''' node | The '''While''' node is used to perform looping operations by allowing one to fire [[impulses]] continuously while a condition remains true. | ||
For the [[async]] variant of this node, see [[ProtoFlux:Async While|Async While]]. | |||
{{Note| | {{Note|Be very careful when developing with this node. [https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/774 There is no iteration limit for debugging] and [https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/1677 ProtoFlux does not have handling for execution taking too long]. If you accidentally create an infinite loop, you'll be unable to save progress or anything else important. Don't connect to an input impulse while debugging and save before testing!|danger}} | ||
== Inputs == | == Inputs == | ||
Line 25: | Line 25: | ||
=== * ([[Impulses|Call]]) === | === * ([[Impulses|Call]]) === | ||
Begin the while loop. | |||
=== Condition ([[Type:Bool|Boolean]]) === | === Condition ([[Type:Bool|Boolean]]) === | ||
Condition that the loop will check to determine if it should iterate again or not. If <code>True</code>, it will iterate again. | |||
== Outputs == | == Outputs == | ||
Line 35: | Line 35: | ||
=== LoopStart ([[Impulses|Impulse]]) === | === LoopStart ([[Impulses|Impulse]]) === | ||
Fires | Fires after <code>*</code> is pulsed and before any iterations are performed. Will be pulsed even if <code>Condition</code> is <code>False</code> at the time of the loop beginning. | ||
=== LoopIteration ([[Impulses|Impulse]]) === | === LoopIteration ([[Impulses|Impulse]]) === | ||
Will be pulsed for as long <code>Condition</code> is <code>True</code>. Only after the [[context]] of the current loop iteration is finished will the next iteration fire. | |||
=== LoopEnd ([[Impulses|Impulse]]) === | === LoopEnd ([[Impulses|Impulse]]) === | ||
Fires | Fires after <code>Condition</code> turns <code>False</code>, continuing the impulse chain from before. | ||
== | == Known Issues == | ||
< | * As of the time of writing, there is [https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/256 a known issue] where if the final node in the <code>LoopIteration</code> chain is a [[ProtoFlux:Write|Write]] node, said node modifies a variable used for conditional evaluation, <em>and</em> the value to write is based off said variable, the write will be using a previously cached value. This can cause an extra loop iteration to occur, which is very annoying to debug. | ||
** The easiest way to work around this bug is to add a "dummy" node after the write, such as an [[ProtoFlux:Impulse Display|Impulse Display]] or, if debugging a ton of impulses and lag is undesirable, an empty Write node. | |||
== | == See Also == | ||
* | * If it is possible to determine the amount of times you need to loop beforehand, consider [[ProtoFlux:For]] instead. | ||
[[Category:ProtoFlux:Flow]] | [[Category:ProtoFlux:Flow]] |
Revision as of 20:54, 14 December 2024
While
Flow
The While node is used to perform looping operations by allowing one to fire impulses continuously while a condition remains true.
For the async variant of this node, see Async While.
Inputs
* (Call)
Begin the while loop.
Condition (Boolean)
Condition that the loop will check to determine if it should iterate again or not. If True
, it will iterate again.
Outputs
LoopStart (Impulse)
Fires after *
is pulsed and before any iterations are performed. Will be pulsed even if Condition
is False
at the time of the loop beginning.
LoopIteration (Impulse)
Will be pulsed for as long Condition
is True
. Only after the context of the current loop iteration is finished will the next iteration fire.
LoopEnd (Impulse)
Fires after Condition
turns False
, continuing the impulse chain from before.
Known Issues
- As of the time of writing, there is a known issue where if the final node in the
LoopIteration
chain is a Write node, said node modifies a variable used for conditional evaluation, and the value to write is based off said variable, the write will be using a previously cached value. This can cause an extra loop iteration to occur, which is very annoying to debug.- The easiest way to work around this bug is to add a "dummy" node after the write, such as an Impulse Display or, if debugging a ton of impulses and lag is undesirable, an empty Write node.
See Also
- If it is possible to determine the amount of times you need to loop beforehand, consider ProtoFlux:For instead.