@Override
  public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
    if (!end) {
      g.drawImage(background, 0, 0);
      g.drawImage(currentItem.getItemImage(), 75, fixed_y + 25);
      g.setFont(titleFont.get());
      g.drawString("> " + start_message + "" + ticker, header_x, header_y);
      g.drawImage(scorebackground, 0, 0);
      g.setFont(mainFont.get());
      g.drawString("" + winString, header_x, header_y + 30);
      g.drawImage(player1.getPlayerCharacter().getCharacterImage(), 13, 13);
      g.drawImage(player2.getPlayerCharacter().getCharacterImage(), 13, 55);
      g.drawString("" + player1.getName(), 65, 22);
      g.drawString("" + player2.getName(), 65, 64);
      g.drawString("" + player1.getScore(), 204, 22);
      g.drawString("" + player2.getScore(), 204, 64);

      g.setFont(timerFont.get());
      if (timer < 100) g.drawString("TIME: 0" + timer, timer_x, timer_y);
      else if (timer < 10) g.drawString("TIME: 00" + timer, timer_x, timer_y);
      else g.drawString("TIME: " + timer, timer_x, timer_y);
      g.setFont(timerMFont.get());
      if (timer2 < 100) g.drawString("0" + timer2, timer_x + 145, timer_y - 10);
      else if (timer2 < 10) g.drawString("00" + timer2, timer_x + 145, timer_y - 10);
      else g.drawString("" + timer2, timer_x + 145, timer_y - 10);

      g.setFont(readyFont.get());
      if (ready) {
        if (playerID == 1) g.drawString("FINISHED", 92, 19);
        else g.drawString("FINISHED", 92, 61);
      }
      if (otherPlayerReady == 1) {
        if (otherPlayerID == 1) g.drawString("FINISHED", 92, 19);
        else g.drawString("FINISHED", 92, 61);
      }
    } else if (end) {
      g.drawImage(background, 0, 0);
      g.setFont(titleFont.get());
      g.drawString("> " + start_message + "" + ticker, header_x, header_y);
      g.setFont(mainFont.get());
      g.drawString("" + winString, header_x, header_y + 30);
      g.drawImage(currentItem.getItemImage(), 75, fixed_y + 25);
      g.drawImage(scorebackground, 0, 0);
      g.setFont(mainFont.get());
      g.drawImage(player1.getPlayerCharacter().getCharacterImage(), 13, 13);
      g.drawImage(player2.getPlayerCharacter().getCharacterImage(), 13, 55);
      g.drawString("" + player1.getName(), 65, 22);
      g.drawString("" + player2.getName(), 65, 64);
      g.drawString("" + player1.getScore(), 204, 22);
      g.drawString("" + player2.getScore(), 204, 64);
      g.setFont(readyFont.get());
      if (ready) {
        if (playerID == 1) g.drawString("FINISHED", 92, 19);
        else g.drawString("FINISHED", 92, 61);
      }
      if (otherPlayerReady == 1) {
        if (otherPlayerID == 1) g.drawString("FINISHED", 92, 19);
        else g.drawString("FINISHED", 92, 61);
      }
      g.setFont(timerFont.get());
      if (timer < 100) g.drawString("TIME: 0" + timer, timer_x, timer_y);
      else if (timer < 10) g.drawString("TIME: 00" + timer, timer_x, timer_y);
      else g.drawString("TIME: " + timer, timer_x, timer_y);
      g.setFont(timerMFont.get());
      if (timer2 < 100) g.drawString("0" + timer2, timer_x + 145, timer_y - 10);
      else if (timer2 < 10) g.drawString("00" + timer2, timer_x + 145, timer_y - 10);
      else g.drawString("" + timer2, timer_x + 145, timer_y - 10);

      if (finished) {
        g.drawImage(background, 0, 0);
        g.setFont(titleFont.get());
        g.drawString("> " + start_message + "" + ticker, 25, 25);
        g.drawString("" + timer, 750, 50);
        g.drawImage(currentItem.getItemImage(), 75, 125);
        g.drawImage(new Image("simple/playerbg.png"), 146, 435);
        g.drawImage(new Image("simple/playerbg.png"), 506, 435);
        g.drawImage(player1.getPlayerCharacter().getCharacterImage(), 146, 435);
        g.drawImage(player2.getPlayerCharacter().getCharacterImage(), 506, 435);
        g.setFont(mainFont.get());
        g.drawString(winString, 50, 60);
        g.drawString("" + player1.getName(), 198, 444);
        g.drawString("" + player2.getName(), 558, 444);
      }
    }
  }
  @Override
  public void enter(GameContainer gc, StateBasedGame sbg) throws SlickException {
    super.enter(gc, sbg);
    client = HRRUClient.conn.getClient();
    rootPane.removeAllChildren();
    itemPanel.removeAllChildren();

    end = false;
    finished = false;
    resume = false;
    ready = false;
    otherPlayerReady = 0;
    currentBid = 0;
    amountWon = 0;
    maximumBid = 0;
    clock2 = 0;
    clock3 = 0;
    timer = 60;
    timer2 = 999;
    overallTimer = 0;
    otherPlayerBid = 0;
    otherPlayerWon = 0;
    winCheck = false;

    start_message = "";
    full_start_message = "MAKE YOUR BID...";
    full_start_counter = 0;
    ticker = "";
    tickerBoolean = true;
    winString = "Think carefully.";

    // Testing
    /*
    Character characters[] = (new CharacterSheet()).getCharacters();
    player1 = new Player("player1");
    player2 = new Player("player2");
    player1.setPlayerCharacterID(2);
    player1.setPlayerCharacter(characters[2]);
    player2.setPlayerCharacter(characters[4]);
    player2.setPlayerCharacterID(4);
    player1.setScore(5000);
    HRRUClient.cs.setState(6);
    HRRUClient.cs.setP1(player1);
    HRRUClient.cs.setP2(player2);
    HRRUClient.cs.setPlayer(1);
    */

    // Retrieve player information
    player1 = HRRUClient.cs.getP1();
    player2 = HRRUClient.cs.getP2();
    playerID = HRRUClient.cs.getPlayer();
    if (playerID == 1) {
      player = player1;
      otherPlayer = player2;
      otherPlayerID = 2;
      maximumBid = player.getScore();
    } else {
      player = player2;
      otherPlayer = player1;
      otherPlayerID = 1;
      maximumBid = player.getScore();
    }

    // setup description
    descriptionModel.setHtml(
        "<html><body><div><p style='text-align: center;'>"
            + "You and "
            + otherPlayer.getName()
            + " are both "
            + "<a style='font-family: name;'>bidding</a> for the item using your <a style='font-family: name;'>points</a>.</p>"
            + "<p style='margin-top: 10px; text-align: center;'>The player with the <a style='font-family: name;'>highest bid</a> wins the item for the <a style='font-family: name;'>cost of their winning bid.</a></p>"
            + "<p style='margin-top: 10px; text-align: center;'>The highest bidder will then win the <a style='font-family: name;'>value</a> of the item in <a style='font-family: name;'>points!</a></p>"
            + "</div></body></html>");

    // Setup new item variables
    item_id = HRRUClient.cs.getSecondary_id();
    currentItem = items[item_id];
    itemValue = HRRUClient.cs.getSecondary_value();

    itemPanel.setPosition(50, fixed_y);
    lblItemName = new Label(currentItem.getName());
    lblItemValue = new Label("" + itemValue);
    itemDescriptionModel.setText(currentItem.getDescription());
    lblItemName.setTheme("itematari16");
    lblItemValue.setTheme("itematari16");
    itemDescription.setTheme("questiontextarea");

    DialogLayout.Group hItemLabel = itemPanel.createSequentialGroup(lItemName);
    DialogLayout.Group hItemResult = itemPanel.createSequentialGroup(lblItemName);
    DialogLayout.Group hDescriptionLabel = itemPanel.createSequentialGroup(lDescription);
    DialogLayout.Group hDescriptionResult = itemPanel.createSequentialGroup(itemDescription);
    DialogLayout.Group hItemValueLabel = itemPanel.createSequentialGroup(lItemValue);
    DialogLayout.Group hItemValueResult = itemPanel.createSequentialGroup(lblItemValue);

    itemPanel.setHorizontalGroup(
        itemPanel
            .createParallelGroup()
            .addGroup(hItemLabel)
            .addGroup(hItemResult)
            .addGroup(hDescriptionLabel)
            .addGroup(hDescriptionResult)
            .addGroup(hItemValueLabel)
            .addGroup(hItemValueResult));

    itemPanel.setVerticalGroup(
        itemPanel
            .createSequentialGroup()
            .addWidget(lItemName)
            .addWidget(lblItemName)
            .addGap(30)
            .addWidget(lDescription)
            .addWidget(itemDescription)
            .addGap(60)
            .addWidget(lItemValue)
            .addWidget(lblItemValue));

    lblConfirmation.setPosition((gcw / 2) - lblConfirmation.getWidth() / 2, fixed_y + 320);
    // Setup bidding GUI
    vaBid.setMinMaxValue(0, maximumBid);
    vaBid.setValue(0);
    vaBid.setVisible(true);
    btnSubmit.setVisible(true);
    btnYes.setVisible(false);
    btnNo.setVisible(false);
    lblConfirmation.setVisible(false);
    p1ResultPanel.setVisible(false);
    p2ResultPanel.setVisible(false);
    description.setVisible(true);
    rootPane.add(description);
    rootPane.add(p1ResultPanel);
    rootPane.add(p2ResultPanel);
    rootPane.add(btnYes);
    rootPane.add(btnNo);
    rootPane.add(lblConfirmation);
    rootPane.add(btnSubmit);
    rootPane.add(vaBid);
    rootPane.add(itemPanel);
  }