package coffee.liz.ecs import kotlin.time.Duration.Companion.nanoseconds abstract class GameLoop { private var world: World? = null private var lastUpdate: Long? = null fun load(world: World) { this.world = world this.lastUpdate = null } abstract fun render(world: World) 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 } }