@@ -22,31 +22,42 @@ import com.lambda.event.listener.SafeListener.Companion.listen
2222import com.lambda.gui.dsl.ImGuiBuilder
2323import com.lambda.module.HudModule
2424import com.lambda.module.tag.ModuleTag
25+ import kotlin.time.Duration.Companion.seconds
2526
2627object 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