Package org.pokenet.client.ui.frames

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

package org.pokenet.client.ui.frames;

import java.io.InputStream;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Timer;
import java.util.TimerTask;

import mdes.slick.sui.Frame;
import mdes.slick.sui.Label;
import mdes.slick.sui.TextArea;

import org.newdawn.slick.Color;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.geom.Polygon;
import org.newdawn.slick.gui.GUIContext;
import org.newdawn.slick.loading.LoadingList;
import org.pokenet.client.GameClient;
import org.pokenet.client.backend.FileLoader;

/**
* Base for speech pop-ups
* @author ZombieBear
*
*/
public class SpeechFrame extends Frame {
    Queue<String> speechQueue;

    TextArea speechDisplay;

    Timer printingTimer = new Timer();
    TimerTask animAction;

    Polygon triangle;

    Image bg;
    boolean isGoingDown = true;
    protected String stringToPrint;
   
    /**
     * Default constructor
     * @param speech
     */
    public SpeechFrame(String speech) {
      getContentPane().setX(getContentPane().getX() - 1);
    getContentPane().setY(getContentPane().getY() + 1);
    this.setBorderRendered(false);
    speechQueue = new LinkedList<String>();
    for (String line : speech.split("/n")) {
      speechQueue.add(line);
    }
    triangulate();
    initGUI();
    }
   
    /**
     * Constructs a SpeechFrame, uses Seconds between next line.
     * @param speech
     * @param seconds
     */
    public SpeechFrame(String speech, int seconds) {
      speechQueue = new LinkedList<String>();
      for (String line : speech.split("/n")) {
        speechQueue.add(line);
      }
      triangulate();
      initGUI();
      this.advance();
//            this.advance();
//            while(canAdvance()){
//              try {
//          wait(seconds*1000);
//        } catch (InterruptedException e) {
//          e.printStackTrace();
//        }
//              advance();
//            }
    }
    /**
     * Sends a packet when finished showing dialog
     * @param printed
     */
    public void advancedPast(String printed) {
           
    }
   
    /**
     * Initializes the interface
     */
    public void initGUI() {
      InputStream f;
      try {
        LoadingList.setDeferredLoading(true);
        String respath = System.getProperty("res.path");
        if(respath==null)
          respath="";
        f = FileLoader.loadFile(respath+"res/ui/speechbox.png");
        bg = new Image(f, respath+"res/ui/speechbox.png", false);
        LoadingList.setDeferredLoading(false);
      } catch (Exception e) {
        e.printStackTrace();
      }

      Label bg = new Label(this.bg);
      bg.setSize(400, 100);
      bg.setLocation(0, -11);
      speechDisplay = new TextArea();
     
      speechDisplay.setFocusable(false);
      speechDisplay.setSize(384, 100);
      speechDisplay.setLocation(16, 5);
      speechDisplay.setBorderRendered(false);
      speechDisplay.setFont(GameClient.getFontLarge());
      speechDisplay.setOpaque(false);
      this.getContentPane().add(bg);
      this.getContentPane().add(speechDisplay);
     
      this.setWidth(400);
      this.setHeight(100);
      this.setX((GameClient.getInstance().getDisplay().getWidth() / 2) - getWidth() / 2);
      this.setY((GameClient.getInstance().getDisplay().getHeight() / 2) + getWidth() / 2);
      this.getTitleBar().setVisible(false);
      this.setResizable(false);
     
      this.setFocusable(false);
     
      this.setAlwaysOnTop(true);
      advance();
    }

    /**
     * ???
     * @param done
     */
    public void advanced(String done) {

    }
   
    /**
     * Advances to next message
     */
    public void advance() {
      triangle = null;

      if (animAction == null) {
        if (canAdvance()) {
          speechDisplay.setText("");
          if (stringToPrint != null)
            advancedPast(stringToPrint);
            stringToPrint = speechQueue.poll();
            if (stringToPrint != null) {
              animAction = new TimerTask() {
                public void run() {
                  if (speechDisplay.getText().equals(stringToPrint)) {
                    animAction = null;
                    try {
                      cancel();
                    } catch (IllegalStateException e) { }
                    triangulate();
                  } else {
                    try {
                      speechDisplay.setText(stringToPrint.substring(0, speechDisplay
                          .getText().length() + 1));
                    } catch (StringIndexOutOfBoundsException e) {
                      speechDisplay.setText(stringToPrint);
                    }
                }
              }}
                try {
                  printingTimer.schedule(animAction, 0, 30);}
                catch (Exception e) {
                  animAction = null;
                  e.printStackTrace();
                }
                advancing(stringToPrint);
            }
        }
      } else {
        speechDisplay.setText("");
        animAction.cancel();
        animAction = null;
        speechDisplay.setText(stringToPrint);
        triangulate();
      }
    }
   
    /**
     * Returns true if the player can advance
     * @return
     */
    public boolean canAdvance() {
            return true;
    }
   
    /**
     * Generates the triangle to show when you can continue
     */
    public void triangulate() {
      triangle = new Polygon();
      triangle.addPoint(getWidth() - 30 + getX(), 60 +getY());
      triangle.addPoint(getWidth() - 30 + getX() + 10, 60 + getY());
      triangle.addPoint(getWidth() - 30  + getX() + 5, 60 + getY() + 10);
    }
   
    /**
     * ?????
     * @param toPrint
     */
    public void advancing(String toPrint) {

    }
   
    /**
     * Renders
     */
    @Override
    public void render(GUIContext container, Graphics g) {
      super.render(container, g);

      if (triangle != null) {
        if (canAdvance()) {
          g.setColor(Color.red);
          g.fill(triangle);
          if (Math.round(triangle.getCenterY()) > 584)
            triangle.setCenterY(584);
          else if (Math.round(triangle.getCenterY()) < 574)
            triangle.setCenterY(574);
          if (Math.round(triangle.getCenterY()) == 574) {
            isGoingDown = true;
          } else if (Math.round(triangle.getCenterY()) == 584) {
            isGoingDown = false;
          }
          if (isGoingDown) {
            triangle.setCenterY(triangle.getCenterY() + .5f);
          } else {
            triangle.setCenterY(triangle.getCenterY() - .5f);
          }
        }
      }
    }
   
    /**
     * Adds a line to the queue
     * @param speech
     */
    public void addSpeech(String speech) {
      speechQueue.add(speech);
    }
}
TOP

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

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.