private void drawEnemyMessage(Graphics2D g2d) { Font messageFont = new Font("Arial", Font.BOLD, 15); g2d.setFont(messageFont); if (enemyMoveChosen) { String text = ""; if (drawMoveApplication) { text = effectMessage; } else { text = enemy.getName() + " uses " + lastEnemyMove.getName() + " on " + MainCharacter.characterName + "!"; } ArrayList<String> lines = new ArrayList<>(); int width = (int) (messageFont.getStringBounds(text, g2d.getFontRenderContext()).getWidth()); if (width > cardButton.getWidth() * 2 + 40) { String[] split = text.split("\\s+"); int tempWidth = 0; int maxWidth = 0; String line = ""; for (int i = 0; i < split.length; i++) { tempWidth += (int) (messageFont .getStringBounds(split[i] + "_", g2d.getFontRenderContext()) .getWidth()); if (tempWidth > cardButton.getWidth() * 2 + 40) { tempWidth = (int) (messageFont .getStringBounds(split[i] + "_", g2d.getFontRenderContext()) .getWidth()); lines.add(line); line = split[i] + " "; } else { line = line + split[i] + " "; } if (tempWidth > maxWidth) { maxWidth = tempWidth; } } lines.add(line); } else { lines.add(text); } for (int i = 0; i < lines.size(); i++) { g2d.drawString(lines.get(i), cardButton.getX(), cardButton.getY() + 15 + 30 * i); } } else { g2d.drawString("The Enemy is deciding", cardButton.getX(), cardButton.getY() + 15); g2d.drawString("their move...", cardButton.getX(), cardButton.getY() + 15 + 30); } }
@Override public void draw(Graphics2D g2d) { // After updating we will draw all the objects to the screen g2d.setColor(Color.WHITE); g2d.fillRect(0, 0, windowWidth, windowHeight); g2d.setColor(Color.BLACK); Font font = new Font("Arial", Font.BOLD, 30); g2d.setFont(font); int textWidth = (int) (font.getStringBounds("You Are Now In Battle State", g2d.getFontRenderContext()) .getWidth()); g2d.drawString( "You Are Now In Battle State", windowWidth / 2 - textWidth / 2, windowHeight / 2); // Draw the battle images of the enemy and MainCharacter g2d.drawImage( mainCharacterImage, 60, 3 * windowHeight / 4 - 2 * 60, mainCharacterImage.getWidth() * 2, mainCharacterImage.getHeight() * 2, null); g2d.drawImage( enemyImage, windowWidth - 60 - enemyImage.getWidth(), 60, enemyImage.getWidth(), enemyImage.getHeight(), null); // Draw an action box at the bottom where we decide our actions on each turn g2d.setColor(Color.CYAN); g2d.fillRect(0, 3 * windowHeight / 4, windowWidth, windowHeight / 4 + 2); // Draw the hp and mp bars of the MainCharacter and the Enemy g2d.setColor(Color.BLACK); g2d.drawRect(0, 3 * windowHeight / 4, windowWidth, windowHeight / 4 + 2); Font hpFont = new Font("Arial", Font.BOLD, 15); g2d.setFont(hpFont); String text = "Health: " + String.valueOf(StartGameState.character.health) + "/" + String.valueOf(StartGameState.character.maxHealth); textWidth = (int) (hpFont.getStringBounds(text, g2d.getFontRenderContext()).getWidth()); g2d.drawString( text, 60 + mainCharacterImage.getWidth() * 2 + 45, 3 * windowHeight / 4 - 30 - 15 - 20); text = "Mana: " + String.valueOf(StartGameState.character.mana) + "/" + String.valueOf(StartGameState.character.maxMana); g2d.drawString(text, 60 + mainCharacterImage.getWidth() * 2 + 45, 3 * windowHeight / 4 - 30); text = MainCharacter.characterName; g2d.drawString( text, 60 + mainCharacterImage.getWidth() * 2 + 45, 3 * windowHeight / 4 - 30 - 2 * 15 - 2 * 20); g2d.setColor(Color.GRAY); g2d.fillRoundRect( 60 + mainCharacterImage.getWidth() * 2 + 45 + textWidth + 20, 3 * windowHeight / 4 - 45 - 15 - 20, 100, 15, 3, 3); g2d.fillRoundRect( 60 + mainCharacterImage.getWidth() * 2 + 45 + textWidth + 20, 3 * windowHeight / 4 - 45, 100, 15, 3, 3); g2d.setColor(Color.GREEN); g2d.fillRoundRect( 60 + mainCharacterImage.getWidth() * 2 + 45 + textWidth + 20, 3 * windowHeight / 4 - 45 - 15 - 20, (int) (((float) StartGameState.character.health / (float) StartGameState.character.maxHealth) * 100), 15, 3, 3); g2d.setColor(Color.BLUE); g2d.fillRoundRect( 60 + mainCharacterImage.getWidth() * 2 + 45 + textWidth + 20, 3 * windowHeight / 4 - 45, (int) (((float) StartGameState.character.mana / (float) StartGameState.character.maxMana) * 100), 15, 3, 3); g2d.setColor(Color.BLACK); g2d.drawRoundRect( 60 + mainCharacterImage.getWidth() * 2 + 45 + textWidth + 20, 3 * windowHeight / 4 - 45 - 15 - 20, 100, 15, 3, 3); g2d.drawRoundRect( 60 + mainCharacterImage.getWidth() * 2 + 45 + textWidth + 20, 3 * windowHeight / 4 - 45, 100, 15, 3, 3); // Enemy health and mana bars text = "Health: " + String.valueOf(enemy.health) + "/" + String.valueOf(enemy.maxHealth); textWidth = (int) (hpFont.getStringBounds(text, g2d.getFontRenderContext()).getWidth()); g2d.drawString( text, windowWidth - 60 - enemyImage.getWidth() - 45 - 100 - 20 - textWidth, 60 + 15); text = "Mana: " + String.valueOf(enemy.mana) + "/" + String.valueOf(enemy.maxMana); g2d.drawString( text, windowWidth - 60 - enemyImage.getWidth() - 45 - 100 - 20 - textWidth, 60 + 2 * 15 + 20); text = enemy.getName(); g2d.drawString( text, windowWidth - 60 - enemyImage.getWidth() - 45 - 100 - 20 - textWidth, 60 - 20); g2d.setColor(Color.GRAY); g2d.fillRoundRect(windowWidth - 60 - enemyImage.getWidth() - 45 - 100, 60, 100, 15, 3, 3); g2d.fillRoundRect( windowWidth - 60 - enemyImage.getWidth() - 45 - 100, 60 + 15 + 20, 100, 15, 3, 3); g2d.setColor(Color.GREEN); g2d.fillRoundRect( windowWidth - 60 - enemyImage.getWidth() - 45 - 100, 60, (int) (((float) enemy.health / (float) enemy.maxHealth) * 100), 15, 3, 3); g2d.setColor(Color.BLUE); g2d.fillRoundRect( windowWidth - 60 - enemyImage.getWidth() - 45 - 100, 60 + 15 + 20, (int) (((float) enemy.mana / (float) enemy.maxMana) * 100), 15, 3, 3); g2d.setColor(Color.BLACK); g2d.drawRoundRect(windowWidth - 60 - enemyImage.getWidth() - 45 - 100, 60, 100, 15, 3, 3); g2d.drawRoundRect( windowWidth - 60 - enemyImage.getWidth() - 45 - 100, 60 + 15 + 20, 100, 15, 3, 3); // Draw the player's hand and the current card int x = drawButton.getX() + drawButton.getWidth() + 40; int y = drawButton.getY() + 10; int i = 0; if (deckCount < MainCharacter.deck.size()) { g2d.drawImage(cardBack, 3 * windowWidth / 4 - 15 - cardBack.getWidth(), y, null); } if (hand.size() > 0) { int cardSpacing = cardWidth / hand.size(); for (Card card : hand.values()) { if (i != cardScroller.getCountX() - 1) { card.draw(g2d, x + i * (cardSpacing), y, 0, 0); } i++; } Card current = hand.getIndexed(cardScroller.getCountX() - 1); current.draw(g2d, x + (cardScroller.getCountX() - 1) * (cardSpacing), y - 20, 0, 0); // If it is MainCharacter turn then we draw the actions in the action box g2d.setFont(new Font("Arial", Font.BOLD, 20)); g2d.setColor(Color.BLACK); int explanationWidth = windowWidth / 4 - 25; g2d.drawString(current.getName(), 3 * windowWidth / 4 + 15, cardButton.getY()); Font explanationFont = new Font("Arial", Font.BOLD, 10); g2d.setFont(explanationFont); ArrayList<String> lines = new ArrayList<>(); // Determines width and height of only the text String dialog = current.getExplanation(); int width = (int) (explanationFont.getStringBounds(dialog, g2d.getFontRenderContext()).getWidth()); if (width > explanationWidth) { String[] split = dialog.split("\\s+"); int tempWidth = 0; int maxWidth = 0; String line = ""; for (i = 0; i < split.length; i++) { tempWidth += (int) (explanationFont .getStringBounds(split[i] + "_", g2d.getFontRenderContext()) .getWidth()); if (tempWidth > explanationWidth) { tempWidth = (int) (explanationFont .getStringBounds(split[i] + "_", g2d.getFontRenderContext()) .getWidth()); lines.add(line); line = split[i] + " "; } else { line = line + split[i] + " "; } if (tempWidth > maxWidth) { maxWidth = tempWidth; } } lines.add(line); } else { lines.add(dialog); } for (i = 0; i < lines.size(); i++) { g2d.drawString( lines.get(i), 3 * windowWidth / 4 + 15, cardButton.getY() + (i + 1) * (10 + 4)); } g2d.setFont(hpFont); String[] effects = current.getEffectStrings(); for (i = 0; i < effects.length; i++) { g2d.drawString( effects[i], 3 * windowWidth / 4 + 15, cardButton.getY() + (lines.size()) * (10 + 4) + (i + 1) * (5 + 15)); } g2d.drawString( "Mana Cost: " + String.valueOf(current.getManaCost()), 3 * windowWidth / 4 + 15, cardButton.getY() + (lines.size()) * (10 + 4) + (i + 1) * (15 + 5)); } if (drawNoMana) { g2d.setFont(new Font("Arial", Font.BOLD, 15)); g2d.drawString("You don't have", cardButton.getX(), cardButton.getY() + 15); g2d.drawString("enough mana!", cardButton.getX(), cardButton.getY() + 2 * 15 + 10); } else if (drawNoCards) { g2d.setFont(new Font("Arial", Font.BOLD, 15)); g2d.drawString("You are out of", cardButton.getX(), cardButton.getY() + 15); g2d.drawString("cards to draw!", cardButton.getX(), cardButton.getY() + 2 * 15 + 10); } else if (drawItemUsed) { g2d.setFont(new Font("Arial", Font.BOLD, 15)); g2d.drawString("You have used", cardButton.getX(), cardButton.getY() + 15); g2d.drawString( itemMenu.getLastItem().name + "!", cardButton.getX(), cardButton.getY() + 2 * 15 + 10); } else if (turn == 0 && drawParalyzed) { g2d.setFont(new Font("Arial", Font.BOLD, 15)); g2d.drawString("You cannot move,", cardButton.getX(), cardButton.getY() + 15); g2d.drawString("you're paralyzed!", cardButton.getX(), cardButton.getY() + 2 * 15 + 10); } else if (turn == 1 && drawParalyzed) { Font messageFont = new Font("Arial", Font.BOLD, 15); g2d.setFont(messageFont); text = enemy.getName() + " cannot move, they're paralyzed!"; ArrayList<String> lines = new ArrayList<>(); int width = (int) (messageFont.getStringBounds(text, g2d.getFontRenderContext()).getWidth()); if (width > cardButton.getWidth() * 2 + 40) { String[] split = text.split("\\s+"); int tempWidth = 0; int maxWidth = 0; String line = ""; for (i = 0; i < split.length; i++) { tempWidth += (int) (messageFont .getStringBounds(split[i] + "_", g2d.getFontRenderContext()) .getWidth()); if (tempWidth > cardButton.getWidth() * 2 + 40) { tempWidth = (int) (messageFont .getStringBounds(split[i] + "_", g2d.getFontRenderContext()) .getWidth()); lines.add(line); line = split[i] + " "; } else { line = line + split[i] + " "; } if (tempWidth > maxWidth) { maxWidth = tempWidth; } } lines.add(line); } else { lines.add(text); } for (i = 0; i < lines.size(); i++) { g2d.drawString(lines.get(i), cardButton.getX(), cardButton.getY() + 15 + 30 * i); } } else if (turn == 0 && turnState == 4) { g2d.setFont(new Font("Arial", Font.BOLD, 15)); g2d.drawString("You try to", cardButton.getX(), cardButton.getY() + 15); g2d.drawString("run away...", cardButton.getX(), cardButton.getY() + 2 * 15 + 10); } else if (turn == 0 && turnState == 5) { Font messageFont = new Font("Arial", Font.BOLD, 15); g2d.setFont(messageFont); if (drawMoveApplication) { text = effectMessage; } else { text = "You have used " + playedCard.getName() + " on " + enemy.getName() + "!"; } ArrayList<String> lines = new ArrayList<>(); int width = (int) (messageFont.getStringBounds(text, g2d.getFontRenderContext()).getWidth()); if (width > cardButton.getWidth() * 2 + 40) { String[] split = text.split("\\s+"); int tempWidth = 0; int maxWidth = 0; String line = ""; for (i = 0; i < split.length; i++) { tempWidth += (int) (messageFont .getStringBounds(split[i] + "_", g2d.getFontRenderContext()) .getWidth()); if (tempWidth > cardButton.getWidth() * 2 + 40) { tempWidth = (int) (messageFont .getStringBounds(split[i] + "_", g2d.getFontRenderContext()) .getWidth()); lines.add(line); line = split[i] + " "; } else { line = line + split[i] + " "; } if (tempWidth > maxWidth) { maxWidth = tempWidth; } } lines.add(line); } else { lines.add(text); } for (i = 0; i < lines.size(); i++) { g2d.drawString(lines.get(i), cardButton.getX(), cardButton.getY() + 15 + 30 * i); } } else if (turn == 0) { drawActionBox(g2d); } else if (turn == 1) { drawEnemyMessage(g2d); } else if (turn == 2) { drawVictoryMessage(g2d); } else if (turn == 3) { drawLossMessage(g2d); } }