Timer
Entity-таймер с Timeout и настройками повторения и обработки.
Timer является Entity: добавьте его в активное дерево и запустите Start либо настройте Autostart. OneShot определяет одно срабатывание или повторение. Подписывайтесь на Timeout до запуска, если важен первый сигнал.
ProcessMode определяет поведение при паузе дерева, Paused относится к самому таймеру. IgnoreTimeScale не отменяет условия обработки при паузе. Для одноразового ожидания без отдельной Entity существует EntityTree.CreateTimer с другим значением по умолчанию: processAlways = true.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
TimerКонструктор
public Timer();Создаёт остановленную Timer Entity вне дерева. По умолчанию WaitTime = 1 секунда, ProcessCallback = Idle; Autostart, OneShot, Paused и IgnoreTimeScale выключены. Добавьте её в активное дерево перед Start.
Свойства7
AutostartСвойство
public bool Autostart { get; set; }При Ready запускает таймер автоматически и сбрасывается в false. Это не команда немедленного запуска уже готового объекта: для него используйте Start. Для редактируемого документа в редакторе автозапуск подавляется.
IgnoreTimeScaleСвойство
public bool IgnoreTimeScale { get; set; }Определяет использование немасштабированного времени. Не включает обработку автоматически, когда ProcessMode запрещает её из-за паузы.
OneShotСвойство
public bool OneShot { get; set; }Если true, автоматическое истечение останавливает отсчёт перед Timeout. Если false, после истечения добавляется WaitTime и отсчёт продолжается. Таймер остаётся Entity дерева; режим не удаляет его.
PausedСвойство
public bool Paused { get; set; }Приостанавливает этот Timer, не всё EntityTree. Условия ProcessMode дерева остаются отдельными.
ProcessCallbackСвойство
public Timer.TimerProcessCallback ProcessCallback { get; set; }Выбирает фазу обновления: Idle — процессные кадры, Physics — физические такты. Не задаёт отдельный поток и не обходит Paused или условия ProcessMode.
TimeLeftСвойство
public double TimeLeft { get; }Оставшийся отсчёт в секундах, ограниченный снизу нулём; свойство только для чтения. У остановленного таймера равно 0, у приостановленного сохраняется. Нулевой результат сам по себе не означает, что Entity удалена.
WaitTimeСвойство
public double WaitTime { get; set; }Интервал в секундах. Задавайте конечное положительное число; значение <= 0 вызывает native-ошибку и сохраняет прежний интервал, а не гарантированное исключение CLR. Изменение свойства само не запускает таймер и не сбрасывает оставшееся время. Очень короткие интервалы зависят от частоты выбранной фазы; это не высокоточный отдельный системный таймер.
Методы16
GetTimeLeftdouble
public double GetTimeLeft();Возвращает TimeLeft без изменения состояния таймера. Подробности — в описании свойства.
doubleОстаток в секундах, не меньше 0.
GetTimerProcessCallbackTimer.TimerProcessCallback
public Timer.TimerProcessCallback GetTimerProcessCallback();Возвращает ProcessCallback без изменения состояния таймера. Подробности — в описании свойства.
Timer.TimerProcessCallbackВыбранная фаза Idle или Physics.
GetWaitTimedouble
public double GetWaitTime();Возвращает WaitTime без изменения состояния таймера. Подробности — в описании свойства.
doubleНастроенный интервал в секундах, не текущий остаток.
HasAutostartbool
public bool HasAutostart();Возвращает Autostart без изменения состояния таймера. Подробности — в описании свойства.
boolТекущее значение Autostart; после автоматического запуска сбрасывается.
IsIgnoringTimeScalebool
public bool IsIgnoringTimeScale();Возвращает IgnoreTimeScale без изменения состояния таймера. Подробности — в описании свойства.
booltrue при выборе немасштабированного времени; иначе false.
IsOneShotbool
public bool IsOneShot();Возвращает OneShot без изменения состояния таймера. Подробности — в описании свойства.
booltrue при OneShot; иначе false.
IsPausedbool
public bool IsPaused();Возвращает Paused без изменения состояния таймера. Подробности — в описании свойства.
booltrue при локальной паузе этого таймера; это не состояние паузы всего дерева.
IsStoppedbool
public bool IsStopped();Проверяет GetTimeLeft() <= 0. У нового или остановленного таймера возвращает true; пауза с положительным остатком не считается остановкой. При отставании повторяющегося таймера остаток тоже может быть 0: метод не проверяет флаг обработки или существование Entity.
booltrue при нулевом видимом остатке; иначе false.
SetAutostartvoid
public void SetAutostart(bool enable);Устанавливает Autostart с теми же правилами, что и свойство. Это не отдельный способ запуска таймера.
| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
enableРазрешить автоматический запуск при Ready.
SetIgnoreTimeScalevoid
public void SetIgnoreTimeScale(bool ignore);Устанавливает IgnoreTimeScale с теми же правилами, что и свойство. Это не отдельный способ запуска таймера.
| Имя | Тип | По умолчанию |
|---|---|---|
ignore | bool | — |
ignoreВыбирать немасштабированное время, не обходя условия паузы.
SetOneShotvoid
public void SetOneShot(bool enable);Устанавливает OneShot с теми же правилами, что и свойство. Это не отдельный способ запуска таймера.
| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
enableОстановиться после одного истечения, не удаляя Entity.
SetPausedvoid
public void SetPaused(bool paused);Устанавливает Paused с теми же правилами, что и свойство. Это не отдельный способ запуска таймера.
| Имя | Тип | По умолчанию |
|---|---|---|
paused | bool | — |
pausedЛокальная пауза таймера; оставшееся время сохраняется.
SetTimerProcessCallbackvoid
public void SetTimerProcessCallback(Timer.TimerProcessCallback callback);Устанавливает ProcessCallback с теми же правилами, что и свойство. Это не отдельный способ запуска таймера.
| Имя | Тип | По умолчанию |
|---|---|---|
callback | Timer.TimerProcessCallback | — |
callbackДопустимая фаза Idle или Physics.
SetWaitTimevoid
public void SetWaitTime(double timeSec);Устанавливает WaitTime с теми же правилами, что и свойство. Это не отдельный способ запуска таймера.
| Имя | Тип | По умолчанию |
|---|---|---|
timeSec | double | — |
timeSecКонечный положительный интервал в секундах. Сам отсчёт не перезапускается.
Startvoid
public void Start(double timeSec = -1d);Запускает или сбрасывает отсчёт в активном дереве. Положительный timeSec сначала заменяет WaitTime; 0 и отрицательное значение используют прежний интервал. Не снимает Paused. Вызов вне дерева сообщает native-ошибку; не рассчитывайте на исключение CLR.
Полный пример проверяет входные данные и подписывается до запуска. Вернувшийся Timer остаётся дочерним объектом parent после истечения. Для его отмены вызовите Stop; для удаления — QueueFree, когда объект больше не нужен.
using System;
using Reckfell;
public static class TimerExample
{
// The returned Timer remains a child of parent after its one timeout.
public static Timer StartOnce(Entity parent, double seconds, Action onTimeout)
{
ArgumentNullException.ThrowIfNull(parent);
ArgumentNullException.ThrowIfNull(onTimeout);
if (!parent.IsInsideTree())
throw new ArgumentException("Parent must be inside the active tree.", nameof(parent));
if (!double.IsFinite(seconds) || seconds <= 0)
throw new ArgumentOutOfRangeException(nameof(seconds));
var timer = new Timer { OneShot = true };
parent.AddChild(timer);
timer.Timeout += onTimeout;
timer.Start(seconds);
return timer;
}
}| Имя | Тип | По умолчанию |
|---|---|---|
timeSec | double | -1d |
timeSecНовый конечный положительный интервал или значение <= 0 для использования WaitTime. По умолчанию -1.
Stopvoid
public void Stop();Останавливает обработку, обнуляет видимый TimeLeft и сбрасывает Autostart. Не испускает Timeout и не удаляет Entity. Допустим вне дерева. Ожидание Timeout через await не становится автоматически отменённым или завершённым.
Сигналы и события1
TimeoutСобытие
public event Action Timeout;Сигнал автоматического истечения отсчёта без аргументов. Подписывайтесь до Start. При OneShot таймер к этому моменту остановлен; при повторении продолжает работу. Stop сам сигнал не испускает.
Timer.TimerProcessCallback
| Значение | Описание |
|---|---|
Idle = 1 | Обновление в процессных кадрах; значение по умолчанию. |
Physics = 0 | Обновление в физических тактах. |