@Override
 public void keypressed(GameKeys gk) {
   switch (gk) {
     case DOWN:
       this.option = (this.option + 1) % 2;
       Assets.playSfx("click");
       warning = "";
       break;
     case JUMP:
       Assets.playSfx("confirm");
       makeSelection(this.option);
       break;
     case SELECT:
       break;
     case UP:
       this.option = (this.option - 1 + 2) % 2;
       Assets.playSfx("click");
       warning = "";
       break;
     case START:
       Gdx.app.exit();
       break;
     default:
       break;
   }
 }
  @Override
  public void draw(Player p) {
    cam.setToOrtho(true, HawkthorneGame.WIDTH, HawkthorneGame.HEIGHT);
    cam.zoom = 1f;
    cam.update(true);
    batch.setProjectionMatrix(cam.combined);
    batch.begin();
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
    batch.draw(
        this.background,
        cam.viewportWidth / 2 - this.background.getRegionWidth() / 2,
        cam.viewportHeight / 2 - this.background.getRegionHeight() / 2);

    batch.setColor(0, 0, 0, 1);
    BitmapFont font = Assets.getFont();
    font.setScale(0.8f, -0.8f);
    font.draw(batch, "SERVER", 278, 151);
    font.draw(batch, "CLIENT", 278, 181);
    batch.setColor(1, 1, 1, 1);
    batch.draw(this.arrow, 236, 139 + 30 * this.option);
    String back = Keys.toString(KeyMapping.gameKeyToInt(GameKeys.START)) + ": EXIT GAME";
    String howto =
        "<JUMP> OR " + Keys.toString(KeyMapping.gameKeyToInt(GameKeys.JUMP)) + ": SELECT ITEM";
    font.draw(batch, back, 25, 25);
    font.draw(batch, howto, 25, 55);

    font.setColor(Color.RED);
    font.draw(batch, warning, 60, 305);

    font.setColor(Color.WHITE);
    batch.end();
  }
 @Override
 public void resume() {
   Assets.playMusic(musicFile);
 }
 @Override
 public void pause() {
   Assets.stopMusic(musicFile);
 }
 @Override
 public void hide() {
   super.hide();
   Assets.stopMusic(musicFile);
 }
 @Override
 public void show() {
   super.show();
   Assets.playMusic(musicFile);
 }
public class Lobby extends GenericGamestate {

  private TextureRegion background = new TextureRegion(Assets.loadTexture("menu/pause.png"));
  private int option = 0;
  private TextureRegion arrow = new TextureRegion(Assets.loadTexture("menu/arrow.png"));
  private String musicFile = "daybreak";
  private OrthographicCamera cam =
      new OrthographicCamera(HawkthorneGame.WIDTH, HawkthorneGame.HEIGHT);
  private String warning = "";
  private SpriteBatch batch = context.getBatch();

  @Override
  public void resize(int width, int height) {}

  @Override
  public void show() {
    super.show();
    Assets.playMusic(musicFile);
  }

  @Override
  public void hide() {
    super.hide();
    Assets.stopMusic(musicFile);
  }

  @Override
  public void pause() {
    Assets.stopMusic(musicFile);
  }

  @Override
  public void resume() {
    Assets.playMusic(musicFile);
  }

  @Override
  public void dispose() {}

  @Override
  public void update(float dt) {
    super.update(dt);
  }

  @Override
  public void keypressed(GameKeys gk) {
    switch (gk) {
      case DOWN:
        this.option = (this.option + 1) % 2;
        Assets.playSfx("click");
        warning = "";
        break;
      case JUMP:
        Assets.playSfx("confirm");
        makeSelection(this.option);
        break;
      case SELECT:
        break;
      case UP:
        this.option = (this.option - 1 + 2) % 2;
        Assets.playSfx("click");
        warning = "";
        break;
      case START:
        Gdx.app.exit();
        break;
      default:
        break;
    }
  }

  private void makeSelection(int selection) {
    Gamestate level;
    warning = "";
    if (selection == 0) {
      try {
        HawkthorneGame.MODE = Mode.SERVER;
        Server.getSingleton();
        level = Level.get(HawkthorneGame.START_LEVEL);
        context.setScreen(level);
      } catch (SocketException e) {
        HawkthorneGame.MODE = null;
        warning = "server may already be created";
      }
    } else if (selection == 1) {
      HawkthorneGame.MODE = Mode.CLIENT;
      context.setScreen(context.characterSelection);
    }
  }

  @Override
  public void keyreleased(GameKeys gk) {}

  @Override
  public String getName() {
    // TODO Auto-generated method stub
    return null;
  }

  @Override
  public void draw(Player p) {
    cam.setToOrtho(true, HawkthorneGame.WIDTH, HawkthorneGame.HEIGHT);
    cam.zoom = 1f;
    cam.update(true);
    batch.setProjectionMatrix(cam.combined);
    batch.begin();
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
    batch.draw(
        this.background,
        cam.viewportWidth / 2 - this.background.getRegionWidth() / 2,
        cam.viewportHeight / 2 - this.background.getRegionHeight() / 2);

    batch.setColor(0, 0, 0, 1);
    BitmapFont font = Assets.getFont();
    font.setScale(0.8f, -0.8f);
    font.draw(batch, "SERVER", 278, 151);
    font.draw(batch, "CLIENT", 278, 181);
    batch.setColor(1, 1, 1, 1);
    batch.draw(this.arrow, 236, 139 + 30 * this.option);
    String back = Keys.toString(KeyMapping.gameKeyToInt(GameKeys.START)) + ": EXIT GAME";
    String howto =
        "<JUMP> OR " + Keys.toString(KeyMapping.gameKeyToInt(GameKeys.JUMP)) + ": SELECT ITEM";
    font.draw(batch, back, 25, 25);
    font.draw(batch, howto, 25, 55);

    font.setColor(Color.RED);
    font.draw(batch, warning, 60, 305);

    font.setColor(Color.WHITE);
    batch.end();
  }
}