9 public partial class Fiber {
11 public Fiber
WaitFor(
float seconds) =>
12 AddAction(_ => SecondsWorker.Instance.Load(fiber:
this, data: seconds),
"WaitFor(Seconds)");
15 public Fiber
WaitFor(Func<Fiber, float> getSeconds) =>
16 AddAction(_ => SecondsWorker.Instance.Load(fiber:
this, getSeconds(
this)),
"WaitFor(Seconds)");
20 AddAction(_ => RealtimeWorker.Instance.Load(fiber:
this, seconds),
"WaitFor(Realtime Seconds)");
23 public Fiber
WaitRealtime(Func<Fiber, float> getSeconds) =>
24 AddAction(_ => RealtimeWorker.Instance.Load(fiber:
this, getSeconds(
this)),
"WaitFor(Realtime Seconds)");
26 private class SecondsWorker : BaseTimeWorker {
29 protected override void Recycle() => Cache<SecondsWorker>.
Dispose(
this);
30 protected override float TimeNow => Time.time;
31 protected override float CalculatedEndTime() => (Seed + Time.time) - (2 * Time.deltaTime);
34 private class RealtimeWorker : BaseTimeWorker {
37 protected override void Recycle() => Cache<RealtimeWorker>.
Dispose(
this);
38 protected override float TimeNow => Time.realtimeSinceStartup;
40 protected override float CalculatedEndTime() => (Seed + Time.realtimeSinceStartup) - (2 * Time.unscaledDeltaTime);
43 private abstract class BaseTimeWorker : Worker<float> {
44 private float endTime;
46 protected abstract float CalculatedEndTime();
48 protected override bool Prepare() {
49 endTime = CalculatedEndTime();
53 protected abstract float TimeNow {
get; }
55 protected override int CompareTo(Worker other) => Seed.CompareTo((other as BaseTimeWorker)?.Seed);
57 public override bool NoMore => endTime > TimeNow;
59 public override void Step() =>
Dispose();
Fiber WaitFor(IClosure closure)
Helper that is the same as fiber.WaitFor(closure.OnComplete)
void Dispose()
Cleans up Fiber before it goes into the recycling
Fiber WaitRealtime(float seconds)
Wait the specified time in real-world seconds
static Fiber Instance
Precompile an instance of a fiber command