181fa3269d
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1342 542714f4-19e9-0310-aa3c-eee0fc999fb1
227 lines
6.3 KiB
Java
227 lines
6.3 KiB
Java
//
|
|
// $Id: CharacterSprite.java,v 1.29 2002/05/06 23:24:15 mdb Exp $
|
|
|
|
package com.threerings.cast;
|
|
|
|
import com.threerings.media.sprite.Path;
|
|
import com.threerings.media.sprite.ImageSprite;
|
|
|
|
/**
|
|
* A character sprite is a sprite that animates itself while walking
|
|
* about in a scene.
|
|
*/
|
|
public class CharacterSprite extends ImageSprite
|
|
implements StandardActions
|
|
{
|
|
/**
|
|
* Initializes this character sprite with the specified character
|
|
* descriptor and character manager. It will obtain animation data
|
|
* from the supplied character manager.
|
|
*/
|
|
public void init (CharacterDescriptor descrip, CharacterManager charmgr)
|
|
{
|
|
// keep track of this stuff
|
|
_descrip = descrip;
|
|
_charmgr = charmgr;
|
|
|
|
// assign an arbitrary starting orientation
|
|
_orient = NORTH;
|
|
|
|
// pass the buck to derived classes
|
|
didInit();
|
|
}
|
|
|
|
/**
|
|
* Called after this sprite has been initialized with its character
|
|
* descriptor and character manager. Derived classes can do post-init
|
|
* business here.
|
|
*/
|
|
protected void didInit ()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Reconfigures this sprite to use the specified character descriptor.
|
|
*/
|
|
public void setCharacterDescriptor (CharacterDescriptor descrip)
|
|
{
|
|
// keep the new descriptor
|
|
_descrip = descrip;
|
|
|
|
// reset our action which will reload our frames
|
|
setActionSequence(_action);
|
|
}
|
|
|
|
/**
|
|
* Specifies the action to use when the sprite is at rest. The default
|
|
* is <code>STANDING</code>.
|
|
*/
|
|
public void setRestingAction (String action)
|
|
{
|
|
_restingAction = action;
|
|
}
|
|
|
|
/**
|
|
* Returns the action to be used when the sprite is at rest. Derived
|
|
* classes may wish to override this method and vary the action based
|
|
* on external parameters (or randomly).
|
|
*/
|
|
public String getRestingAction ()
|
|
{
|
|
return _restingAction;
|
|
}
|
|
|
|
/**
|
|
* Specifies the action to use when the sprite is following a path.
|
|
* The default is <code>WALKING</code>.
|
|
*/
|
|
public void setFollowingPathAction (String action)
|
|
{
|
|
_followingPathAction = action;
|
|
}
|
|
|
|
/**
|
|
* Returns the action to be used when the sprite is following a path.
|
|
* Derived classes may wish to override this method and vary the
|
|
* action based on external parameters (or randomly).
|
|
*/
|
|
public String getFollowingPathAction ()
|
|
{
|
|
return _followingPathAction;
|
|
}
|
|
|
|
/**
|
|
* Sets the action sequence used when rendering the character, from
|
|
* the set of available sequences.
|
|
*/
|
|
public void setActionSequence (String action)
|
|
{
|
|
// keep track of our current action in case someone swaps out our
|
|
// character description
|
|
_action = action;
|
|
|
|
// get a reference to the action sequence so that we can obtain
|
|
// our animation frames and configure our frames per second
|
|
ActionSequence actseq = _charmgr.getActionSequence(action);
|
|
if (actseq == null) {
|
|
String errmsg = "No such action '" + action + "'.";
|
|
throw new IllegalArgumentException(errmsg);
|
|
}
|
|
|
|
try {
|
|
// obtain our animation frames for this action sequence
|
|
_aframes = _charmgr.getActionFrames(_descrip, action);
|
|
_aframes.setOrientation(_orient);
|
|
|
|
// update the sprite render attributes
|
|
setOrigin(actseq.origin.x, actseq.origin.y);
|
|
setFrameRate(actseq.framesPerSecond);
|
|
setFrames(_aframes);
|
|
|
|
} catch (NoSuchComponentException nsce) {
|
|
Log.warning("Character sprite references non-existent " +
|
|
"component [sprite=" + this + ", err=" + nsce + "].");
|
|
}
|
|
}
|
|
|
|
// documentation inherited
|
|
public void setOrientation (int orient)
|
|
{
|
|
super.setOrientation(orient);
|
|
|
|
// update the sprite frames to reflect the direction
|
|
if (_aframes != null) {
|
|
_aframes.setOrientation(orient);
|
|
setFrames(_aframes);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sets the origin coordinates representing the "base" of the
|
|
* sprite, which in most cases corresponds to the center of the
|
|
* bottom of the sprite image.
|
|
*/
|
|
public void setOrigin (int x, int y)
|
|
{
|
|
_xorigin = x;
|
|
_yorigin = y;
|
|
|
|
updateRenderOffset();
|
|
updateRenderOrigin();
|
|
}
|
|
|
|
// documentation inherited
|
|
protected void updateRenderOffset ()
|
|
{
|
|
super.updateRenderOffset();
|
|
|
|
if (_frames != null) {
|
|
// our location is based on the character origin coordinates
|
|
_rxoff = -_xorigin;
|
|
_ryoff = -_yorigin;
|
|
}
|
|
}
|
|
|
|
// documentation inherited
|
|
public void cancelMove ()
|
|
{
|
|
super.cancelMove();
|
|
halt();
|
|
}
|
|
|
|
// documentation inherited
|
|
protected void pathBeginning ()
|
|
{
|
|
super.pathBeginning();
|
|
|
|
// enable walking animation
|
|
setActionSequence(getFollowingPathAction());
|
|
setAnimationMode(TIME_BASED);
|
|
}
|
|
|
|
// documentation inherited
|
|
protected void pathCompleted ()
|
|
{
|
|
super.pathCompleted();
|
|
halt();
|
|
}
|
|
|
|
/**
|
|
* Updates the sprite animation frame to reflect the cessation of
|
|
* movement and disables any further animation.
|
|
*/
|
|
protected void halt ()
|
|
{
|
|
// only do something if we're actually animating
|
|
if (_animMode != NO_ANIMATION) {
|
|
// disable animation
|
|
setAnimationMode(NO_ANIMATION);
|
|
// come to a halt looking settled and at peace
|
|
setActionSequence(getRestingAction());
|
|
}
|
|
}
|
|
|
|
/** The action to use when at rest. */
|
|
protected String _restingAction = STANDING;
|
|
|
|
/** The action to use when following a path. */
|
|
protected String _followingPathAction = WALKING;
|
|
|
|
/** A reference to the descriptor for the character that we're
|
|
* visualizing. */
|
|
protected CharacterDescriptor _descrip;
|
|
|
|
/** A reference to the character manager that created us. */
|
|
protected CharacterManager _charmgr;
|
|
|
|
/** The action we are currently displaying. */
|
|
protected String _action;
|
|
|
|
/** The animation frames for the active action sequence in each
|
|
* orientation. */
|
|
protected ActionFrames _aframes;
|
|
|
|
/** The origin of the sprite. */
|
|
protected int _xorigin, _yorigin;
|
|
}
|