From ea88a4dd6874fae4d87d98c90cadb1ab46acddd8 Mon Sep 17 00:00:00 2001 From: Walter Korman Date: Fri, 18 Jan 2002 16:22:23 +0000 Subject: [PATCH] Simple animation that renders rain drops for a specified period of time. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@869 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../media/animation/RainAnimation.java | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 src/java/com/threerings/media/animation/RainAnimation.java diff --git a/src/java/com/threerings/media/animation/RainAnimation.java b/src/java/com/threerings/media/animation/RainAnimation.java new file mode 100644 index 000000000..23c09c608 --- /dev/null +++ b/src/java/com/threerings/media/animation/RainAnimation.java @@ -0,0 +1,104 @@ +// +// $Id: RainAnimation.java,v 1.1 2002/01/18 16:22:23 shaper Exp $ + +package com.threerings.media.animation; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Rectangle; + +import com.threerings.media.util.RandomUtil; + +/** + * An animation that displays raindrops spattering across an image. + */ +public class RainAnimation extends Animation +{ + /** + * Constructs a rain animation with reasonable defaults for the number + * of raindrops and their dimensions. + * + * @param bounds the bounding rectangle for the animation. + * @param delay the number of seconds the animation should last. + */ + public RainAnimation (Rectangle bounds, long delay) + { + super(bounds); + + init(delay, DEFAULT_COUNT, DEFAULT_WIDTH, DEFAULT_HEIGHT); + } + + /** + * Constructs a rain animation. + * + * @param bounds the bounding rectangle for the animation. + * @param delay the number of seconds the animation should last. + * @param count the number of raindrops to render in each frame. + * @param wid the width of a raindrop's bounding rectangle. + * @param hei the height of a raindrop's bounding rectangle. + */ + public RainAnimation ( + Rectangle bounds, long delay, int count, int wid, int hei) + { + super(bounds); + init(delay, count, wid, hei); + } + + protected void init (long delay, int count, int wid, int hei) + { + // save things off + _count = count; + _wid = wid; + _hei = hei; + + // create the raindrop array + _drops = new int[count]; + + // calculate ending time + _end = System.currentTimeMillis() + delay; + } + + // documentation inherited + public void tick (long timestamp) + { + _finished = (timestamp >= _end); + _animmgr.addDirtyRect(new Rectangle(_bounds)); + + // calculate the latest raindrop locations + for (int ii = 0; ii < _count; ii++) { + int x = RandomUtil.getInt(_bounds.width); + int y = RandomUtil.getInt(_bounds.height); + _drops[ii] = (x << 16 | y); + } + } + + // documentation inherited + public void paint (Graphics2D gfx) + { + gfx.setColor(Color.white); + for (int ii = 0; ii < _count; ii++) { + int x = _drops[ii] >> 16; + int y = _drops[ii] & 0xFFFF; + gfx.drawLine(x, y, x + _wid, y + _hei); + } + } + + /** The number of raindrops. */ + protected static final int DEFAULT_COUNT = 300; + + /** The raindrop streak dimensions. */ + protected static final int DEFAULT_WIDTH = 13; + protected static final int DEFAULT_HEIGHT = 10; + + /** The number of raindrops. */ + protected int _count; + + /** The dimensions of each raindrop's bounding rectangle. */ + protected int _wid, _hei; + + /** The raindrop locations. */ + protected int[] _drops; + + /** The ending animation time. */ + protected long _end; +}