/
TON618OFF
/
Unity-Project-RTU
Обзор
Документация
Войти
/
TON618OFF
/
Unity-Project-RTU
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Library/PackageCache/com.unity.visualscripting@1.9.4/Runtime/VisualScripting.Flow/Framework/Control/While.cs
79 строк
2 KB
TON618OFF
release
03 окт 2024, 22:20
03 окт 2024, 22:20
7c70e9f
Код
Авторство
О чём код?
using System.Collections; namespace Unity.VisualScripting { /// <summary> /// Loops as long as a given condition is true. /// </summary> [UnitTitle("While Loop")] [UnitCategory("Control")] [UnitOrder(11)] public class While : LoopUnit { /// <summary> /// The condition to check at each iteration to determine whether the loop should continue. /// </summary> [DoNotSerialize] [PortLabelHidden] public ValueInput condition { get; private set; } protected override void Definition() { base.Definition(); condition = ValueInput<bool>(nameof(condition)); Requirement(condition, enter); } private int Start(Flow flow) { return flow.EnterLoop(); } private bool CanMoveNext(Flow flow) { return flow.GetValue<bool>(condition); } protected override ControlOutput Loop(Flow flow) { var loop = Start(flow); var stack = flow.PreserveStack(); while (flow.LoopIsNotBroken(loop) && CanMoveNext(flow)) { flow.Invoke(body); flow.RestoreStack(stack); } flow.DisposePreservedStack(stack); flow.ExitLoop(loop); return exit; } protected override IEnumerator LoopCoroutine(Flow flow) { var loop = Start(flow); var stack = flow.PreserveStack(); while (flow.LoopIsNotBroken(loop) && CanMoveNext(flow)) { yield return body; flow.RestoreStack(stack); } flow.DisposePreservedStack(stack); flow.ExitLoop(loop); yield return exit; } } }