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 } } }