added player inventory

This commit is contained in:
2025-11-30 17:06:31 +01:00
parent 46b8c66ff5
commit cfea57e542
9 changed files with 166 additions and 54 deletions

View File

@@ -7,6 +7,7 @@ import de.miaurizius.jgame2d.entity.item.HeartObj;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Arrays;
public class UI {
@@ -18,6 +19,7 @@ public class UI {
ArrayList<Integer> messageCounter = new ArrayList<>();
public String currentDialogue;
public int commandNum;
public int slotCol, slotRow;
public UI(GamePanel panel) {
this.panel = panel;
@@ -103,6 +105,106 @@ public class UI {
}
}
}
public void drawCharStats() {
// DRAW FRAME
final int frameX = panel.tileSize;
final int frameY = panel.tileSize;
final int frameWidth = panel.tileSize*5;
final int frameHeight = panel.tileSize*10;
drawSubWindow(frameX, frameY, frameWidth, frameHeight);
// TEXT
graphics2d.setColor(Color.white);
graphics2d.setFont(graphics2d.getFont().deriveFont(22F));
int textX = frameX + 20;
int textY = frameY + panel.tileSize;
final int lineHeight = 35;
// NAMES
String[] names = {"Level", "Life", "Strength", "Dexterity", "Attack", "Defense", "Exp", "Next Level", "Coins", "Weapon", "Shield"};
for(String name : names) {
graphics2d.drawString(name, textX, textY);
textY += lineHeight + (name.equals("Coins") ? 20 : (name.equals("Weapon") ? 15 : 0));
}
// VALUES
int tailX = (frameX + frameWidth) - 30;
textY = frameY + panel.tileSize;
String[] values = {
String.valueOf(panel.player.level),
(panel.player.life + "/" + panel.player.maxLife),
String.valueOf(panel.player.strength),
String.valueOf(panel.player.dexterity),
String.valueOf(panel.player.attack),
String.valueOf(panel.player.defense),
String.valueOf(panel.player.exp),
String.valueOf(panel.player.nextLevelExp),
String.valueOf(panel.player.coins)
};
for(String value : values) {
textX = getAlignedToRightX(value, tailX);
graphics2d.drawString(value, textX, textY);
textY += lineHeight;
}
graphics2d.drawImage(panel.player.currentWeapon.down1, tailX - panel.tileSize, textY-14, null);
textY += panel.tileSize;
graphics2d.drawImage(panel.player.currentShield.down1, tailX - panel.tileSize, textY-14, null);
}
public void drawInventory() {
// DRAW FRAME
int frameX = panel.tileSize*9;
int frameY = panel.tileSize;
int frameWidth = panel.tileSize*6;
int frameHeight = panel.tileSize*5;
drawSubWindow(frameX, frameY, frameWidth, frameHeight);
// SLOT
final int slotXStart = frameX + 20;
final int slotYStart = frameY + 20;
int slotX = slotXStart;
int slotY = slotYStart;
int slotSize = panel.tileSize+3;
// DRAW PLAYER ITEMS
for(int i = 0; i < panel.player.inventory.size(); i++) {
graphics2d.drawImage(panel.player.inventory.get(i).down1, slotX, slotY, null);
slotX += slotSize;
if (i == 4 || i == 9 || i == 14) {
slotX = slotXStart;
slotY += slotSize;
}
}
// CURSOR
int curserX = slotXStart + (slotSize*slotCol);
int curserY = slotYStart + (slotSize*slotRow);
int curserHeight = panel.tileSize;
int curserWidth = panel.tileSize;
graphics2d.setColor(Color.white);
graphics2d.setStroke(new BasicStroke(3));
graphics2d.drawRoundRect(curserX, curserY, curserWidth, curserHeight, 10, 10);
// DESCRIPTION FRAME
int dFrameX = frameX;
int dFrameY = frameY + frameHeight;
int dFrameWidth = frameWidth;
int dFrameHeight = panel.tileSize*3;
drawSubWindow(dFrameX, dFrameY, dFrameWidth, dFrameHeight);
// DRAW DESCRIPTION
int textX = dFrameX + 20;
int textY = dFrameY + panel.tileSize;
graphics2d.setFont(graphics2d.getFont().deriveFont(23F));
int itemIndex = getItemIndex();
if(itemIndex < panel.player.inventory.size())
for(String line : panel.player.inventory.get(itemIndex).description.split("\n")) {
graphics2d.drawString(line, textX, textY);
textY += 32;
}
}
// GAME STATES
public void drawPauseScreen() {
@@ -169,51 +271,8 @@ public class UI {
if(commandNum == 2) graphics2d.drawString(">", x-panel.tileSize, y);
}
public void drawCharacterScreen() {
// DRAW FRAME
final int frameX = panel.tileSize;
final int frameY = panel.tileSize;
final int frameWidth = panel.tileSize*5;
final int frameHeight = panel.tileSize*10;
drawSubWindow(frameX, frameY, frameWidth, frameHeight);
// TEXT
graphics2d.setColor(Color.white);
graphics2d.setFont(graphics2d.getFont().deriveFont(22F));
int textX = frameX + 20;
int textY = frameY + panel.tileSize;
final int lineHeight = 35;
// NAMES
String[] names = {"Level", "Life", "Strength", "Dexterity", "Attack", "Defense", "Exp", "Next Level", "Coins", "Weapon", "Shield"};
for(String name : names) {
graphics2d.drawString(name, textX, textY);
textY += lineHeight + (name.equals("Coins") ? 20 : (name.equals("Weapon") ? 15 : 0));
}
// VALUES
int tailX = (frameX + frameWidth) - 30;
textY = frameY + panel.tileSize;
String[] values = {
String.valueOf(panel.player.level),
(panel.player.life + "/" + panel.player.maxLife),
String.valueOf(panel.player.strength),
String.valueOf(panel.player.dexterity),
String.valueOf(panel.player.attack),
String.valueOf(panel.player.defense),
String.valueOf(panel.player.exp),
String.valueOf(panel.player.nextLevelExp),
String.valueOf(panel.player.coins)
};
for(String value : values) {
textX = getAlignedToRightX(value, tailX);
graphics2d.drawString(value, textX, textY);
textY += lineHeight;
}
graphics2d.drawImage(panel.player.currentWeapon.down1, tailX - panel.tileSize, textY-14, null);
textY += panel.tileSize;
graphics2d.drawImage(panel.player.currentShield.down1, tailX - panel.tileSize, textY-14, null);
drawCharStats();
drawInventory();
}
public void drawPlayScreen() {
drawPlayerLife();
@@ -232,11 +291,14 @@ public class UI {
return panel.screenWidth / 2 - (int) graphics2d.getFontMetrics().getStringBounds(text, graphics2d).getWidth() / 2;
}
public int getAlignedToRightX(String text, int tailX) {
return tailX - (int) graphics2d.getFontMetrics().getStringBounds(text, graphics2d).getWidth() / 2;
return tailX - (int) graphics2d.getFontMetrics().getStringBounds(text, graphics2d).getWidth();
}
public void addMessage(String text) {
messages.add(text);
messageCounter.add(0);
}
public int getItemIndex() {
return slotCol + slotRow*5;
}
}