Package org.pokenet.client.backend

Source Code of org.pokenet.client.backend.BattleTimeLine

package org.pokenet.client.backend;

import java.util.ArrayList;
import java.util.List;

import org.pokenet.client.GameClient;
import org.pokenet.client.ui.BattleCanvas;
import org.pokenet.client.ui.frames.BattleSpeechFrame;

/**
* Handles Battle Events and arranges them for visual purposes.
*
* @author ZombieBear
*/
public class BattleTimeLine {
  private final BattleSpeechFrame m_narrator;
  private BattleCanvas            m_canvas;
  List<String>                    m_translator = new ArrayList<String>();
  // Lines for REGEX needed for l10n
  String                          m_pokeName, m_move, m_trainer, m_foundItem;
  int                             m_newHPValue, m_exp, m_dmg, m_earnings,
      m_level, m_expRemaining;
  private boolean                 m_isBattling;

  /**
   * Default constructor
   */
  public BattleTimeLine() {
    m_translator = Translator.translate("_BATTLE");
    try {
      m_canvas = new BattleCanvas();
    } catch (Exception e) {
      e.printStackTrace();
    }
    m_narrator = new BattleSpeechFrame();
  }

  /**
   * Starts the TimeLine's components
   */
  public void startBattle() {
    m_canvas.startBattle();
    m_isBattling = true;
    GameClient.getInstance().getDisplay().add(m_canvas);
    GameClient.getInstance().getDisplay().add(m_narrator);
    GameClient.getInstance().getUi().nullSpeechFrame();
  }

  /**
   * Informs a pokemon fainted
   *
   * @param poke
   */
  public void informFaintedPoke(String poke) {
    m_pokeName = poke;
    for (int i = 0; i < GameClient.getInstance().getOurPlayer().getPokemon().length; i++) {
      int counter = 0;
      if (GameClient.getInstance().getOurPlayer().getPokemon()[i] != null &&
          GameClient.getInstance().getOurPlayer().getPokemon()[i].getCurHP() <= 0) {
        counter++;
      }
      if (counter < i) {
        BattleManager.getInstance().getBattleWindow().showPokePane(true);
        addSpeech(m_translator.get(0));
        break;
      }
    }
  }

  /**
   * Informs a move was used
   *
   * @param data
   */
  public void informMoveUsed(String[] data) {
    m_pokeName = data[0];
    m_move = data[1];
    addSpeech(m_translator.get(1));
  }

  /**
   * Informs that a move is requested
   */
  public void informMoveRequested() {
    BattleManager.getInstance().requestMoves();
    addSpeech(m_translator.get(2));
  }

  /**
   * Informs that a pokemon gained experience
   *
   * @param data
   */
  public void informExperienceGained(String[] data) {
    m_pokeName = data[0];
    m_exp = (int) Double.parseDouble(data[1]);
    m_expRemaining = (int) Double.parseDouble(data[2]);
    addSpeech(m_translator.get(3));
  }

  /**
   * Informs that a pokemon's status was changed
   *
   * @param data
   */
  public void informStatusChanged(int trainer, String[] data) {
    m_pokeName = data[0];
    m_canvas.setStatus(trainer, data[1]);
    if (data[1].equalsIgnoreCase("poison")) {
      addSpeech(m_translator.get(14));
    } else if (data[1].equalsIgnoreCase("freeze")) {
      addSpeech(m_translator.get(15));
    } else if (data[1].equalsIgnoreCase("burn")) {
      addSpeech(m_translator.get(16));
    } else if (data[1].equalsIgnoreCase("paralysis")) {
      addSpeech(m_translator.get(17));
    } else if (data[1].equalsIgnoreCase("sleep")) {
      addSpeech(m_translator.get(18));
    }
    if (trainer == 1)
      m_canvas.setPokeballImage(BattleManager.getInstance().getCurEnemyIndex(),
        "status");
  }

