Пример #1
0
  @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));
      }
    }
  }