summaryrefslogtreecommitdiff
path: root/composeApp/src/commonMain/kotlin/coffee/liz/ecs/GameLoop.kt
diff options
context:
space:
mode:
Diffstat (limited to 'composeApp/src/commonMain/kotlin/coffee/liz/ecs/GameLoop.kt')
-rw-r--r--composeApp/src/commonMain/kotlin/coffee/liz/ecs/GameLoop.kt25
1 files changed, 25 insertions, 0 deletions
diff --git a/composeApp/src/commonMain/kotlin/coffee/liz/ecs/GameLoop.kt b/composeApp/src/commonMain/kotlin/coffee/liz/ecs/GameLoop.kt
new file mode 100644
index 0000000..713586d
--- /dev/null
+++ b/composeApp/src/commonMain/kotlin/coffee/liz/ecs/GameLoop.kt
@@ -0,0 +1,25 @@
+package coffee.liz.ecs
+
+import kotlin.time.Duration.Companion.nanoseconds
+
+abstract class GameLoop<Outside> {
+ private var world: World<Outside>? = null
+ private var lastUpdate: Long? = null
+
+ fun load(world: World<Outside>) {
+ this.world = world
+ this.lastUpdate = null
+ }
+
+ abstract fun render(world: World<Outside>)
+ abstract fun outsideState(): Outside
+
+ fun loop(now: Long) {
+ val world = this.world ?: error("World not loaded")
+ val outsideState = outsideState()
+ val dt = (now - (lastUpdate ?: now)).nanoseconds
+ world.update(outsideState, dt)
+ render(world)
+ lastUpdate = now
+ }
+} \ No newline at end of file