|
|
@@ -1,4 +1,125 @@
|
|
|
package view.ui;
|
|
|
|
|
|
+import model.Inventory;
|
|
|
+import model.items.ITEM_NAME;
|
|
|
+import model.tiles.InteractiveTileType;
|
|
|
+import util.Translator;
|
|
|
+import util.economy.EconomyData;
|
|
|
+import util.economy.EconomyInfo;
|
|
|
+import view.GamePanel;
|
|
|
+
|
|
|
+import javax.imageio.ImageIO;
|
|
|
+import java.awt.*;
|
|
|
+import java.awt.image.BufferedImage;
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
+
|
|
|
public class ShopView {
|
|
|
+ private GamePanel gamePanel;
|
|
|
+ private List<InteractiveTileType> offers;
|
|
|
+
|
|
|
+ int overlayY = 80;
|
|
|
+ int slotSize = 128;
|
|
|
+ int spacing = 8;
|
|
|
+ int slotCount = 0;
|
|
|
+ int offsetX, offsetY;
|
|
|
+ public ShopView(GamePanel gamePanel){
|
|
|
+ this.gamePanel = gamePanel;
|
|
|
+ offers = EconomyInfo.getOffers();
|
|
|
+ }
|
|
|
+
|
|
|
+ public void drawOverlay(Graphics2D g2) {
|
|
|
+ drawShopOverlay(g2, Translator.translate("menu.shop"));
|
|
|
+
|
|
|
+ drawInventoryOverlay(g2);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void drawInventoryOverlay(Graphics2D g2) {
|
|
|
+ gamePanel.getInventoryView().drawInventoryOverlay(g2);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void drawShopOverlay(Graphics2D g2, String title){
|
|
|
+
|
|
|
+ slotCount = offers.size();
|
|
|
+
|
|
|
+ int overlayWidth = (slotSize + spacing) * slotCount + spacing;
|
|
|
+ int overlayHeight = slotSize + 2* spacing;
|
|
|
+
|
|
|
+ offsetX = gamePanel.getWidth()/2 - overlayWidth/2;
|
|
|
+ offsetY = overlayY + spacing;
|
|
|
+ g2.setColor(new Color(0, 0, 0, 160));
|
|
|
+ g2.fillRoundRect(offsetX, offsetY, overlayWidth, overlayHeight, 25,25);
|
|
|
+ drawTitle(g2, title);
|
|
|
+
|
|
|
+ offsetX += spacing;
|
|
|
+ offsetY += spacing;
|
|
|
+
|
|
|
+ for(InteractiveTileType type : offers){
|
|
|
+ drawOffer(g2, type);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void drawOffer(Graphics2D g2, InteractiveTileType offer){
|
|
|
+ g2.setColor(Color.LIGHT_GRAY);
|
|
|
+ g2.fillRoundRect(offsetX, offsetY, slotSize, slotSize, 25, 25);
|
|
|
+
|
|
|
+ g2.setColor(Color.BLACK);
|
|
|
+ BufferedImage image = getImage("/tiles/" + offer.toString().toLowerCase() + "/" + offer.toString().toLowerCase() + "Test.png");
|
|
|
+ int imageSize = slotSize/2;
|
|
|
+ g2.drawImage(image, offsetX + (slotSize/2 - imageSize/2), offsetY, imageSize, imageSize,null);
|
|
|
+
|
|
|
+ EconomyData data = EconomyInfo.infoOf(offer);
|
|
|
+
|
|
|
+ int stringOffset = slotSize + imageSize;
|
|
|
+ List<Map.Entry<ITEM_NAME, Integer>> entries = new ArrayList<>(data.getCosts().get(1).entrySet());
|
|
|
+
|
|
|
+ for(Map.Entry<ITEM_NAME, Integer> entry : entries){
|
|
|
+ String needed = Translator.translate("item."+entry.getKey()) + ": " + entry.getValue();
|
|
|
+ int strWidth = g2.getFontMetrics().stringWidth(needed);
|
|
|
+ Inventory inventory = gamePanel.gameController.getModel().getInventory();
|
|
|
+
|
|
|
+ if(inventory.hasEnough(entry.getKey(), entry.getValue())){
|
|
|
+ g2.setColor(Color.BLACK);
|
|
|
+ }else{
|
|
|
+ g2.setColor(Color.RED);
|
|
|
+ }
|
|
|
+ g2.drawString(needed, offsetX + (slotSize/2 - strWidth/2), stringOffset);
|
|
|
+ stringOffset += g2.getFontMetrics().getHeight();
|
|
|
+ }
|
|
|
+ offsetX += slotSize + spacing;
|
|
|
+
|
|
|
+ if(offsetX >= gamePanel.getWidth() - slotSize*2){
|
|
|
+ offsetY += slotSize + spacing;
|
|
|
+ offsetX = slotSize + slotSize/2;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void drawTitle(Graphics2D g2, String title){
|
|
|
+ Font defaultF = g2.getFont();
|
|
|
+ g2.setFont(new Font("Arial", Font.BOLD, 50));
|
|
|
+
|
|
|
+ FontMetrics fm = g2.getFontMetrics();
|
|
|
+ int msgWidth = fm.stringWidth(title);
|
|
|
+ g2.setColor(new Color(0, 0, 0, 100));
|
|
|
+ int offset = 100;
|
|
|
+
|
|
|
+ g2.fillRoundRect(gamePanel.screenWidth /2 - msgWidth /2 - offset/2, 40 - fm.getHeight()/2, msgWidth + offset, 50, 25, 25);
|
|
|
+ g2.setColor(Color.WHITE);
|
|
|
+ g2.drawString(title, gamePanel.screenWidth / 2 - msgWidth / 2, 50);
|
|
|
+ g2.setFont(defaultF);
|
|
|
+ }
|
|
|
+
|
|
|
+ public BufferedImage getImage(String imagePath){
|
|
|
+ try {
|
|
|
+ return ImageIO.read(getClass().getResourceAsStream(imagePath));
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
}
|