Added ability to render animations in two distinct layers; added mechanism
whereby animations can clean up after themselves. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1130 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: Animation.java,v 1.3 2002/03/14 21:09:01 shaper Exp $
|
// $Id: Animation.java,v 1.4 2002/03/16 03:11:23 shaper Exp $
|
||||||
|
|
||||||
package com.threerings.media.animation;
|
package com.threerings.media.animation;
|
||||||
|
|
||||||
@@ -27,6 +27,25 @@ public abstract class Animation
|
|||||||
_bounds = bounds;
|
_bounds = bounds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the render order of this animation.
|
||||||
|
*/
|
||||||
|
public int getRenderOrder ()
|
||||||
|
{
|
||||||
|
return _renderOrder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the render order associated with this animation. Animations
|
||||||
|
* can be rendered in two layers; those with negative render order and
|
||||||
|
* those with positive render order. Someday animations will be
|
||||||
|
* rendered in each layer according to render order.
|
||||||
|
*/
|
||||||
|
public void setRenderOrder (int value)
|
||||||
|
{
|
||||||
|
_renderOrder = value;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called by the {@link AnimationManager} to allow the animation to
|
* Called by the {@link AnimationManager} to allow the animation to
|
||||||
* render itself to the given graphics context.
|
* render itself to the given graphics context.
|
||||||
@@ -65,6 +84,15 @@ public abstract class Animation
|
|||||||
return _finished;
|
return _finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the animation is finished and the animation manager has
|
||||||
|
* removed it from service.
|
||||||
|
*/
|
||||||
|
protected void didFinish ()
|
||||||
|
{
|
||||||
|
// nothing for now
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds an animation observer to this animation's list of observers.
|
* Adds an animation observer to this animation's list of observers.
|
||||||
*/
|
*/
|
||||||
@@ -137,6 +165,9 @@ public abstract class Animation
|
|||||||
/** The animation bounds. */
|
/** The animation bounds. */
|
||||||
protected Rectangle _bounds;
|
protected Rectangle _bounds;
|
||||||
|
|
||||||
|
/** The render order of this animation. */
|
||||||
|
protected int _renderOrder;
|
||||||
|
|
||||||
/** The list of animation observers. */
|
/** The list of animation observers. */
|
||||||
protected ArrayList _observers;
|
protected ArrayList _observers;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: AnimationManager.java,v 1.7 2002/02/19 01:23:56 mdb Exp $
|
// $Id: AnimationManager.java,v 1.8 2002/03/16 03:11:23 shaper Exp $
|
||||||
|
|
||||||
package com.threerings.media.animation;
|
package com.threerings.media.animation;
|
||||||
|
|
||||||
@@ -30,6 +30,15 @@ import com.threerings.media.util.PerformanceObserver;
|
|||||||
public class AnimationManager
|
public class AnimationManager
|
||||||
implements Interval, PerformanceObserver
|
implements Interval, PerformanceObserver
|
||||||
{
|
{
|
||||||
|
/** Constant for the front layer of animations. */
|
||||||
|
public static final int FRONT = 0;
|
||||||
|
|
||||||
|
/** Constant for the back layer of animations. */
|
||||||
|
public static final int BACK = 1;
|
||||||
|
|
||||||
|
/** Constant for all layers of animations. */
|
||||||
|
public static final int ALL = 2;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct and initialize the animation manager with a sprite
|
* Construct and initialize the animation manager with a sprite
|
||||||
* manager and the view in which the animations will take place. The
|
* manager and the view in which the animations will take place. The
|
||||||
@@ -150,14 +159,25 @@ public class AnimationManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Renders all registered animations to the given graphics context.
|
* Renders all registered animations in the given layer to the given
|
||||||
|
* graphics context.
|
||||||
|
*
|
||||||
|
* @param layer the layer to render; one of {@link #FRONT}, {@link
|
||||||
|
* #BACK}, or {@link #ALL}. The front layer contains all animations
|
||||||
|
* with a positive render order; the back layer contains all
|
||||||
|
* animations with a negative render order; all, both.
|
||||||
*/
|
*/
|
||||||
public void renderAnimations (Graphics2D gfx)
|
public void renderAnimations (Graphics2D gfx, int layer)
|
||||||
{
|
{
|
||||||
int size = _anims.size();
|
int size = _anims.size();
|
||||||
for (int ii = 0; ii < size; ii++) {
|
for (int ii = 0; ii < size; ii++) {
|
||||||
Animation anim = (Animation)_anims.get(ii);
|
Animation anim = (Animation)_anims.get(ii);
|
||||||
anim.paint(gfx);
|
int order = anim.getRenderOrder();
|
||||||
|
if ((layer == ALL) ||
|
||||||
|
(layer == FRONT && order >= 0) ||
|
||||||
|
(layer == BACK && order < 0)) {
|
||||||
|
anim.paint(gfx);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -268,7 +288,7 @@ public class AnimationManager
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* The <code>tick</code> method handles updating sprites and
|
* The <code>tick</code> method handles updating sprites and
|
||||||
* repainting the target display.
|
* animations, and repainting the target display.
|
||||||
*/
|
*/
|
||||||
protected void tick ()
|
protected void tick ()
|
||||||
{
|
{
|
||||||
@@ -343,6 +363,8 @@ public class AnimationManager
|
|||||||
anim.notifyObservers(new AnimationCompletedEvent(anim));
|
anim.notifyObservers(new AnimationCompletedEvent(anim));
|
||||||
// un-register the animation
|
// un-register the animation
|
||||||
unregisterAnimation(anim);
|
unregisterAnimation(anim);
|
||||||
|
// let the animation clean itself up as necessary
|
||||||
|
anim.didFinish();
|
||||||
// Log.info("Removed finished animation [anim=" + anim + "].");
|
// Log.info("Removed finished animation [anim=" + anim + "].");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,73 @@
|
|||||||
|
//
|
||||||
|
// $Id: SpriteAnimation.java,v 1.1 2002/03/16 03:11:23 shaper Exp $
|
||||||
|
|
||||||
|
package com.threerings.media.animation;
|
||||||
|
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.Rectangle;
|
||||||
|
|
||||||
|
import com.threerings.media.sprite.PathCompletedEvent;
|
||||||
|
import com.threerings.media.sprite.Sprite;
|
||||||
|
import com.threerings.media.sprite.SpriteEvent;
|
||||||
|
import com.threerings.media.sprite.SpriteManager;
|
||||||
|
import com.threerings.media.sprite.SpriteObserver;
|
||||||
|
|
||||||
|
public class SpriteAnimation extends Animation
|
||||||
|
implements SpriteObserver
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Constructs a sprite animation for the given sprite and adds the
|
||||||
|
* sprite to the given sprite manager. If the sprite has had a path
|
||||||
|
* set, the animation will finish when the sprite completes its path.
|
||||||
|
*/
|
||||||
|
public SpriteAnimation (SpriteManager spritemgr, Sprite sprite)
|
||||||
|
{
|
||||||
|
super(new Rectangle());
|
||||||
|
|
||||||
|
// save things off
|
||||||
|
_spritemgr = spritemgr;
|
||||||
|
_sprite = sprite;
|
||||||
|
|
||||||
|
// set up our sprite business
|
||||||
|
_sprite.addSpriteObserver(this);
|
||||||
|
_spritemgr.addSprite(_sprite);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Derived classes can override tick if they want to end the animation
|
||||||
|
* in some other way than the sprite completing a path.
|
||||||
|
*/
|
||||||
|
public void tick (long timestamp)
|
||||||
|
{
|
||||||
|
// nothing for now
|
||||||
|
}
|
||||||
|
|
||||||
|
// documentation inherited
|
||||||
|
public void paint (Graphics2D gfx)
|
||||||
|
{
|
||||||
|
// nothing for now
|
||||||
|
}
|
||||||
|
|
||||||
|
// documentation inherited
|
||||||
|
public void handleEvent (SpriteEvent event)
|
||||||
|
{
|
||||||
|
if (event instanceof PathCompletedEvent) {
|
||||||
|
_finished = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// documentation inherited
|
||||||
|
protected void didFinish ()
|
||||||
|
{
|
||||||
|
super.didFinish();
|
||||||
|
|
||||||
|
_spritemgr.removeSprite(_sprite);
|
||||||
|
_sprite = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** The sprite associated with this animation. */
|
||||||
|
protected Sprite _sprite;
|
||||||
|
|
||||||
|
/** The sprite manager managing our sprite. */
|
||||||
|
protected SpriteManager _spritemgr;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user