package view; import model.Inventory; import model.items.Item; import util.TextUtil; import util.Translator; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; public class InventoryView { private Inventory inventory; int overlayX = 20; int overlayY = 20; int slotSize = 48; int slotSpacing = 8; int slotCount = 0; public InventoryView(Inventory inventory){ this.inventory = inventory; } public void drawInventoryOverlay(Graphics2D g2) { slotCount = inventory.getUniqueItemsCount(); int overlayWidth = slotSize + 2* slotSpacing; int overlayHeight = (slotSize + slotSpacing) * slotCount + slotSpacing; g2.setColor(new Color(0, 0, 0, 160)); g2.fillRoundRect(overlayX, overlayY, overlayWidth, overlayHeight, 15, 15); for (int i = 0; i < slotCount; i++) { drawSlot(g2, i); } } private void drawSlot(Graphics2D g2, int slot){ Item item = inventory.getItemList().get(slot); if(item.isSelected()){ g2.setColor(Color.WHITE); }else{ g2.setColor(Color.LIGHT_GRAY); } int x = overlayX + slotSpacing; int y = overlayY + slotSpacing + slot * (slotSize + slotSpacing); g2.fillRoundRect(x, y, slotSize, slotSize, 10, 10); g2.setColor(Color.DARK_GRAY); String itemName = item.getItemName().toString(); int offset = 20; g2.drawImage(getImage("/items/" + itemName + ".png"), x + offset/2, y + offset/2, slotSize - offset, slotSize -offset, null); //g2.drawString(Translator.translate("item."+itemName), x + slotSpacing/4, y + slotSize / 2 + 5); FontMetrics fm = g2.getFontMetrics(); String amount = "" + item.getCount(); int amountWidth = fm.stringWidth(amount); g2.drawString( amount , x + slotSize - amountWidth - 3, y + slotSize - 3); g2.setColor(Color.LIGHT_GRAY); } public BufferedImage getImage(String imagePath){ try { return ImageIO.read(getClass().getResourceAsStream(imagePath)); } catch (IOException e) { e.printStackTrace(); } return null; } public int getClickedInventorySlot(int mouseX, int mouseY) { for (int i = 0; i < slotCount; i++) { int x = overlayX + slotSpacing; int y = overlayY + slotSpacing + i * (slotSize + slotSpacing); int width = slotSize; int height = slotSize; if (mouseX >= x && mouseX <= x + width && mouseY >= y && mouseY <= y + height) { return i; // Slot i was clicked } } return -1; // No slot was clicked } }