  /**
   * Informs that a pokemon's status was returned to normal
   *
   * @param data
   */
  public void informStatusHealed(int trainer, String[] data) {
    m_pokeName = data[0];
    m_canvas.setStatus(trainer, "normal");
    addSpeech(m_translator.get(4));
  }

  /**
   * Informs that a pokemon was switched out.
   *
   * @param data
   */
  public void informSwitch(String[] data) {
    m_trainer = data[0];
    m_pokeName = data[1];
    BattleManager.getInstance().switchPoke(Integer.parseInt(data[2]),
      Integer.parseInt(data[3]));
    m_canvas.drawOurPoke();
    m_canvas.drawOurInfo();
    m_canvas.drawEnemyPoke();
    m_canvas.drawEnemyInfo();
    addSpeech(m_translator.get(5));
  }

  /**
   * Informs that a pokemon switch is required
   */
  public void informSwitchRequested() {
    BattleManager.getInstance().getBattleWindow().showPokePane(true);
    addSpeech(m_translator.get(6));
  }

  public void informNoPP(String move) {
    m_move = move;
    BattleManager.getInstance().requestMoves();
    addSpeech(m_translator.get(21));
  }

  /**
   * Informs a change in health
   *
   * @param data
   * @param i
   */
  public void informHealthChanged(String[] data, int i) {
    m_pokeName = data[0];
    m_dmg = Math.abs(Integer.parseInt(data[1]));
    if (i == 0) {
      m_pokeName = BattleManager.getInstance().getCurPoke().getName();
      m_newHPValue = BattleManager.getInstance().getCurPoke().getCurHP()
        + Integer.parseInt(data[1]);
      if (m_newHPValue < 0) {
        m_newHPValue = 0;
      } else if(m_newHPValue > BattleManager.getInstance().getCurPoke().getMaxHP())
      {
        m_newHPValue = BattleManager.getInstance().getCurPoke().getMaxHP();
      }
      BattleManager.getInstance().getCurPoke().setCurHP(m_newHPValue);
      m_canvas.updatePlayerHP(BattleManager.getInstance().getCurPoke()
        .getCurHP());
      data[0] = BattleManager.getInstance().getCurPoke().getName();
    } else {
      m_pokeName = BattleManager.getInstance().getCurEnemyPoke().getName();
      m_newHPValue = BattleManager.getInstance().getCurEnemyPoke().getCurHP()
        + Integer.parseInt(data[1]);
      if (m_newHPValue < 0) {
        m_newHPValue = 0;
      } else if(m_newHPValue > BattleManager.getInstance().getCurEnemyPoke().getMaxHP())
      {
        m_newHPValue = BattleManager.getInstance().getCurEnemyPoke().getMaxHP();
      }
      BattleManager.getInstance().getCurEnemyPoke().setCurHP(m_newHPValue);
      m_canvas.updateEnemyHP(BattleManager.getInstance().getCurEnemyPoke()
        .getCurHP());
      data[0] = BattleManager.getInstance().getCurEnemyPoke().getName();
    }

    if (i == 1 && m_newHPValue == 0) {
      m_canvas.setPokeballImage(BattleManager.getInstance().getCurEnemyIndex(),
        "fainted");
    }

    if (Integer.parseInt(data[1]) <= 0) {
      addSpeech(m_translator.get(7));
      addSpeech(m_translator.get(8));
    } else {
      addSpeech(m_translator.get(9));
    }
  }

  /**
   * Informs a victory on the player's side
   */
  public void informVictory() {
    m_trainer = GameClient.getInstance().getOurPlayer().getUsername();
    addSpeech(m_translator.get(10));
    BattleManager.getInstance().endBattle();
    m_isBattling = false;
  }

  /**
   * Informs a loss on the player's side
   */
  public void informLoss() {
    m_trainer = GameClient.getInstance().getOurPlayer().getUsername();
    addSpeech(m_translator.get(11));
    BattleManager.getInstance().endBattle();
    m_isBattling = false;
  }

  /**
   * Shows a custom message sent by the server
   *
   * @param msg
   */
  public void showMessage(String msg) {
    addSpeech(msg);
  }

