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