package coffee.liz.ecs.physics import coffee.liz.ecs.Entity import coffee.liz.ecs.TickedSystem import coffee.liz.ecs.World import kotlin.time.Duration internal fun interface CollisionResolver { fun resolveCollision(world: World, a: Entity, b: Entity) } abstract class PhysicsSystem( physicsTickRate: Duration ): TickedSystem(physicsTickRate), CollisionResolver { private val integrationTick = IntegrationTick() private val collisionTick = CollisionTick(this) abstract override fun resolveCollision(world: World, a: Entity, b: Entity) override fun update(world: World, state: Outside, ticks: Int) { for (tick in 1..ticks) { collisionTick.runTick(world) integrationTick.runTick(world) } } }