package org.pokenet.client.ui.frames; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import mdes.slick.sui.Button; import mdes.slick.sui.Frame; import mdes.slick.sui.Label; import mdes.slick.sui.event.ActionEvent; import mdes.slick.sui.event.ActionListener; import mdes.slick.sui.event.MouseEvent; import mdes.slick.sui.event.MouseListener; import org.lwjgl.util.Timer; import org.newdawn.slick.Image; import org.newdawn.slick.gui.GUIContext; import org.newdawn.slick.loading.LoadingList; import org.pokenet.client.GameClient; import org.pokenet.client.backend.FileLoader; import org.pokenet.client.backend.ItemDatabase; import org.pokenet.client.backend.entity.Item; import org.pokenet.client.backend.entity.PlayerItem; import org.pokenet.client.ui.base.ConfirmationDialog; import org.pokenet.client.ui.base.ListBox; /** * The shop dialog * @author Nushio * @author ZombieBear */ public class ShopDialog extends Frame { private Button[] m_categoryButtons; private Label[] m_categoryLabels; private Button[] m_itemButtons; private Button[] m_sellButton; private Label[] m_itemPics; private Label[] m_itemLabels; private Label[] m_itemStockPics; public Timer m_timer; private ListBox m_sellList; List<Item> m_items; private Button m_cancel; private Button m_buy; private Button m_sell; private List<Integer> m_merch = new ArrayList<Integer>(); private HashMap<Integer, Integer> m_stock; /** * Constructor * @param stock */ public ShopDialog(HashMap<Integer, Integer> stock) { for (Integer i : stock.keySet()){ m_merch.add(i); } m_stock = stock; m_timer = new Timer(); m_timer.pause(); setCenter(); getContentPane().setX(getContentPane().getX() - 1); getContentPane().setY(getContentPane().getY() + 1); initGUI(); } /** * Updates the stock * @param stock */ public void updateStock(HashMap<Integer, Integer> stock) { m_stock = stock; initGUI(); } /** * Called when a category for item to buy is selected * @param name */ public void categoryClicked(int name) { m_items = new ArrayList<Item>(); switch(name){ case 0: for (int i : m_merch){ if (PlayerItem.getItem(i).getCategory().equals("Pokeball")) m_items.add(PlayerItem.getItem(i)); } initItems(); break; case 1: for (int i : m_merch){ if (PlayerItem.getItem(i).getCategory().equals("Potions")) m_items.add(PlayerItem.getItem(i)); } initItems(); break; case 2: for (int i : m_merch){ if (PlayerItem.getItem(i).getCategory().equals("Medicine")) m_items.add(PlayerItem.getItem(i)); } initItems(); break; case 3: for (int i : m_merch){ if (PlayerItem.getItem(i).getCategory().equals("Field") || PlayerItem.getItem(i).getCategory().equals("TM")) m_items.add(PlayerItem.getItem(i)); } initItems(); break; } } /** * Initialises the gui when first opened */ public void initGUI(){ m_buy = new Button("Buy"); m_buy.setLocation(0,0); m_buy.setSize(150,320); m_buy.setFont(GameClient.getFontLarge()); m_buy.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { buyGUI(); } }); getContentPane().add(m_buy); m_sell = new Button("Sell"); m_sell.setLocation(151,0); m_sell.setSize(150,320); m_sell.setFont(GameClient.getFontLarge()); m_sell.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { sellGUI(); } }); getContentPane().add(m_sell); m_cancel = new Button("Cancel"); m_cancel.setSize(300,56); m_cancel.setLocation(0,321); m_cancel.setFont(GameClient.getFontLarge()); m_cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cancelled(); } }); getContentPane().add(m_cancel); this.getResizer().setVisible(false); getCloseButton().addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { cancelled(); } } ); setTitle("PokeShop"); setResizable(false); setHeight(400); setWidth(301); pack(); setVisible(true); } /** * Displays the selling item gui */ public void sellGUI() { m_cancel.setVisible(false); String[] m_items = new String[GameClient.getInstance().getOurPlayer().getItems().size()]; for (int i = 0; i < m_items.length; i++) { m_items[i] = GameClient.getInstance().getOurPlayer().getItems().get(i).getItem().getName(); } m_sellList = new ListBox(m_items); m_sellButton = new Button[1]; m_sellButton[0] = new Button("Sell"); m_sellButton[0].setFont(GameClient.getFontLarge()); m_sellButton[0].setSize(getWidth(), 35); m_sellButton[0].setLocation(0, m_cancel.getY() - 35); m_sellButton[0].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ try{ final ConfirmationDialog m_confirm = new ConfirmationDialog("Are you sure you want to sell " + m_sellList.getSelectedName() + " for $" + (ItemDatabase.getInstance().getItem( m_sellList.getSelectedName()).getPrice() / 2) + "?"); m_confirm.addYesListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ GameClient.getInstance().getPacketGenerator().writeTcpMessage("Ss" + ItemDatabase.getInstance() .getItem(m_sellList.getSelectedName()).getId() + ","); GameClient.getInstance().getDisplay().remove(m_confirm); } }); m_confirm.addNoListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ GameClient.getInstance().getDisplay().remove(m_confirm); } }); } catch (Exception e2) {e2.printStackTrace();} } }); m_sellList.setSize(getWidth(), m_sellButton[0].getY()); // Start the UI m_buy.setVisible(false); m_sell.setVisible(false); getContentPane().add(m_sellList); getContentPane().add(m_sellButton[0]); } /** * Displays the item buying GUI */ public void buyGUI() { m_buy.setVisible(false); m_sell.setVisible(false); m_cancel.setVisible(false); m_categoryButtons = new Button[4]; m_categoryLabels = new Label[4]; m_categoryButtons[0] = new Button(" "); LoadingList.setDeferredLoading(true); String respath = System.getProperty("res.path"); if(respath==null) respath=""; try{ m_categoryButtons[0].setImage(new Image(FileLoader.loadFile(respath+"res/ui/shop/pokeball.png"), respath+"res/ui/shop/pokeball.png", false)); }catch(Exception e){ e.printStackTrace(); } LoadingList.setDeferredLoading(false); m_categoryButtons[0].setSize(150, 160); m_categoryButtons[0].setLocation(0,0); m_categoryButtons[0].setFont(GameClient.getFontLarge()); m_categoryButtons[0].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { categoryClicked(0); } }); getContentPane().add(m_categoryButtons[0]); m_categoryLabels[0] = new Label("Pokeballs"); m_categoryLabels[0].setLocation(0,0); m_categoryLabels[0].setGlassPane(true); m_categoryLabels[0].setZIndex(1000); m_categoryLabels[0].setSize(150,10); m_categoryLabels[0].setFont(GameClient.getFontLarge()); getContentPane().add(m_categoryLabels[0]); m_categoryButtons[1] = new Button(" "); LoadingList.setDeferredLoading(true); try{ m_categoryButtons[1].setImage(new Image(FileLoader.loadFile(respath+"res/ui/shop/potion.png"), respath+"res/ui/shop/potion.png", false)); }catch(Exception e){ e.printStackTrace(); } LoadingList.setDeferredLoading(false); m_categoryButtons[1].setSize(150, 160); m_categoryButtons[1].setLocation(151, 0); m_categoryButtons[1].setFont(GameClient.getFontLarge()); m_categoryButtons[1].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { categoryClicked(1); } }); getContentPane().add(m_categoryButtons[1]); m_categoryLabels[1] = new Label("Potions"); m_categoryLabels[1].setLocation(151,0); m_categoryLabels[1].setGlassPane(true); m_categoryLabels[1].setFont(GameClient.getFontLarge()); m_categoryLabels[1].setZIndex(1000); m_categoryLabels[1].setSize(150,10); getContentPane().add(m_categoryLabels[1]); m_categoryButtons[2] = new Button(" "); LoadingList.setDeferredLoading(true); try{ m_categoryButtons[2].setImage(new Image(FileLoader.loadFile(respath+"res/ui/shop/status.png"), respath+"res/ui/shop/status.png", false)); }catch(Exception e){ e.printStackTrace(); } LoadingList.setDeferredLoading(false); m_categoryButtons[2].setSize(150, 160); m_categoryButtons[2].setLocation(0,161); m_categoryButtons[2].setFont(GameClient.getFontLarge()); m_categoryButtons[2].setEnabled(true); m_categoryButtons[2].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { categoryClicked(2); } }); getContentPane().add(m_categoryButtons[2]); m_categoryLabels[2] = new Label("Status Heals"); m_categoryLabels[2].setLocation(0,161); m_categoryLabels[2].setGlassPane(true); m_categoryLabels[2].setFont(GameClient.getFontLarge()); m_categoryLabels[2].setZIndex(1000); m_categoryLabels[2].setSize(150,10); getContentPane().add(m_categoryLabels[2]); m_categoryButtons[3] = new Button(" "); LoadingList.setDeferredLoading(true); try{ m_categoryButtons[3].setImage(new Image(FileLoader.loadFile(respath+"res/ui/shop/field.png"), respath+"res/ui/shop/field.png", false)); }catch(Exception e){ e.printStackTrace(); } LoadingList.setDeferredLoading(false); m_categoryButtons[3].setSize(150, 160); m_categoryButtons[3].setLocation(151,161); m_categoryButtons[3].setFont(GameClient.getFontLarge()); m_categoryButtons[3].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { categoryClicked(3); } }); getContentPane().add(m_categoryButtons[3]); m_categoryLabels[3] = new Label("Field Tools"); m_categoryLabels[3].setLocation(151,161); m_categoryLabels[3].setGlassPane(true); m_categoryLabels[3].setFont(GameClient.getFontLarge()); m_categoryLabels[3].setZIndex(1000); m_categoryLabels[3].setSize(150,10); getContentPane().add(m_categoryLabels[3]); m_cancel = new Button("Cancel"); m_cancel.setSize(300,56); m_cancel.setLocation(0,321); m_cancel.setFont(GameClient.getFontLarge()); m_cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { for(int i=0;i<m_categoryLabels.length;i++){ getContentPane().remove(m_categoryLabels[i]); } for(int i=0;i<m_categoryButtons.length;i++){ getContentPane().remove(m_categoryButtons[i]); } getContentPane().remove(m_cancel); initGUI(); } }); getContentPane().add(m_cancel); this.getResizer().setVisible(false); getCloseButton().addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { cancelled(); } }); setTitle("PokeMart"); setResizable(false); setHeight(400); setWidth(300); pack(); setVisible(true); } private void initItems() { setCenter(); for(int i=0;i<m_categoryButtons.length;i++){ getContentPane().remove(m_categoryButtons[i]); } for(int i=0;i<m_categoryLabels.length;i++){ getContentPane().remove(m_categoryLabels[i]); } getContentPane().remove(m_cancel); m_itemButtons = new Button[m_items.size()]; m_itemPics = new Label[m_items.size()]; m_itemLabels = new Label[m_items.size()]; m_itemStockPics = new Label[m_items.size()]; for(int i = 0;i<m_items.size();i++){ final int itemChosen = m_items.get(i).getId(); final int buttonNumber = i; m_itemButtons[i] = new Button(""); m_itemButtons[i].setSize(300, 50); if(i>0) m_itemButtons[i].setLocation(0,(m_itemButtons[i-1].getY()+51)); else m_itemButtons[i].setLocation(0,0); m_itemButtons[i].setZIndex(0); m_itemButtons[i].setFont(GameClient.getFontLarge()); m_itemButtons[i].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { itemClicked(itemChosen); } }); getContentPane().add(m_itemButtons[i]); String respath = System.getProperty("res.path"); if(respath==null) respath=""; try{ LoadingList.setDeferredLoading(true); m_itemPics[i] = new Label(new Image(FileLoader.loadFile(respath+"res/items/24/" + m_items.get(i).getId() + ".png"), respath+"res/items/24/" + m_items.get(i).getId() + ".png", false)); LoadingList.setDeferredLoading(false); m_itemPics[i].setGlassPane(true); m_itemPics[i].setSize(32,32); if(i>0) m_itemPics[i].setLocation(0,(m_itemPics[i-1].getY()+51)); else m_itemPics[i].setLocation(0,12); m_itemPics[i].setZIndex(1000); getContentPane().add(m_itemPics[i]); }catch(Exception e){ e.printStackTrace(); } try{ LoadingList.setDeferredLoading(true); String stock = "empty"; if(m_stock.get(m_items.get(i).getId()) >= 100 || m_items.size() == -1){ stock = "full"; } else if (m_stock.get(m_items.get(i).getId()) < 100 && m_stock.get(m_items.get(i).getId()) >= 60){ stock = "half"; } else if (m_stock.get(m_items.get(i).getId()) < 60 && m_stock.get(m_items.get(i).getId()) >= 30){ stock = "halfempty"; } m_itemStockPics[i] = new Label(new Image(FileLoader.loadFile(respath+"res/ui/shop/"+stock+".png"), respath+"res/ui/shop/"+stock+".png", false)); LoadingList.setDeferredLoading(false); m_itemStockPics[i].setGlassPane(true); m_itemStockPics[i].setSize(32,32); if(i>0) m_itemStockPics[i].setLocation(260,(m_itemStockPics[i-1].getY()+51)); else m_itemStockPics[i].setLocation(260,12); m_itemStockPics[i].setZIndex(1000); getContentPane().add(m_itemStockPics[i]); }catch(Exception e){ e.printStackTrace(); } m_itemLabels[i] = new Label(m_items.get(i).getName()+" - $"+m_items.get(i).getPrice()); m_itemLabels[i].setSize(200,50); m_itemLabels[i].setFont(GameClient.getFontLarge()); m_itemLabels[i].setZIndex(1200); m_itemLabels[i].setHorizontalAlignment(0); m_itemLabels[i].addMouseListener(new MouseListener() { boolean entered = false; public void mouseReleased(MouseEvent arg0) { if(entered) itemClicked(itemChosen); m_itemButtons[buttonNumber].setEnabled(true); } public void mousePressed(MouseEvent arg0) { m_itemButtons[buttonNumber].setEnabled(false); } public void mouseMoved(MouseEvent arg0) {} public void mouseExited(MouseEvent arg0) { entered = false; } public void mouseEntered(MouseEvent arg0) { entered = true; } public void mouseDragged(MouseEvent arg0) {} }); if(i>0) m_itemLabels[i].setLocation(30,(m_itemLabels[i-1].getY()+51)); else m_itemLabels[i].setLocation(30,0); m_itemLabels[i].updateAppearance(); getContentPane().add(m_itemLabels[i]); } m_cancel = new Button("Cancel"); m_cancel.setSize(300,40); m_cancel.setLocation(0,336); m_cancel.setFont(GameClient.getFontLarge()); m_cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { for(int i=0;i<m_itemButtons.length;i++){ getContentPane().remove(m_itemButtons[i]); } for(int i=0;i<m_itemPics.length;i++){ getContentPane().remove(m_itemPics[i]); } for(int i=0;i<m_itemLabels.length;i++){ getContentPane().remove(m_itemLabels[i]); } for(int i=0;i<m_itemStockPics.length;i++){ getContentPane().remove(m_itemStockPics[i]); } getContentPane().remove(m_cancel); buyGUI(); } }); getContentPane().add(m_cancel); this.getResizer().setVisible(false); getCloseButton().addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { cancelled(); } }); setTitle("Potions"); setResizable(false); setHeight(400); setWidth(300); pack(); // for (int i = 0; i < m_itemButtons.length; i++) { // if (i > 0) // m_itemButtons[i].setLocation(0,m_itemButtons[i-1].getY() + m_itemButtons[i-1].getHeight()); // m_itemButtons[i].setSize(getWidth(),(getHeight() - 60)/ m_itemButtons.length); // } setVisible(true); } public void cancelled() { GameClient.getInstance().getPacketGenerator().writeTcpMessage("Sf"); GameClient.getInstance().getUi().stopShop(); } public void itemClicked(int itemid) { GameClient.getInstance().getPacketGenerator().writeTcpMessage("Sb"+itemid+",1"); } public void pack() { } /** * Centers the frame */ public void setCenter() { int height = (int) GameClient.getInstance().getDisplay().getHeight(); int width = (int) GameClient.getInstance().getDisplay().getWidth(); int x = (width / 2) - 130; int y = (height / 2) - 238; this.setBounds(x, y, 259, 475); } @Override public void update(GUIContext container, int delta) { Timer.tick(); if (m_timer.getTime() >= 3) { try { GameClient.getInstance().getUi().getNPCSpeech().advance(); m_timer.pause(); } catch (Exception e) {} } } }