A game about forced loneliness, made by TACStudios
1using System;
2using UnityEngine;
3
4namespace Unity.VisualScripting
5{
6 /// <summary>
7 /// Called when a specified number of seconds has elapsed.
8 /// </summary>
9 [UnitCategory("Events/Time")]
10 [Obsolete("Use Wait For Seconds or Timer instead.")]
11 public sealed class OnTimerElapsed : MachineEventUnit<EmptyEventArgs>
12 {
13 public new class Data : EventUnit<EmptyEventArgs>.Data
14 {
15 public float time;
16
17 public bool triggered;
18 }
19
20 public override IGraphElementData CreateData()
21 {
22 return new Data();
23 }
24
25 protected override string hookName => EventHooks.Update;
26
27 /// <summary>
28 /// The number of seconds to await.
29 /// </summary>
30 [DoNotSerialize]
31 [PortLabel("Delay")]
32 public ValueInput seconds { get; private set; }
33
34 /// <summary>
35 /// Whether to ignore the time scale.
36 /// </summary>
37 [DoNotSerialize]
38 [PortLabel("Unscaled")]
39 public ValueInput unscaledTime { get; private set; }
40
41 protected override void Definition()
42 {
43 base.Definition();
44
45 seconds = ValueInput(nameof(seconds), 0f);
46 unscaledTime = ValueInput(nameof(unscaledTime), false);
47 }
48
49 public override void StartListening(GraphStack stack)
50 {
51 base.StartListening(stack);
52
53 var data = stack.GetElementData<Data>(this);
54
55 data.triggered = false;
56 data.time = 0;
57 }
58
59 protected override bool ShouldTrigger(Flow flow, EmptyEventArgs args)
60 {
61 var data = flow.stack.GetElementData<Data>(this);
62
63 if (data.triggered)
64 {
65 return false;
66 }
67
68 var increment = flow.GetValue<bool>(unscaledTime) ? Time.unscaledDeltaTime : Time.deltaTime;
69 var threshold = flow.GetValue<float>(seconds);
70
71 data.time += increment;
72
73 if (data.time >= threshold)
74 {
75 data.triggered = true;
76 return true;
77 }
78
79 return false;
80 }
81 }
82}