Package games.stendhal.client.gui.j2d.entity

Source Code of games.stendhal.client.gui.j2d.entity.StackableItem2DView

/* $Id: StackableItem2DView.java,v 1.19 2010/12/13 21:41:46 kiheru Exp $ */
/***************************************************************************
*                   (C) Copyright 2003-2010 - Stendhal                    *
***************************************************************************
***************************************************************************
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU General Public License as published by  *
*   the Free Software Foundation; either version 2 of the License, or     *
*   (at your option) any later version.                                   *
*                                                                         *
***************************************************************************/
package games.stendhal.client.gui.j2d.entity;


import games.stendhal.client.entity.IEntity;
import games.stendhal.client.entity.StackableItem;
import games.stendhal.client.sprite.Sprite;
import games.stendhal.client.sprite.TextSprite;

import java.awt.Color;
import java.awt.Graphics2D;

/**
* The 2D view of a stackable item.
*/
public class StackableItem2DView extends Item2DView {

  /**
   * The quantity value changed.
   */
  protected boolean quantityChanged;

  /**
   * The image of the quantity.
   */
  private Sprite quantitySprite;

  /**
   * Whether to show the quantity.
   */
  protected boolean showQuantity;

  @Override
  public void initialize(final IEntity entity) {
    super.initialize(entity);
    quantitySprite = getQuantitySprite(entity);
    quantityChanged = false;
    showQuantity = true;
  }
 
  //
  // StackableItem2DView
  //

  /**
   * Get the appropriate quantity sprite.
   *
   * @param entity
   * @return A sprite representing the quantity, or <code>null</code> for
   *         none.
   */
  protected Sprite getQuantitySprite(IEntity entity) {
    int quantity;
    String label;

    quantity = ((StackableItem) entity).getQuantity();

    if (quantity <= 1) {
      return null;
    } else if (isContained() && (quantity > 9999999)) {
      label = (quantity / 1000000) + "M";
    } else if (isContained() && (quantity > 9999)) {
      label = (quantity / 1000) + "K";
    } else {
      label = Integer.toString(quantity);
    }

    return TextSprite.createTextSprite(label, Color.WHITE);
  }

  /**
   * Set whether to show the quantity value.
   *
   * @param showQuantity
   *            Whether to show the quantity.
   */
  public void setShowQuantity(final boolean showQuantity) {
    this.showQuantity = showQuantity;
  }

  //
  // Entity2DView
  //

  /**
   * Draw the entity.
   *
   * @param g2d
   *            The graphics to drawn on.
   */
  @Override
  protected void draw(final Graphics2D g2d, final int x, final int y,
      final int width, final int height) {
    super.draw(g2d, x, y, width, height);

    if (showQuantity && (quantitySprite != null)) {
      /*
       * NOTE: This has be calibrated to fit the size of an entity slot
       * visual.
       */
      int qx;

      if (isContained()) {
        // Right alignment
        qx = x + width + 5 - quantitySprite.getWidth();
      } else {
        // Center alignment
        qx = x + (width - quantitySprite.getWidth()) / 2;
      }

      quantitySprite.draw(g2d, qx, y - 5);
    }
  }

  /**
   * Set whether this view is contained, and should render in a compressed
   * (it's defined) area without clipping anything important.
   *
   * @param contained
   *            <code>true</code> if contained.
   */
  @Override
  public void setContained(final boolean contained) {
    super.setContained(contained);

    quantityChanged = true;
    markChanged();
  }

  /**
   * Update representation.
   */
  @Override
  protected void update() {
    super.update();

    IEntity entity  = this.entity;
    if (quantityChanged && (entity != null)) {
      quantitySprite = getQuantitySprite(entity);
      quantityChanged = false;
    }
  }

  //
  // EntityChangeListener
  //

  /**
   * An entity was changed.
   *
   * @param entity
   *            The entity that was changed.
   * @param property
   *            The property identifier.
   */
  @Override
  public void entityChanged(final IEntity entity, final Object property) {
    super.entityChanged(entity, property);

    if (property == StackableItem.PROP_QUANTITY) {
      quantityChanged = true;
    }
  }
}
TOP

Related Classes of games.stendhal.client.gui.j2d.entity.StackableItem2DView

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.