package coffee.liz.ecs.physics import coffee.liz.ecs.Rect import coffee.liz.ecs.World internal class CollisionTick( private val collisionResolver: CollisionResolver ) { fun runTick(world: World) { // Eh, fast enough for now. Don't need to do any fancy collision detection. There's always later to improve if // it's that bad. world.query(Collidable::class, Position::class).forEach { a -> world.query(Collidable::class, Position::class).forEach { b -> val aHitBoxes = a.get(Position::class).let { pos -> a.get(Collidable::class).hitboxes.map { Rect(pos.vec2, it.dimensions) }} val bHitBoxes = b.get(Position::class).let { pos -> b.get(Collidable::class).hitboxes.map { Rect(pos.vec2, it.dimensions) }} val collisionDetected = aHitBoxes.any { a -> bHitBoxes.any { b -> a.overlaps(b) } } if (collisionDetected) { collisionResolver.resolveCollision(world, a, b) } } } } }