Package org.pokenet.client.ui.frames

Source Code of org.pokenet.client.ui.frames.ShopDialog

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) {}
    }
  }
}

TOP

Related Classes of org.pokenet.client.ui.frames.ShopDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.