Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
Time.cs
浏览该文件的文档.
1using System.Diagnostics;
2
3namespace Engine {
4 public static class Time {
6 public double Time;
7
8 // ReSharper disable MemberHidesStaticFromOuterClass
9 public int FrameIndex;
10 // ReSharper restore MemberHidesStaticFromOuterClass
11
12 public Action Action;
13 }
14
15 static long? m_startTicks;
16
17 static List<DelayedExecutionRequest> m_delayedExecutionsRequests = [];
18
20
21 static double m_fpsStartTime;
22
23 static float m_fpsCpuTime;
24
25 static float m_remainingDuration;
26 public static int FrameIndex { get; private set; }
27
28 public static long Ticks {
29 get {
30 long timestamp = Stopwatch.GetTimestamp();
31 m_startTicks ??= timestamp;
32 return timestamp - m_startTicks.Value;
33 }
34 }
35
36 public static long TicksPerSecond => Stopwatch.Frequency;
37
38 public static double RealTime => Ticks / (double)TicksPerSecond;
39
40 public static double PreviousFrameStartTime { get; private set; }
41
42 public static double FrameStartTime { get; private set; }
43
44 public static float PreviousFrameDuration { get; private set; }
45
46 public static float FrameDuration { get; private set; }
47
48 public static float CpuFrameDuration { get; private set; }
49
50 public static float AverageFrameDuration { get; private set; }
51
52 public static float AverageCpuFrameDuration { get; private set; }
53
54 public static float FrameDurationLimit { get; set; }
55
56 public static bool SingleEvent(double time) {
57 if (FrameStartTime >= time) {
58 return PreviousFrameStartTime < time;
59 }
60 return false;
61 }
62
63 public static bool PeriodicEvent(double period, double offset) {
64 double num = FrameStartTime - offset;
65 double num2 = Math.Floor(num / period) * period;
66 return num >= num2 && num - FrameDuration < num2;
67 }
68
69 public static void QueueTimeDelayedExecution(double time, Action action) {
70 m_delayedExecutionsRequests.Add(new DelayedExecutionRequest { Time = time, FrameIndex = -1, Action = action });
71 }
72
73 public static void QueueFrameIndexDelayedExecution(int frameIndex, Action action) {
74 m_delayedExecutionsRequests.Add(new DelayedExecutionRequest { Time = -1.0, FrameIndex = frameIndex, Action = action });
75 }
76
77 internal static void BeforeFrame() {
78 double realTime = RealTime;
80 FrameDuration = (float)(realTime - FrameStartTime);
82 FrameStartTime = realTime;
83 if (FrameStartTime >= m_fpsStartTime + 1.0) {
88 m_fpsCpuTime = 0f;
90 }
91 int num2 = 0;
92 while (num2 < m_delayedExecutionsRequests.Count) {
93 DelayedExecutionRequest delayedExecutionRequest = m_delayedExecutionsRequests[num2];
94 if ((delayedExecutionRequest.Time >= 0.0 && FrameStartTime >= delayedExecutionRequest.Time)
95 || (delayedExecutionRequest.FrameIndex >= 0 && FrameIndex >= delayedExecutionRequest.FrameIndex)) {
96 m_delayedExecutionsRequests.RemoveAt(num2);
97 delayedExecutionRequest.Action();
98 }
99 else {
100 num2++;
101 }
102 }
103 }
104
105 internal static void AfterFrame() {
108 FrameIndex++;
109 if (FrameDurationLimit > 0f) {
110 float num = Math.Clamp(FrameDurationLimit, 0f, 1f);
111 m_remainingDuration = Math.Clamp(m_remainingDuration + num - FrameDuration, 0f, 2f * num);
112 float num2 = (float)(RealTime - FrameStartTime);
114 }
115 }
116
117 static void Sleep(double duration) {
118 Task.Delay((int)Math.Clamp(Math.Round(duration * 1000.0), 0.0, 2147483647.0)).Wait();
119 }
120 }
121}
static int FrameIndex
定义 Time.cs:26
static void BeforeFrame()
定义 Time.cs:77
static float CpuFrameDuration
定义 Time.cs:48
static double RealTime
定义 Time.cs:38
static long Ticks
定义 Time.cs:28
static long TicksPerSecond
定义 Time.cs:36
static void QueueTimeDelayedExecution(double time, Action action)
定义 Time.cs:69
static ? long m_startTicks
定义 Time.cs:15
static double PreviousFrameStartTime
定义 Time.cs:40
static void QueueFrameIndexDelayedExecution(int frameIndex, Action action)
定义 Time.cs:73
static float AverageCpuFrameDuration
定义 Time.cs:52
static List< DelayedExecutionRequest > m_delayedExecutionsRequests
定义 Time.cs:17
static float m_fpsCpuTime
定义 Time.cs:23
static float m_remainingDuration
定义 Time.cs:25
static void AfterFrame()
static bool SingleEvent(double time)
定义 Time.cs:56
static void Sleep(double duration)
static float FrameDurationLimit
定义 Time.cs:54
static float FrameDuration
定义 Time.cs:46
static float PreviousFrameDuration
定义 Time.cs:44
static float AverageFrameDuration
定义 Time.cs:50
static int m_fpsStartFrameIndex
定义 Time.cs:19
static bool PeriodicEvent(double period, double offset)
定义 Time.cs:63
static double m_fpsStartTime
定义 Time.cs:21
static double FrameStartTime
定义 Time.cs:42