748a0855a1
angle-on view. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@770 542714f4-19e9-0310-aa3c-eee0fc999fb1
132 lines
3.3 KiB
Java
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;
|
|
}
|