package org.pokenet.client.ui.frames; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Scanner; 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 org.newdawn.slick.Graphics; import org.newdawn.slick.Image; import org.newdawn.slick.SlickException; import org.newdawn.slick.gui.GUIContext; import org.pokenet.client.GameClient; import org.pokenet.client.backend.FileLoader; import org.pokenet.client.ui.base.ConfirmationDialog; import org.pokenet.client.ui.base.ListBox; public class SpriteChooserDialog extends Frame { protected ListBox m_spriteList; protected Label m_spriteDisplay; protected String m_mustLoadSprite; private List<String> m_sprites; private InputStream m_stream; private String m_respath; public SpriteChooserDialog() { getContentPane().setX(getContentPane().getX() - 1); getContentPane().setY(getContentPane().getY() + 1); m_sprites = new ArrayList<String>(); m_respath = System.getProperty("res.path"); if(m_respath==null) m_respath=""; for (int i = 1; i <= 218; i++) { m_sprites.add(String.valueOf(i)); } /* * Handle blocked sprites */ try { InputStream in; in = FileLoader.loadFile(m_respath+"res/characters/sprites.txt"); Scanner s = new Scanner(in); while(s.hasNextLine()) { m_sprites.remove(s.nextLine()); } s.close(); m_spriteDisplay = new Label(); m_spriteDisplay.setSize(124, 204); m_spriteDisplay.setLocation(105, 20); getContentPane().add(m_spriteDisplay); m_spriteList = new ListBox(m_sprites, false) { @Override protected void itemClicked(String itemName, int idx) { super.itemClicked(itemName, idx); m_mustLoadSprite = m_respath+"res/characters/" + itemName + ".png"; } }; m_spriteList.setSize(105, 317); getContentPane().add(m_spriteList); setTitle("Please choose your character.."); getCloseButton().setVisible(false); setSize(265, 340); setResizable(false); setDraggable(false); setVisible(true); initUse(); } catch (FileNotFoundException e) { //No sprites to handle. } } public void initUse() { final SpriteChooserDialog thisDialog = this; Button use = new Button("Use new sprite!"); use.pack(); use.setLocation(130, 245); getContentPane().add(use); Button cancel = new Button("Cancel"); cancel.pack(); cancel.setLocation(130, 280); getContentPane().add(cancel); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { GameClient.getInstance().getDisplay().remove(thisDialog); } }); use.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { GameClient.getInstance().getDisplay().remove(thisDialog); final ConfirmationDialog confirm = new ConfirmationDialog("Are you sure you want to change sprites?\nIt'll cost you P500!"); confirm.addYesListener(new ActionListener() { public void actionPerformed(ActionEvent e) { confirm.setVisible(false); GameClient.getInstance().getDisplay().remove(confirm); GameClient.getInstance().getPacketGenerator().writeTcpMessage( "S" + m_spriteList.getSelectedName()); } }); confirm.addNoListener(new ActionListener() { public void actionPerformed(ActionEvent e) { confirm.setVisible(false); GameClient.getInstance().getDisplay().remove(confirm); } }); GameClient.getInstance().getDisplay().add(confirm); } }); } public int getChoice() { return m_spriteList.getSelectedIndex(); } @Override public void render(GUIContext container, Graphics g) { super.render(container, g); if (m_mustLoadSprite != null) { try { m_stream = FileLoader.loadFile(m_mustLoadSprite); m_spriteDisplay.setImage(new Image(m_stream, m_mustLoadSprite, false)); } catch (SlickException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } m_mustLoadSprite = null; } } }