From: Kimmo R. <ki...@us...> - 2010-07-14 23:16:44
|
Update of /cvsroot/arianne/stendhal/src/games/stendhal/client/gui/stats In directory sfp-cvsdas-4.v30.ch3.sourceforge.com:/tmp/cvs-serv2225/src/games/stendhal/client/gui/stats Modified Files: StatsPanel.java StatsPanelController.java Added Files: KarmaIndicator.java Log Message: Added graphical karma display Index: StatsPanelController.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/client/gui/stats/StatsPanelController.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** StatsPanelController.java 2 May 2010 20:53:52 -0000 1.5 --- StatsPanelController.java 14 Jul 2010 23:16:35 -0000 1.6 *************** *** 5,8 **** --- 5,10 ---- import java.beans.PropertyChangeSupport; + import org.apache.log4j.Logger; + import marauroa.common.game.RPObject; import marauroa.common.game.RPSlot; *************** *** 92,95 **** --- 94,100 ---- listener = new GrumpyChangeListener(); pcs.addPropertyChangeListener("grumpy", listener); + + listener = new KarmaChangeListener(); + pcs.addPropertyChangeListener("karma", listener); } *************** *** 238,241 **** --- 243,264 ---- /** + * Listener for karma changes. + */ + private class KarmaChangeListener implements PropertyChangeListener { + public void propertyChange(final PropertyChangeEvent event) { + if (event == null) { + return; + } + + try { + String newKarma = (String) event.getNewValue(); + panel.setKarma(Double.parseDouble(newKarma)); + } catch (NumberFormatException e) { + Logger.getLogger(StatsPanelController.class).error("Invalid karma value", e); + } + } + } + + /** * Listener for grumpy status changes. */ Index: StatsPanel.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/client/gui/stats/StatsPanel.java,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** StatsPanel.java 17 Jun 2010 19:20:08 -0000 1.14 --- StatsPanel.java 14 Jul 2010 23:16:35 -0000 1.15 *************** *** 8,11 **** --- 8,12 ---- import java.util.HashMap; + import javax.swing.BorderFactory; import javax.swing.JLabel; import javax.swing.JPanel; *************** *** 17,20 **** --- 18,22 ---- private final StatLabel hpLabel, atkLabel, defLabel, xpLabel, levelLabel, moneyLabel; private final StatusIconPanel statusIcons; + private final KarmaIndicator karmaIndicator; private int hp, maxhp, atk, atkxp, weaponAtk, def, defxp, itemDef, xp, level; /** *************** *** 33,36 **** --- 35,43 ---- add(statusIcons); + karmaIndicator = new KarmaIndicator(); + karmaIndicator.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); + karmaIndicator.setToolTipText("Karma"); + add(karmaIndicator); + hpLabel = new StatLabel(); add(hpLabel); *************** *** 119,122 **** --- 126,138 ---- } + /** + * Set player karma. + * + * @param karma + */ + protected void setKarma(double karma) { + karmaIndicator.setValue(karma); + } + protected void setLevel(int level) { this.level = level; --- NEW FILE: KarmaIndicator.java --- package games.stendhal.client.gui.stats; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Insets; import games.stendhal.client.sprite.Sprite; import games.stendhal.client.sprite.SpriteStore; import javax.swing.JComponent; /** * A bar indicator component for karma. */ public class KarmaIndicator extends JComponent { /** * Scaling factor for interpreting karma to bar length. Smaller means * smaller change in karma bar for a karma change. */ private static final double SCALING = 0.02; private static final String IMAGE_FILE_NAME = "data/gui/karma_scale.png"; /** Karma scaled to pixels */ private int karma; private final Sprite image; /** * Create a new karma indicator. */ public KarmaIndicator() { final SpriteStore store = SpriteStore.get(); image = store.getSprite(IMAGE_FILE_NAME); // We don't draw the background setOpaque(false); } /** * Set the karma value. * * @param karma */ public void setValue(double karma) { this.karma = scale(karma); repaint(); } @Override public Dimension getPreferredSize() { Dimension pref = new Dimension(image.getWidth(), image.getHeight()); Insets insets = getInsets(); pref.width += insets.left + insets.right; pref.height += insets.top + insets.bottom; return pref; } /** * Scale a karma value to bar length. * * @param karma player karma * @return length of the drawn bar in pixels */ private int scale(double karma) { // Scale to ]-1, 1[ double normalized = Math.atan(SCALING * karma) / Math.PI * 2; // ...and then to ]0, image.getWidth()[ return (int) (image.getWidth() / 2 + normalized * image.getWidth() / 2); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); Insets insets = getInsets(); // Paint black what is not covered by the colored bar g.setColor(Color.BLACK); g.fillRect(insets.left, insets.top, image.getWidth(), image.getHeight()); // Draw appropriate length of the image g.clipRect(insets.left, insets.top, karma, getHeight()); image.draw(g, insets.left, insets.top); } } |