Package pathfinder.gui.mapElement

Source Code of pathfinder.gui.mapElement.PathfinderMonsterElement

package pathfinder.gui.mapElement;

import generic.actions.DoDamage;
import generic.actions.DoHeal;
import generic.gui.mapElement.BarElement;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.List;

import net.alteiar.WaitBeanListener;
import net.alteiar.beans.map.elements.IAction;
import net.alteiar.beans.map.elements.MapElement;
import net.alteiar.beans.map.size.MapElementSize;
import net.alteiar.beans.map.size.MapElementSizeSquare;
import net.alteiar.campaign.CampaignClient;
import net.alteiar.newversion.shared.bean.BasicBean;
import net.alteiar.shared.UniqueID;

import org.simpleframework.xml.Element;

import pathfinder.bean.unit.monster.PathfinderMonster;

public class PathfinderMonsterElement extends MapElement {

  private static final long serialVersionUID = 1L;

  public static final String PROP_WIDTH_PROPERTY = "width";
  public static final String PROP_HEIGHT_PROPERTY = "height";

  @Element
  private UniqueID monsterId;
  @Element
  private MapElementSize width;
  @Element
  private MapElementSize height;

  private transient BarElement damageBar;

  public PathfinderMonsterElement() {
    damageBar = new BarElement(Color.RED, Color.GREEN);
  }

  public PathfinderMonsterElement(Point point, PathfinderMonster character) {
    this(point, character.getId());
  }

  public PathfinderMonsterElement(Point point, UniqueID characterId) {
    super(point);

    this.monsterId = characterId;
    width = new MapElementSizeSquare(1);
    height = new MapElementSizeSquare(1);
    damageBar = new BarElement(Color.RED, Color.GREEN);
  }

  public PathfinderMonster getMonster() {
    return CampaignClient.getInstance().getBean(monsterId);
  }

  @Override
  public void addPropertyChangeListener(final PropertyChangeListener listener) {
    super.addPropertyChangeListener(listener);
    PathfinderMonster monster = getMonster();

    if (monster == null) {
      CampaignClient.getInstance().addWaitBeanListener(
          new WaitBeanListener() {
            @Override
            public UniqueID getBeanId() {
              return monsterId;
            }

            @Override
            public void beanReceived(BasicBean bean) {
              bean.addPropertyChangeListener(listener);
            }
          });
    } else {
      getMonster().addPropertyChangeListener(listener);
    }
  }

  @Override
  public void removePropertyChangeListener(PropertyChangeListener listener) {
    super.removePropertyChangeListener(listener);
    getMonster().removePropertyChangeListener(listener);
  }

  @Override
  public Double getWidthPixels() {
    return width.getPixels(getScale());
  }

  @Override
  public Double getHeightPixels() {
    return height.getPixels(getScale());
  }

  @Override
  protected void drawElement(Graphics2D g) {
    Graphics2D g2 = (Graphics2D) g.create();
    BufferedImage background = getMonster().getMonsterImage();

    Point position = getPosition();
    int x = (int) position.getX();
    int y = (int) position.getY();
    int width = getWidthPixels().intValue();
    int height = getHeightPixels().intValue();

    if (background != null) {
      g2.drawImage(background, x, y, width, height, null);
    } else {
      g2.fillRect(x, y, width, height);
    }

    // Draw life bar
    // add 0.5 because cast round to lower bound
    int squareCount = Math.min(1,
        (int) ((width / getScale().getPixels()) + 0.5));

    int heightLife = Math.max(5 * squareCount, 5);
    int yLife = y + height - heightLife;
    int widthLife = width;

    Integer currentHp = getMonster().getCurrentHp();
    Integer totalHp = getMonster().getTotalHp();

    Float ratio = Math.min(1.0f, currentHp / (float) totalHp);

    damageBar.drawBar(g2, x, yLife, heightLife, widthLife, ratio);
    g2.dispose();
  }

  @Override
  public Boolean contain(Point p) {
    Point position = getPosition();
    return new Rectangle2D.Double(position.getX(), position.getY(),
        getWidthPixels(), getHeightPixels()).contains(p);
  }

  @Override
  public List<IAction> getActions() {
    ArrayList<IAction> actions = new ArrayList<IAction>();
    actions.add(new DoDamage(getMonster()));
    actions.add(new DoHeal(getMonster()));
    return actions;
  }

  public UniqueID getCharactedId() {
    return monsterId;
  }

  public void setCharactedId(UniqueID charactedId) {
    this.monsterId = charactedId;
  }

  public MapElementSize getWidth() {
    return width;
  }

  public void setWidth(MapElementSize width) {
    MapElementSize oldValue = this.width;
    if (notifyRemote(PROP_WIDTH_PROPERTY, oldValue, width)) {
      this.width = width;
      notifyLocal(PROP_WIDTH_PROPERTY, oldValue, width);
    }
  }

  public MapElementSize getHeight() {
    return height;
  }

  public void setHeight(MapElementSize height) {
    MapElementSize oldValue = this.height;
    if (notifyRemote(PROP_HEIGHT_PROPERTY, oldValue, height)) {
      this.height = height;
      notifyLocal(PROP_HEIGHT_PROPERTY, oldValue, height);
    }
  }

  @Override
  public String getNameFormat() {
    if (getWidth().getShortUnitFormat().equals(
        getHeight().getShortUnitFormat())) {
      return getMonster().getName() + " " + getWidth().getValue() + "x"
          + getHeight().getValue() + " "
          + getWidth().getShortUnitFormat();
    }
    return getMonster().getName() + " " + getWidth().getValue()
        + getWidth().getShortUnitFormat() + "x"
        + getHeight().getValue() + " "
        + getHeight().getShortUnitFormat();
  }
}
TOP

Related Classes of pathfinder.gui.mapElement.PathfinderMonsterElement

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.