Files
2026-06-01 17:19:55 +02:00

70 lines
1.5 KiB
C#

using System;
using UnityEngine;
[DisallowMultipleComponent]
public sealed class WaitBehavior : NodeBehavior
{
private const float RemainingRefreshInterval = 0.1f;
private bool waiting;
private float waitEndTime;
private float nextRemainingRefreshAt;
private void Start()
{
if (base.IsAuthoritative)
{
SetOutputValueIfChanged("Remaining", BSValue.FromNumber(0.0));
}
}
private void Update()
{
if (base.IsAuthoritative && waiting)
{
float num = Mathf.Max(0f, waitEndTime - Time.unscaledTime);
if (num <= 0.0001f)
{
waiting = false;
SetOutputValueIfChanged("Remaining", BSValue.FromNumber(0.0));
TriggerOutput("Done");
}
else if (Time.unscaledTime >= nextRemainingRefreshAt)
{
nextRemainingRefreshAt = Time.unscaledTime + 0.1f;
SetOutputValueIfChanged("Remaining", BSValue.FromNumber(num));
}
}
}
public override void OnRun(string inputPortName)
{
if (!base.IsAuthoritative)
{
return;
}
if (string.Equals(inputPortName, "Wait", StringComparison.Ordinal))
{
float num = Mathf.Max(0f, (float)GetInputNumber("Delay"));
waiting = false;
SetOutputValueIfChanged("Remaining", BSValue.FromNumber(num));
if (num <= 0.0001f)
{
TriggerOutput("Done");
return;
}
waiting = true;
waitEndTime = Time.unscaledTime + num;
nextRemainingRefreshAt = 0f;
}
else if (string.Equals(inputPortName, "Stop", StringComparison.Ordinal) && waiting)
{
waiting = false;
SetOutputValueIfChanged("Remaining", BSValue.FromNumber(0.0));
TriggerOutput("Stopped");
}
}
}