Skip to content

Commit db59141

Browse files
committed
feat(FPS): add Average setting
1 parent cb85f97 commit db59141

File tree

1 file changed

+22
-11
lines changed
  • src/main/kotlin/com/lambda/module/hud

1 file changed

+22
-11
lines changed

src/main/kotlin/com/lambda/module/hud/FPS.kt

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,31 +22,42 @@ import com.lambda.event.listener.SafeListener.Companion.listen
2222
import com.lambda.gui.dsl.ImGuiBuilder
2323
import com.lambda.module.HudModule
2424
import com.lambda.module.tag.ModuleTag
25+
import kotlin.time.Duration.Companion.seconds
2526

2627
object FPS : HudModule(
2728
name = "FPS",
2829
description = "Displays your games frames per second",
2930
tag = ModuleTag.HUD
3031
) {
31-
val updateDelay by setting("Update Delay", 50, 0..1000, 1, "Time between updating the fps value")
32+
val average by setting("Average", false)
33+
val updateDelay by setting("Update Delay", 50, 0..1000, 1, "Time between updating the fps value") {
34+
!average
35+
}
3236

37+
val frames = mutableListOf<Long>();
3338
var lastUpdated = System.currentTimeMillis()
3439
var lastFrameTime = System.nanoTime()
3540
var fps = 0
3641

3742
init {
3843
listen<RenderEvent.Render> {
39-
val currentTimeNano = System.nanoTime()
40-
41-
val currentTypeMilli = System.currentTimeMillis()
42-
if (currentTypeMilli - lastUpdated >= updateDelay) {
43-
lastUpdated = currentTypeMilli
44-
val elapsedNs = currentTimeNano - lastFrameTime
45-
fps = if (elapsedNs > 0) (1000000000 / elapsedNs).toInt()
46-
else 0
47-
}
44+
if (average) {
45+
frames.add(System.nanoTime() + 1.seconds.inWholeNanoseconds)
46+
frames.removeIf { System.nanoTime() > it }
47+
fps = frames.size
48+
} else {
49+
val currentTimeNano = System.nanoTime()
4850

49-
lastFrameTime = currentTimeNano
51+
val currentTypeMilli = System.currentTimeMillis()
52+
if (currentTypeMilli - lastUpdated >= updateDelay) {
53+
lastUpdated = currentTypeMilli
54+
val elapsedNs = currentTimeNano - lastFrameTime
55+
fps = if (elapsedNs > 0) (1000000000 / elapsedNs).toInt()
56+
else 0
57+
}
58+
59+
lastFrameTime = currentTimeNano
60+
}
5061
}
5162
}
5263

0 commit comments

Comments
 (0)