Files
narya/src/java/com/threerings/cast/builder/SpritePanel.java
T
Michael Bayne 748a0855a1 Orient the sprite WEST rather than SOUTHWEST so that we get a nice
angle-on view.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@770 542714f4-19e9-0310-aa3c-eee0fc999fb1
2001-12-13 06:35:52 +00:00

132 lines
3.3 KiB
Java

//
// $Id: SpritePanel.java,v 1.7 2001/12/13 06:35:52 mdb Exp $
package com.threerings.cast.builder;
import java.awt.*;
import javax.swing.BorderFactory;
import javax.swing.border.BevelBorder;
import com.threerings.media.sprite.*;
import com.threerings.cast.Log;
import com.threerings.cast.*;
/**
* The sprite panel displays a character sprite centered in the panel
* suitable for user perusal.
*/
public class SpritePanel
extends AnimatedPanel
implements BuilderModelListener
{
/**
* Constructs the sprite panel.
*/
public SpritePanel (CharacterManager charmgr, BuilderModel model)
{
// save off references
_charmgr = charmgr;
_model = model;
// create managers
_spritemgr = new SpriteManager();
_animmgr = new AnimationManager(_spritemgr, this);
// create a visually pleasing border
setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
// listen to the builder model so that we can update the
// sprite when a new component is selected
_model.addListener(this);
}
// documentation inherited
protected void render (Graphics g)
{
Graphics2D gfx = (Graphics2D)g;
// clear the background
gfx.setColor(Color.lightGray);
Dimension d = getSize();
gfx.fillRect(0, 0, d.width - 1, d.height - 1);
if (_sprite == null) {
// create the sprite if it's not yet extant
generateSprite();
}
if (_sprite != null) {
// render the sprite
_sprite.paint((Graphics2D)g);
}
}
// documentation inherited
public void setBounds (Rectangle r)
{
super.setBounds(r);
centerSprite();
}
// documentation inherited
public void modelChanged (int event)
{
if (event == COMPONENT_CHANGED) {
generateSprite();
}
}
/**
* Generates a new character sprite for display to reflect the
* currently selected character components.
*/
protected void generateSprite ()
{
int components[] = _model.getSelectedComponents();
CharacterDescriptor desc = new CharacterDescriptor(components);
CharacterSprite sprite = _charmgr.getCharacter(desc);
setSprite(sprite);
}
/**
* Sets the sprite to be displayed.
*/
protected void setSprite (CharacterSprite sprite)
{
sprite.setActionSequence(StandardActions.STANDING);
sprite.setOrientation(Sprite.DIR_WEST);
_sprite = sprite;
centerSprite();
repaint();
}
/**
* Sets the sprite's location to render it centered within the panel.
*/
protected void centerSprite ()
{
if (_sprite != null) {
Dimension d = getSize();
int swid = _sprite.getWidth(), shei = _sprite.getHeight();
int x = d.width / 2, y = (d.height + shei) / 2;
_sprite.setLocation(x, y);
}
}
/** The sprite displayed by the panel. */
protected CharacterSprite _sprite;
/** The animation manager. */
protected AnimationManager _animmgr;
/** The sprite manager. */
protected SpriteManager _spritemgr;
/** The character manager. */
protected CharacterManager _charmgr;
/** The builder model. */
protected BuilderModel _model;
}