@Override
  public void evaluate(EnvironmentEntity entity, float delta) {
    if (numToSpawn == 0) {
      return;
    }

    spawnAccumulator += delta;

    if (spawnAccumulator >= delay) {
      spawnAccumulator = 0;

      GameEntity ge = GameEntity.load(entityName);

      GameTile tile = entity.tile[0][0];
      int x = tile.x;
      int y = tile.y;

      GameTile spawnTile = null;

      for (Global.Direction d : Global.Direction.values()) {
        int nx = x + d.getX();
        int ny = y + d.getY();

        GameTile ntile = tile.level.getGameTile(nx, ny);

        if (ntile != null && ntile.getPassable(ge.getTravelType(), null) && ntile.entity == null) {
          spawnTile = ntile;
          break;
        }
      }

      if (spawnTile != null) {
        spawnTile.addGameEntity(ge);
        numToSpawn--;
      }
    }
  }