Package kku.cs.fgl.actor

Source Code of kku.cs.fgl.actor.SpriteActor

package kku.cs.fgl.actor;

import kku.cs.fgl.Actor;
import kku.cs.fgl.GamePane;
import kku.cs.fgl.SpriteCell;
import kku.cs.fgl.SpriteGroup;
import kku.cs.fgl.SpriteManager;

import org.newdawn.slick.Color;
import org.newdawn.slick.Graphics;

public class SpriteActor extends Actor {

  private SpriteGroup cells;

  private int cur_frame = 0;

  private int direction = 1;

  private int delay = 100;

  private boolean hflip = false;

  private boolean vflip = false;

  private boolean animate = true;

  private String keyName = "";

  private SpriteManager sprites;

  int ftime = 0;

  public SpriteActor() {
    super();
  }

  public SpriteActor(SpriteManager sprites) {
    super();
    this.sprites = sprites;
  }

  public void calculateSpeed(int time) {
    if (!animate)
      return;

    if (cells == null && sprites != null && keyName != null) {
      setKeyName(keyName);
    }
    int delay = cells.get(cur_frame).getDelay();
    if (delay <= 0) {
      delay = this.delay;
    }
    ftime += time;
    if (ftime > delay) {
      ftime = 0;
      stepFrame(1);
    }
    if (cells != null) {
      setWidth(cells.get(cur_frame).getWidth());
      setHeight(cells.get(cur_frame).getHeight());
    }
  }

  public boolean contains(float x2, float y2) {
    boolean t = super.contains(x2, y2);
    if (t && getFrameCount() > 0) {
      int cx = (int) ((x2 - getX()) / getScalex());
      int cy = (int) ((y2 - getY()) / getScaley());
      Color c = cells.get(cur_frame).getPixel(cx, cy);
      t = c.a > 0.1f;
    }
    return t;
  }

  public SpriteGroup.SFrame getCell() {
    SpriteGroup.SFrame cell = null;
    if (getFrameCount() > 0 && cur_frame < getFrameCount()) {
      cell = cells.get(cur_frame);
    }
    return cell;
  }

  public SpriteGroup getCells() {
    return cells;
  }

  public int getCur_frame() {
    return cur_frame;
  }

  public int getDelay() {
    return delay;
  }

  /**
   * @return Returns the direction.
   */
  public int getDirection() {
    return direction;
  }

  public int getFrameCount() {
    if (cells == null)
      return 0;
    return cells.size();
  }

  public String getKeyName() {
    return keyName;
  }

  public SpriteManager getSprites() {
    return sprites;
  }

  public boolean isAnimate() {
    return animate;
  }

  /**
   * @return Returns the hflip.
   */
  public boolean isHflip() {
    return hflip;
  }

  /**
   * @return Returns the vflip.
   */
  public boolean isVflip() {
    return vflip;
  }

  public void paint(Graphics g) {
    if (getFrameCount() > 0) {
      cells.get(cur_frame).paint(g, 0, 0, hflip, vflip, getFilter());
      int delay = cells.get(cur_frame).getDelay();
      // g.setFont(GamePane.getFont(0));
      // g.drawString("delay="+delay,0,0);
      // GamePane.getFont(0).drawString(0,0,"delay="+delay,Color.white);
    }
  }

  public void setAnimate(boolean animate) {
    this.animate = animate;
  }

  public void setCells(SpriteGroup cells) {
    cur_frame = 0;
    this.cells = cells;
  }

  public void setCur_frame(int cur_frame) {
    if (cur_frame >= 0 && cur_frame < getFrameCount())
      this.cur_frame = cur_frame;
  }

  public void setDelay(int delay) {
    this.delay = delay;
  }

  /**
   * @param direction
   *            The direction to set.
   */
  public void setDirection(int direction) {
    this.direction = direction;
  }

  /**
   * @param hflip
   *            The hflip to set.
   */
  public void setHflip(boolean hflip) {
    this.hflip = hflip;
  }

  public void setKeyName(String keyName) {
    if (sprites != null && !keyName.equals(this.keyName)) {
      this.keyName = keyName;
      cells = sprites.getGroup(keyName);
      cur_frame = 0;
    }
  }

  public void setSprites(SpriteManager sprites) {
    this.sprites = sprites;
    if (sprites != null && keyName != null)
      cells = sprites.getGroup(keyName);
  }

  /**
   * @param vflip
   *            The vflip to set.
   */
  public void setVflip(boolean vflip) {
    this.vflip = vflip;
  }

  public void stepFrame(int step) {
    if (direction == 1) {
      cur_frame += step;
      if (cur_frame >= getFrameCount())
        cur_frame = 0;
    } else {
      cur_frame -= step;
      if (cur_frame < 0)
        cur_frame = getFrameCount() - 1;
    }
  }
}
TOP

Related Classes of kku.cs.fgl.actor.SpriteActor

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.