public void
     createAsteroid() { // todo as we run lower on asteroids, apply affects to players ship to
                        // simulate entering a planet
   Asteroid asteroid =
       new Asteroid(WorldHandler.createAsteroid(stage.getWorld(), stage.getPlanetHandler()));
   AsteroidActorData data = (AsteroidActorData) asteroid.getActorData();
   data.asteroid = asteroid;
   stage.addAsteroid(asteroid);
   asteroidCount++;
   Gdx.app.log(
       "COUNT",
       "AsteroidLevel Count: "
           + asteroidCount
           + " / "
           + stage.getPlanetHandler().getAsteriodCount());
   if (asteroidCount == stage.getPlanetHandler().getAsteriodCount() && !triggered) {
     triggered = true;
     Gdx.app.log("COUNT", "AsteroidLevel complete");
     if (obstacleTimer != null) obstacleTimer.cancel();
     stage.setUpNormalLevel();
   }
   if (asteroidCount > stage.getPlanetHandler().getAsteriodCount()) {
     asteroid.getActorData().isRemoved = true;
     stage.addDead(asteroid.getBody());
   }
 }
  @SuppressWarnings("Duplicates")
  public void handleContact(Body a, Body b) {
    boolean playerHitAsteroid =
        (WorldHandler.isAsteroid(a) && WorldHandler.isPlayer(b))
            || WorldHandler.isPlayer(a) && WorldHandler.isAsteroid(b);
    boolean bulletHitAsteroid =
        (a.isBullet() && WorldHandler.isAsteroid(b)) || b.isBullet() && WorldHandler.isAsteroid(a);
    boolean playerHitPickup =
        (WorldHandler.isPlayer(a) && WorldHandler.isPickup(b))
            || (WorldHandler.isPickup(a) && WorldHandler.isPlayer(b));

    Body asteroid;
    Body player;
    final Body bullet;
    if (playerHitAsteroid) {
      if (WorldHandler.isAsteroid(a)) {
        asteroid = a;
        player = b;
      } else {
        asteroid = b;
        player = a;
      }
      PlayerActorData p_data = (PlayerActorData) player.getUserData();
      AsteroidActorData a_data = (AsteroidActorData) asteroid.getUserData();
      if (a_data.subHealth(5) <= 0) {
        a_data.isRemoved = true;
        stage.addDead(asteroid);
      }
      asteroid.applyForceToCenter(new Vector2(0, 100f), true);

      if (p_data.subHealth(a_data.getDamage()) <= 0) {
        // game over
        Gdx.app.log("plr", "plr dead"); // todo player death
      }
      if (infoLabel != null) infoLabel.setText("Player HP: " + p_data.getHealth());
      playerHPBar.setBarWidth((int) p_data.getHealth());
    }
    if (bulletHitAsteroid) {
      if (a.isBullet()) {
        bullet = a;
        asteroid = b;
      } else {
        bullet = b;
        asteroid = a;
      }
      ActorData b_data = (ActorData) bullet.getUserData();
      AsteroidActorData a_data = (AsteroidActorData) asteroid.getUserData();

      new Timer()
          .scheduleTask(
              new Timer.Task() {
                @Override
                public void run() {
                  createExplosion(bullet.getPosition().x + 1f, bullet.getPosition().y + 0.7f);
                }
              },
              0.05f);

      b_data.isRemoved = true;
      stage.addDead(bullet);
      playerHandler.addCurrency(2);

      if (a_data.subHealth(WorldHandler.getProjectileDamage(bullet)) <= 0) {
        Gdx.app.log("OGH", "Asteroid dead - Spawn pickup?");
        if (random.nextInt(100) > 70) {
          final Body finalAsteroid = asteroid;
          new Timer()
              .scheduleTask(
                  new Timer.Task() {
                    @Override
                    public void run() {
                      createPickup(finalAsteroid.getPosition().x, finalAsteroid.getPosition().y);
                    }
                  },
                  2);
        }

        stage.addDead(asteroid);
        a_data.isRemoved = true;
      }
    }
    Body pickup;
    if (playerHitPickup) {
      if (WorldHandler.isPlayer(a)) {
        player = a;
        pickup = b;
      } else {
        player = b;
        pickup = a;
      }
      PickupData pData = (PickupData) pickup.getUserData();
      PlayerActorData plData = (PlayerActorData) player.getUserData();

      pData.isRemoved = true;
      stage.addDead(pickup);

      if (pData.getType().equals(Constants.CURRENCY_PICKUP_ASSET_ID))
        playerHandler.addCurrency(100);
      else plData.addHealth(50); // todo magic numbers
    }
  }