Package org.pokenet.client.backend

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

package org.pokenet.client.backend;

import org.lwjgl.util.Timer;
import org.pokenet.client.backend.entity.Player;
import org.pokenet.client.backend.entity.Player.Direction;

public class Animator {
  private ClientMapMatrix m_mapMatrix;


  private Timer m_timer;

  private static final int ANIMATION_INCREMENT = 4;

  // Sets up calls
  public Animator(ClientMapMatrix maps) {
    m_mapMatrix = maps;
    m_timer = new Timer();
  }

  // Prepares for animation
  public void animate() {
    try {
      while (m_timer.getTime() <= 0.025)
        Timer.tick();
      ClientMap map = m_mapMatrix.getCurrentMap();
      if (map != null) {
        for(int i = 0; i < m_mapMatrix.getPlayers().size(); i++) {
            animatePlayer(m_mapMatrix.getPlayers().get(i));
        }
      }
      m_timer.reset();
    } catch (Exception e) {
      m_timer.reset();
    }
  }

  /**
   * Animates players moving
   * @param p
   */
  private void animatePlayer(Player p) {
    /*
     * Check if we need to move the player
     */
    if(p.requiresMovement()) {
      switch(p.getNextMovement()) {
      case Down:
        if(p.getDirection() == Direction.Down)
          p.setServerY(p.getY() + 32);
        else {
          p.setDirection(Direction.Down);
          p.loadSpriteImage();
        }
        break;
      case Left:
        if(p.getDirection() == Direction.Left)
          p.setServerX(p.getX() - 32);
        else {
          p.setDirection(Direction.Left);
          p.loadSpriteImage();
        }
        break;
      case Right:
        if(p.getDirection() == Direction.Right)
          p.setServerX(p.getX() + 32);
        else {
          p.setDirection(Direction.Right);
          p.loadSpriteImage();
        }
        break;
      case Up:
        if(p.getDirection() == Direction.Up)
          p.setServerY(p.getY() - 32);
        else {
          p.setDirection(Direction.Up);
          p.loadSpriteImage();
        }
        break;
      }
    }
    /*
     * Keep the screen following the player, i.e. move the map also
     */
    if (p.isOurPlayer()) {
      if (p.getX() > p.getServerX()) {
        m_mapMatrix.getCurrentMap().setXOffset(
            (m_mapMatrix.getCurrentMap().getXOffset() + ANIMATION_INCREMENT),
            true);
      } else if (p.getX() < p.getServerX()) {
        m_mapMatrix.getCurrentMap().setXOffset(
            (m_mapMatrix.getCurrentMap().getXOffset() - ANIMATION_INCREMENT),
            true);
      } else if (p.getY() > p.getServerY()) {
        m_mapMatrix.getCurrentMap().setYOffset(
            (m_mapMatrix.getCurrentMap().getYOffset() + ANIMATION_INCREMENT),
            true);
      } else if (p.getY() < p.getServerY()) {
        m_mapMatrix.getCurrentMap().setYOffset(
            (m_mapMatrix.getCurrentMap().getYOffset() - ANIMATION_INCREMENT),
            true);
      }
    }
    /*
     * Move the player on screen
     */
    if (p.getX() > p.getServerX()) {
      // Choose the sprite according to the player's position
      if(p.getX() % 32 == 0) {
        p.setDirection(Direction.Left);
        p.m_leftOrRight = !p.m_leftOrRight;
        p.setCurrentImage(Player.getSpriteFactory().getSprite(p.getDirection(), true, p.m_leftOrRight, p.getSprite()));
      }
     
      p.setX(p.getX() - ANIMATION_INCREMENT);
      if(p.getX() > p.getServerX() && p.getX() % 32 == 0) {
        /* If the player is still behind the server, make sure the stopped animation is shown */
        p.setCurrentImage(Player.getSpriteFactory().getSprite(p.getDirection(), false, p.m_leftOrRight, p.getSprite()));
      }
    } else if (p.getX() < p.getServerX()) {
      if(p.getX() % 32 == 0) {
        p.setDirection(Direction.Right);
        p.m_leftOrRight = !p.m_leftOrRight;
        p.setCurrentImage(Player.getSpriteFactory().getSprite(p.getDirection(), true, p.m_leftOrRight, p.getSprite()));
      }
      p.setX(p.getX() + ANIMATION_INCREMENT);
      if(p.getX() < p.getServerX() && p.getX() % 32 == 0) {
        /* If the player is still behind the server, make sure the stopped animation is shown */
        p.setCurrentImage(Player.getSpriteFactory().getSprite(p.getDirection(), false, p.m_leftOrRight, p.getSprite()));
      }
    } else if (p.getY() > p.getServerY()) {
      if((p.getY() + 8) % 32 == 0) {
        p.setDirection(Direction.Up);
        p.m_leftOrRight = !p.m_leftOrRight;
        p.setCurrentImage(Player.getSpriteFactory().getSprite(p.getDirection(), true, p.m_leftOrRight, p.getSprite()));
      }
      p.setY(p.getY() - ANIMATION_INCREMENT);
      if(p.getY() > p.getServerY() && (p.getY() + 8) % 32 == 0) {
        /* If the player is still behind the server, make sure the stopped animation is shown */
        p.setCurrentImage(Player.getSpriteFactory().getSprite(p.getDirection(), false, p.m_leftOrRight, p.getSprite()));
      }
    } else if (p.getY() < p.getServerY()) {
      if((p.getY() + 8) % 32 == 0) {
        p.setDirection(Direction.Down);
        p.m_leftOrRight = !p.m_leftOrRight;
        p.setCurrentImage(Player.getSpriteFactory().getSprite(p.getDirection(), true, p.m_leftOrRight, p.getSprite()));
      }
      p.setY(p.getY() + ANIMATION_INCREMENT);
      if(p.getY() < p.getServerY() && (p.getY() + 8) % 32 == 0) {
        /* If the player is still behind the server, make sure the stopped animation is shown */
        p.setCurrentImage(Player.getSpriteFactory().getSprite(p.getDirection(), false, p.m_leftOrRight, p.getSprite()));
      }
    }
    /*
     * The player is now in sync with the server, stop moving/animating them
     */
    if (p.getX() == p.getServerX() && p.getY() == p.getServerY()) {
      p.setDirection(p.getDirection());
      p.setAnimating(false);
      p.loadSpriteImage();
    }
  }
}
TOP

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

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.