package org.pokenet.client.ui; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import mdes.slick.sui.Button; import mdes.slick.sui.Container; import mdes.slick.sui.Frame; import mdes.slick.sui.Label; 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.pokenet.client.GameClient; import org.pokenet.client.backend.BattleManager; import org.pokenet.client.backend.FileLoader; import org.pokenet.client.backend.MoveLearningManager; import org.pokenet.client.ui.base.BattleButtonFactory; import org.pokenet.client.ui.base.ConfirmationDialog; /** * Handles move learning and evolution * * @author ZombieBear * */ public class MoveLearning extends Frame { private Button move1, move2, move3, move4; private Label pp1, pp2, pp3, pp4; private Button m_cancel; private Label m_bg; private Container m_movePane; private String m_move; private int m_pokeIndex; public List<Button> m_moveButtons = new ArrayList<Button>(); public List<Label> m_pp = new ArrayList<Label>(); private ConfirmationDialog m_replace; private MoveLearnCanvas m_canvas; // Image Loading tools String m_path = "res/battle/"; InputStream f; /** * Default Constructor * * @param pokeIndex * @param move * @param isMoveLearning */ public MoveLearning() { String respath = System.getProperty("res.path"); if(respath==null) respath=""; m_path = respath+m_path; getContentPane().setX(getContentPane().getX() - 1); getContentPane().setY(getContentPane().getY() + 1); m_canvas = new MoveLearnCanvas(); getContentPane().add(m_canvas); setSize(259, 369); initGUI(); setCenter(); } /** * Starts the GUI * * @param isMoveLearning */ public void initGUI() { // TRUE = Move Learning // FALSE = Evolution m_bg = new Label(); String respath = System.getProperty("res.path"); if(respath==null) respath=""; try { f = FileLoader.loadFile(respath+"res/ui/bg.png"); m_bg = new Label(new Image(f, respath+"res/ui", false)); } catch (SlickException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } m_bg.setSize(256, 203); m_bg.setLocation(0, 142); getContentPane().add(m_bg); m_movePane = new Container(); m_movePane.setBackground(new Color(0, 0, 0, 0)); m_movePane.setBounds(2, 140, 257, 201); move1 = BattleButtonFactory.getButton(""); move2 = BattleButtonFactory.getButton(""); move3 = BattleButtonFactory.getButton(""); move4 = BattleButtonFactory.getButton(""); setResizable(false); getTitleBar().setVisible(false); // start attackPane m_movePane.add(move1); move1.setLocation(7, 10); move1.setSize(116, 51); move1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { replaceMove(0); } }); pp1 = new Label(); pp1.setHorizontalAlignment(Label.RIGHT_ALIGNMENT); pp1.setBounds(7, 40, 110, 20); m_movePane.add(pp1); m_movePane.add(move2); move2.setLocation(130, 10); move2.setSize(116, 51); move2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { replaceMove(1); } }); pp2 = new Label(); pp2.setHorizontalAlignment(Label.RIGHT_ALIGNMENT); pp2.setBounds(130, 40, 110, 20); m_movePane.add(pp2); m_movePane.add(move3); move3.setLocation(7, 65); move3.setSize(116, 51); move3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { replaceMove(2); } }); pp3 = new Label(); pp3.setHorizontalAlignment(Label.RIGHT_ALIGNMENT); pp3.setBounds(7, 95, 110, 20); m_movePane.add(pp3); m_movePane.add(move4); move4.setLocation(130, 65); move4.setSize(116, 51); move4.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { replaceMove(3); } }); pp4 = new Label(); pp4.setHorizontalAlignment(Label.RIGHT_ALIGNMENT); pp4.setBounds(130, 95, 110, 20); m_movePane.add(pp4); m_moveButtons.add(move1); m_moveButtons.add(move2); m_moveButtons.add(move3); m_moveButtons.add(move4); m_pp.add(pp1); m_pp.add(pp2); m_pp.add(pp3); m_pp.add(pp4); m_cancel = new Button("Cancel"); m_cancel.setBounds(3, 122, 246, 77); m_cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { MoveLearningManager.getInstance().removeMoveLearning(); GameClient.getInstance().getPacketGenerator().writeTcpMessage( "PM" + m_pokeIndex + m_move); } }); m_movePane.add(m_cancel); getContentPane().add(m_movePane); } /** * Handles move replacement * * @param i */ private void replaceMove(int i) { final int j = i; if (!GameClient.getInstance().getDisplay().containsChild(m_replace)) { if (m_moveButtons.get(i).getText().equals("")) { GameClient.getInstance().getOurPlayer().getPokemon()[m_pokeIndex].setMoves(j, m_move); if (BattleManager.getInstance().getBattleWindow().isVisible()) BattleManager.getInstance().updateMoves(); GameClient.getInstance().getPacketGenerator().writeTcpMessage( "Pm" + m_pokeIndex + i + m_move); MoveLearningManager.getInstance().removeMoveLearning(); } else { setAlwaysOnTop(false); m_replace = new ConfirmationDialog( "Are you sure you want to forget " + m_moveButtons.get(i).getText() + " to learn " + m_move + "?"); m_replace.setAlwaysOnTop(true); ActionListener yes = new ActionListener() { public void actionPerformed(ActionEvent e) { GameClient.getInstance().getOurPlayer().getPokemon()[m_pokeIndex].setMoves(j, m_move); BattleManager.getInstance().updateMoves(); GameClient.getInstance().getPacketGenerator().writeTcpMessage( "Pm" + m_pokeIndex + j + m_move); GameClient.getInstance().getDisplay().remove(m_replace); m_replace = null; MoveLearningManager.getInstance().removeMoveLearning(); } }; ActionListener no = new ActionListener() { public void actionPerformed(ActionEvent e) { GameClient.getInstance().getDisplay().remove(m_replace); m_replace = null; setAlwaysOnTop(true); } }; m_replace.addYesListener(yes); m_replace.addNoListener(no); } } } public void learnMove(int pokeIndex, String move) { setAlwaysOnTop(true); m_pokeIndex = pokeIndex; GameClient.getInstance().getUi().talkToNPC(GameClient.getInstance().getOurPlayer() .getPokemon()[pokeIndex].getName() + " wants to learn " + move); m_move = move; move1.setText(GameClient.getInstance().getOurPlayer().getPokemon()[m_pokeIndex].getMoves()[0]); move2.setText(GameClient.getInstance().getOurPlayer().getPokemon()[m_pokeIndex].getMoves()[1]); move3.setText(GameClient.getInstance().getOurPlayer().getPokemon()[m_pokeIndex].getMoves()[2]); move4.setText(GameClient.getInstance().getOurPlayer().getPokemon()[m_pokeIndex].getMoves()[3]); for (int i = 0; i < 4; i++) { if (m_moveButtons.get(i).getText().equals("")) { m_pp.get(i).setVisible(false); } else { m_pp.get(i).setText(GameClient.getInstance().getOurPlayer().getPokemon()[pokeIndex]. getMoveCurPP()[i] + "/" + GameClient.getInstance().getOurPlayer().getPokemon() [pokeIndex].getMoveMaxPP()[i]); m_pp.get(i).setVisible(true); } } m_movePane.setVisible(true); m_canvas.draw(pokeIndex); } /** * 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.setLocation(x, y); } } /** * Canvas for Move Learning screen * * @author ZombieBear * */ class MoveLearnCanvas extends Container { Label bg = new Label(); Label poke = new Label(); public MoveLearnCanvas() { setSize(257, 144); setVisible(true); bg.setBackground(Color.black); bg.setOpaque(true); // Background? /*LoadingList.setDeferredLoading(true); try { bg = new Label(new Image("res/ui/DP_darkgrass.png")); } catch (SlickException e) { e.printStackTrace(); } LoadingList.setDeferredLoading(false);*/ bg.setBounds(0, 0, 256, 144); this.add(bg); setY(1); } public void draw(int pokeIndex) { poke = new Label(GameClient.getInstance().getOurPlayer().getPokemon()[pokeIndex].getSprite()); poke.setSize(80, 80); poke.setLocation(getWidth() / 2 - 40, getHeight() / 2 - 40); this.add(poke); } }