  /**
   * Informs if a run was successful
   *
   * @param canRun
   */
  public void informRun(boolean canRun) {
    if (canRun) {
      addSpeech(m_translator.get(12));
      m_narrator.advance();
      BattleManager.getInstance().endBattle();
    } else {
      addSpeech(m_translator.get(13));
      m_narrator.advance();
      informMoveRequested();
    }
  }

  /**
   * Informs the player's earnings
   *
   * @param money
   */
  public void informMoneyGain(int money) {
    m_earnings = money;
    addSpeech(m_translator.get(19));
  }

  /**
   * Informs the player's that the pokemon dropped an item
   *
   * @param item
   */
  public void informItemDropped(String item) {
    m_foundItem = item;
    if (BattleManager.getInstance().isWild()) {
      m_pokeName = BattleManager.getInstance().getCurEnemyPoke().getName();
      addSpeech(m_translator.get(22));
    } else
      addSpeech(m_translator.get(23));
  }

  /**
   * Informs the player's earnings
   *
   * @param money
   */
  public void informLevelUp(String poke, int level) {
    m_pokeName = poke;
    m_level = level;
    addSpeech(m_translator.get(20));
  }

  /**
   * Adds speech to the narrator and waits for it to be read before the next
   * action is taken
   *
   * @param msg
   */
  public void addSpeech(String msg) {
    String newMsg = parsel10n(msg);
    m_narrator.addSpeech(parsel10n(newMsg));
    while (!m_narrator.getCurrentLine().equalsIgnoreCase(newMsg))
      ;
    while (!m_narrator.getAdvancedLine().equalsIgnoreCase(newMsg))
      ;
  }

  /**
   * Returns the battle speech
   *
   * @return
   */
  public BattleSpeechFrame getBattleSpeech() {
    return m_narrator;
  }

  /**
   * Returns the battle canvas
   *
   * @return
   */
  public BattleCanvas getBattleCanvas() {
    return m_canvas;
  }

  /**
   * Stops the timeline
   */
  public void endBattle() {
    m_canvas.stop();
    try {
      GameClient.getInstance().getDisplay().remove(m_canvas);
    } catch (Exception e) {
    }
    ;
    while (GameClient.getInstance().getDisplay().containsChild(m_canvas))
      ;
    try {
      GameClient.getInstance().getDisplay().remove(m_narrator);
    } catch (Exception e) {
    }
    ;
    while (GameClient.getInstance().getDisplay().containsChild(m_narrator))
      ;
  }

  /**
   * Uses regexes to create the appropriate battle messages for battle
   *
   * @param line
   */
  public String parsel10n(String line) {
    if (line.contains("trainerName")) {
      line = line.replaceAll("trainerName", m_trainer);
    }
    if (line.contains("moveName")) {
      line = line.replaceAll("moveName", m_move);
    }
    if (line.contains("pokeName")) {
      line = line.replace("pokeName", m_pokeName);
    }
    if (line.contains("hpNum")) {
      line = line.replaceAll("hpNum", String.valueOf(m_newHPValue));
    }
    if (line.contains("expNum")) {
      line = line.replaceAll("expNum", String.valueOf(m_exp));
    }
    if (line.contains("damageNum")) {
      line = line.replaceAll("damageNum", String.valueOf(m_dmg));
    }
    if (line.contains("earningsNum")) {
      line = line.replaceAll("earningsNum", String.valueOf(m_earnings));
    }
    if (line.contains("levelNum")) {
      line = line.replaceAll("levelNum", String.valueOf(m_level));
    }
    if (line.contains("rewardItem")) {
      line = line.replaceAll("rewardItem", m_foundItem);
    }
    if (line.contains("expRemaining")) {
      line = line.replaceAll("expRemaining", String.valueOf(m_expRemaining));
    }
    return line;
  }

  public boolean isBattling() {
    return m_isBattling;
  }
}
TOP

Related Classes of org.pokenet.client.backend.BattleTimeLine

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.