@Override public void run() { EntityManager em = world.getEntityManager(); for (CoreEntity e1 : em.getEntity(Collider.class)) { Point circle1pos = em.getComponent(e1, Position.class).position; CollisionCircle circle1 = em.getComponent(e1, CollisionCircle.class); for (CoreEntity e2 : em.getEntityAll(CollisionCircle.class)) { if (e1 == e2) continue; CollisionCircle circle2 = em.getComponent(e2, CollisionCircle.class); Point col = circle2.getClosest(circle1pos); boolean inside = circle2.isInside(circle1pos); if (circle1pos.dist(col) < circle1.getRadius() || inside) handleCollision(em, new CollisionEvent(e1, e2, col, inside)); } for (CoreEntity e2 : em.getEntityAll(CollisionPolygon.class)) { CollisionPolygon poly = em.getComponent(e2, CollisionPolygon.class); Point col = poly.getClosest(circle1pos); boolean inside = poly.isInside(circle1pos); if (circle1pos.dist(col) < circle1.getRadius() || inside) handleCollision(em, new CollisionEvent(e1, e2, col, inside)); } } }