package org.pokenet.client.ui.frames;
import java.io.FileNotFoundException;
import java.io.InputStream;
import mdes.slick.sui.Button;
import mdes.slick.sui.Container;
import mdes.slick.sui.Frame;
import mdes.slick.sui.Label;
import mdes.slick.sui.ToggleButton;
import mdes.slick.sui.event.ActionEvent;
import mdes.slick.sui.event.ActionListener;
import org.newdawn.slick.Color;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
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.entity.Pokemon;
import org.pokenet.client.ui.base.ComboBox;
import org.pokenet.client.ui.base.ProgressBar;
/**
* Storage Box
*
* @author ZombieBear
*
*/
public class PokeStorageBoxFrame extends Frame {
private ToggleButton[] m_buttons = new ToggleButton[30];
private int[] m_pokeNums = new int[30];
private int m_buttonChosen = 0;
private ComboBox m_changeBox;
private Button m_switchPoke, m_close, m_release;
private int m_boxNum, m_boxIndex;
/**
* Default constructor
*
* @param boxIndex
* @param pokes
* @throws SlickException
*/
public PokeStorageBoxFrame(int[] pokes){
getContentPane().setX(getContentPane().getX() - 1);
getContentPane().setY(getContentPane().getY() + 1);
m_pokeNums = pokes;
m_boxIndex = 0;
m_boxNum = m_boxIndex + 1;
initGUI();
setSize(231, 248);
setLocation(400 - getWidth() / 2, 300 - getHeight() / 2);
setTitle("Box Number " + String.valueOf(m_boxNum));
getTitleBar().getCloseButton().setVisible(false);
setResizable(false);
setVisible(true);
}
/**
* Loads pokemon images in buttons
*/
public void loadImages() {
LoadingList.setDeferredLoading(true);
InputStream f;
for (int i = 0; i <= 29; i++) {
m_buttons[i].setImage(null);
try {
if(m_pokeNums[i] >= 0) {
f = FileLoader.loadFile(Pokemon
.getIconPathByIndex(m_pokeNums[i] + 1));
m_buttons[i].setImage(new Image(f, "boxPoke" + i + " " + Pokemon
.getIconPathByIndex(m_pokeNums[i] + 1), false));
}
} catch (SlickException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
LoadingList.setDeferredLoading(false);
}
/**
* Toggles the chosen button and untoggles the others
*
* @param x
*/
public void setChoice(int x) {
untoggleButtons();
m_buttons[x].setSelected(true);
m_switchPoke.setEnabled(true);
m_release.setEnabled(true);
m_buttonChosen = x;
m_boxIndex = x;
}
/**
* Initializes the interface
*/
public void initGUI() {
int buttonX = 7;
int buttonY = 5;
int buttonCount = 0;
for (int i = 0; i <= 29; i++) {
m_buttons[i] = new ToggleButton();
final int j = i;
m_buttons[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
setChoice(j);
}
});
m_buttons[i].setSize(32, 32);
}
for (int row = 0; row < 5; row++) {
for (int column = 0; column < 6; column++) {
m_buttons[buttonCount].setLocation(buttonX, buttonY);
buttonX += 37;
buttonCount += 1;
}
buttonX = 7;
buttonY += 37;
}
for (int i = 0; i <= 29; i++) {
add(m_buttons[i]);
}
m_switchPoke = new Button();
m_close = new Button();
m_changeBox = new ComboBox();
m_release = new Button();
m_switchPoke.setText("Switch");
m_switchPoke.pack();
m_switchPoke.setLocation(5, 192);
m_switchPoke.setEnabled(false);
m_switchPoke.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
setVisible(false);
TeamForBox teamPanel = new TeamForBox(m_boxNum, m_buttonChosen);
getDisplay().add(teamPanel);
teamPanel.setLocation(getDisplay().getWidth() / 2
- teamPanel.getWidth() / 2, getDisplay().getHeight()
/ 2 - teamPanel.getHeight() / 2);
}
});
m_changeBox.addElement("Box 1");
m_changeBox.addElement("Box 2");
m_changeBox.addElement("Box 3");
m_changeBox.addElement("Box 4");
m_changeBox.addElement("Box 5");
m_changeBox.addElement("Box 6");
m_changeBox.addElement("Box 7");
m_changeBox.addElement("Box 8");
m_changeBox.addElement("Box 9");
m_changeBox.setSize(55, 15);
m_changeBox.setLocation(m_switchPoke.getX() + m_switchPoke.getWidth(),
197);
m_release.setText("Release");
m_release.pack();
m_release.setLocation(m_changeBox.getX() + m_changeBox.getWidth(), 192);
m_release.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
setVisible(false);
final Frame confirm = new Frame("Release");
confirm.getCloseButton().setVisible(false);
confirm.setResizable(false);
confirm.setSize(370, 70);
confirm.setLocationRelativeTo(null);
Label yousure = new Label(
"Are you sure you want to release your Pokemon?");
yousure.pack();
Button yes = new Button("Release");
yes.pack();
yes.setLocation(0, confirm.getHeight()
- confirm.getTitleBar().getHeight() - yes.getHeight());
yes.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
confirm.setVisible(false);
getDisplay().remove(confirm);
GameClient.getInstance().getPacketGenerator().writeTcpMessage(
"BR" + m_boxIndex + "," + m_buttonChosen);
GameClient.getInstance().getPacketGenerator().writeTcpMessage("Bf");
GameClient.getInstance().getUi().stopUsingBox();
}
});
Button no = new Button("Keep");
no.pack();
no.setLocation(yes.getWidth(), confirm.getHeight()
- confirm.getTitleBar().getHeight() - no.getHeight());
no.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
confirm.setVisible(false);
getDisplay().remove(confirm);
GameClient.getInstance().getPacketGenerator().writeTcpMessage("Bf");
GameClient.getInstance().getUi().stopUsingBox();
}
});
confirm.getContentPane().add(yousure);
confirm.getContentPane().add(yes);
confirm.getContentPane().add(no);
getDisplay().add(confirm);
}
});
m_release.setEnabled(false);
m_close.setText("Bye");
m_close.pack();
m_close.setLocation(m_release.getX() + m_release.getWidth(), 192);
m_close.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
setVisible(false);
GameClient.getInstance().getPacketGenerator().writeTcpMessage("Bf");
GameClient.getInstance().getUi().stopUsingBox();
}
});
add(m_switchPoke);
add(m_close);
add(m_changeBox);
add(m_release);
loadImages();
}
/**
* Untoggles all buttons
*/
public void untoggleButtons() {
for (int i = 0; i <= 29; i++) {
m_buttons[i].setSelected(false);
}
}
/**
* Disables all buttons
*/
public void disableButtons() {
for (int i = 0; i <= 29; i++) {
m_buttons[i].setEnabled(false);
m_switchPoke.setEnabled(false);
m_close.setEnabled(false);
m_changeBox.setEnabled(false);
m_release.setEnabled(false);
}
}
/**
* Enables all buttons
*/
public void enableButtons() {
for (int i = 0; i <= 29; i++) {
m_buttons[i].setEnabled(true);
m_switchPoke.setEnabled(true);
m_close.setEnabled(true);
m_changeBox.setEnabled(true);
m_release.setEnabled(true);
}
}
/**
* Changes the box
*
* @param boxNum
*/
public void changeBox(int[] pokes) {
m_pokeNums = pokes;
loadImages();
enableButtons();
}
@Override
public void update(GUIContext container, int delta){
super.update(container, delta);
if (m_changeBox.getSelectedIndex() != m_boxIndex){
m_boxIndex = m_changeBox.getSelectedIndex();
m_boxNum = m_boxIndex + 1;
disableButtons();
GameClient.getInstance().getPacketGenerator().writeTcpMessage("Br" + (m_boxIndex));
setTitle("Box Number " + String.valueOf(m_boxNum));
}
}
}
/**
* Team panel for storage purposes
* @author ZombieBear
*
*/
class TeamForBox extends Frame {
Container[] m_pokes = new Container[6];
ToggleButton[] m_pokeIcon = new ToggleButton[6];
Label[] m_pokeName = new Label[6];
Label[] m_level = new Label[6];
ProgressBar[] m_hp = new ProgressBar[6];
Button m_accept = new Button();
Button m_cancel = new Button();
private int m_teamIndex = 0, m_boxNumber = 0, m_boxIndex = 0;
/**
* Default Constractor
* @param boxNum
* @param boxInd
*/
public TeamForBox(int boxNum, int boxInd) {
m_boxNumber = boxNum;
m_boxIndex = boxInd;
loadPokes();
initGUI();
setVisible(true);
}
/**
* Initializes the interface
*/
public void initGUI() {
int y = 0;
for (int i = 0; i < 6; i++) {
m_pokes[i] = new Container();
m_pokes[i].setSize(170, 42);
m_pokes[i].setVisible(true);
m_pokes[i].setLocation(0, y);
y += 41;
getContentPane().add(m_pokes[i]);
m_pokes[i].setOpaque(true);
try {
m_pokes[i].add(m_pokeIcon[i]);
m_pokeIcon[i].setLocation(2, 3);
m_pokes[i].add(m_pokeName[i]);
m_pokeName[i].setLocation(40, 5);
m_pokes[i].add(m_level[i]);
m_level[i].setLocation(m_pokeName[i].getX()
+ m_pokeName[i].getWidth() + 10, 5);
m_hp[i].setSize(114, 10);
m_hp[i].setLocation(40, m_pokeName[i].getY()
+ m_pokeName[i].getHeight() + 5);
m_pokes[i].add(m_hp[i]);
} catch (NullPointerException e) {
e.printStackTrace();
}
}
m_accept.setSize(80, 30);
m_accept.setLocation(3, 245);
m_accept.setText("Accept");
m_accept.setEnabled(false);
m_accept.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
switchPokes(m_boxNumber, m_boxIndex, m_teamIndex);
GameClient.getInstance().getPacketGenerator().writeTcpMessage("Bf");
GameClient.getInstance().getUi().stopUsingBox();
setVisible(false);
}
});
add(m_accept);
m_cancel.setSize(80, 30);
m_cancel.setLocation(86, 245);
m_cancel.setText("Cancel");
m_cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
GameClient.getInstance().getPacketGenerator().writeTcpMessage("Bf");
GameClient.getInstance().getUi().stopUsingBox();
setVisible(false);
}
});
add(m_cancel);
getTitleBar().setVisible(false);
setResizable(false);
setSize(170, 302);
setAlwaysOnTop(true);
setOpaque(true);
}
/**
* Loads the necessary data
*/
public void loadPokes() {
LoadingList.setDeferredLoading(true);
for (int i = 0; i < 6; i++) {
m_pokeIcon[i] = new ToggleButton();
m_pokeName[i] = new Label();
m_level[i] = new Label();
m_hp[i] = new ProgressBar(0, 0);
m_hp[i].setForeground(Color.green);
final int j = i;
m_pokeIcon[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
setChoice(j);
}
});
m_pokeIcon[i].setSize(32, 32);
m_pokeName[i].pack();
try {
if (GameClient.getInstance().getOurPlayer().getPokemon()[i] != null) {
m_level[i].setText("Lv: "
+ String.valueOf(GameClient.getInstance().getOurPlayer().getPokemon()[i].getLevel()));
m_level[i].pack();
m_pokeName[i].setText(GameClient.getInstance().getOurPlayer().getPokemon()[i].getName());
m_pokeIcon[i].setImage(GameClient.getInstance().getOurPlayer().getPokemon()[i].getIcon());
m_hp[i].setMaximum(GameClient.getInstance().getOurPlayer().getPokemon()[i].getMaxHP());
m_hp[i].setForeground(Color.green);
m_hp[i].setValue(GameClient.getInstance().getOurPlayer().getPokemon()[i].getCurHP());
if (GameClient.getInstance().getOurPlayer().getPokemon()[i].getCurHP() > GameClient.getInstance().getOurPlayer().getPokemon()[i].getMaxHP() / 2) {
m_hp[i].setForeground(Color.green);
} else if (GameClient.getInstance().getOurPlayer().getPokemon()[i].getCurHP() < GameClient.getInstance().getOurPlayer().getPokemon()[i].getMaxHP() / 2
&& GameClient.getInstance().getOurPlayer().getPokemon()[i].getCurHP() > GameClient.getInstance().getOurPlayer().getPokemon()[i].getMaxHP() / 3) {
m_hp[i].setForeground(Color.orange);
} else if (GameClient.getInstance().getOurPlayer().getPokemon()[i].getCurHP() < GameClient.getInstance().getOurPlayer().getPokemon()[i].getMaxHP() / 3) {
m_hp[i].setForeground(Color.red);
}
m_pokeIcon[i].setImage(GameClient.getInstance().getOurPlayer().getPokemon()[i].getIcon());
m_pokeIcon[i].setSize(32, 32);
m_pokeName[i].setText(GameClient.getInstance().getOurPlayer().getPokemon()[i].getName());
m_pokeName[i].pack();
m_level[i].setText("Lv: "
+ String.valueOf(GameClient.getInstance().getOurPlayer().getPokemon()[i].getLevel()));
m_level[i].pack();
} else {
m_hp[i].setVisible(false);
}
} catch (NullPointerException e) {
e.printStackTrace();
}
}
LoadingList.setDeferredLoading(false);
}
/**
* Sets the choice
* @param x
*/
public void setChoice(int x) {
for (int i = 0; i < 6; i++) {
m_pokeIcon[i].setSelected(false);
}
m_pokeIcon[x].setSelected(true);
m_accept.setEnabled(true);
m_teamIndex = x;
}
/**
* Performs the switch
* @param boxNum
* @param boxIndex
* @param teamIndex
*/
public void switchPokes(int boxNum, int boxIndex, int teamIndex) {
GameClient.getInstance().getPacketGenerator().writeTcpMessage("Bs" + (boxNum - 1) + "," + boxIndex + ","
+ teamIndex);
GameClient.getInstance().getPacketGenerator().writeTcpMessage("Bf");
GameClient.getInstance().getUi().update(false);
}
}