package coffee.liz.ecs import kotlin.time.Duration abstract class TickedSystem( protected val tickRate: Duration, private var lastTick: Duration = Duration.ZERO ): System { abstract fun update(world: World, state: Outside, ticks: Int) override fun update(world: World, state: Outside, deltaTime: Duration) { val ticks = ((deltaTime - lastTick) / tickRate).toInt() lastTick = if (ticks == 0) (lastTick + deltaTime).also { update(world, state, ticks) } else Duration.ZERO } }