-
Notifications
You must be signed in to change notification settings - Fork 0
/
LimitFps.cs
46 lines (41 loc) · 1.47 KB
/
LimitFps.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System.Diagnostics;
namespace Thuja
{
/// <summary>
/// Позволяет легко делать что-то не больше N раз в секунду.
/// </summary>
public class LimitFps
{
/// <summary>
/// Задержка между "кадрами", измеряется в тиках Stopwatch.
/// </summary>
private long delay;
/// <summary>
/// Когда был последний "кадр", в тиках Stopwatch.
/// </summary>
private long lastFrame;
/// <summary>
/// Сколько раз в секунду <see cref="IsTimeToDraw"/> будет возвращать true.
/// </summary>
public int Fps
{
set => delay = Stopwatch.Frequency / value;
}
/// <summary>
/// Вовзвращает true, если с момента последнего true прошло столько времени,
/// чтобы true возвращались <see cref="Fps"/> раз в секунду.
///
/// Рекомендуется вызывать этот метод так часто, как можно.
/// </summary>
public bool IsTimeToDraw()
{
var now = Stopwatch.GetTimestamp();
if (now - lastFrame > delay)
{
lastFrame = now;
return true;
}
return false;
}
}
}