diff options
Diffstat (limited to 'java/gjt/animation')
-rw-r--r-- | java/gjt/animation/CollisionArena.java | 39 | ||||
-rw-r--r-- | java/gjt/animation/CollisionDetector.java | 24 | ||||
-rw-r--r-- | java/gjt/animation/EdgeCollisionDetector.java | 53 | ||||
-rw-r--r-- | java/gjt/animation/Playfield.java | 140 | ||||
-rw-r--r-- | java/gjt/animation/Sequence.java | 119 | ||||
-rw-r--r-- | java/gjt/animation/Sprite.java | 191 | ||||
-rw-r--r-- | java/gjt/animation/SpriteCollisionDetector.java | 45 |
7 files changed, 0 insertions, 611 deletions
diff --git a/java/gjt/animation/CollisionArena.java b/java/gjt/animation/CollisionArena.java deleted file mode 100644 index defb1a6d86b..00000000000 --- a/java/gjt/animation/CollisionArena.java +++ /dev/null @@ -1,39 +0,0 @@ -package gjt.animation; - -import java.awt.Dimension; -import java.awt.Insets; -import java.util.Vector; -import gjt.Orientation; - -/** - * A CollisionArena is defined as an arena in which collisions - * may take place.<p> - * - * CollisionArenas must be able to report their size and - * insets, and return a Vector of the Sprites contained in the - * arena.<p> - * - * CollisionArenas must also implement two methods for handling - * sprite and edge collisions, respectively. - * - * @version 1.0, Apr 1 1996 - * @author David Geary - * @see Playfield - * @see CollisionDetector - * @see EdgeCollisionDetector - * @see SpriteCollisionDetector - * @see gjt.test.SimpleAnimationTest - * @see gjt.test.BumpAnimationTest - * @see gjt.test.TwoDrinkersAnimationTest - */ -public interface CollisionArena { - abstract public Vector getSprites(); - abstract public Dimension getSize (); - abstract public Insets getInsets (); - - abstract public void spriteCollision(Sprite sprite, - Sprite other); - - abstract public void edgeCollision(Sprite sprite, - Orientation orient); -} diff --git a/java/gjt/animation/CollisionDetector.java b/java/gjt/animation/CollisionDetector.java deleted file mode 100644 index ff05f16c6d3..00000000000 --- a/java/gjt/animation/CollisionDetector.java +++ /dev/null @@ -1,24 +0,0 @@ -package gjt.animation; - -/** - * Collision detectors detect collisions that take place within - * a CollisionArena. - * - * @version 1.0, Apr 1 1996 - * @author David Geary - * @see CollisionArena - * @see EdgeCollisionDetector - * @see SpriteCollisionDetector - * @see gjt.test.SimpleAnimationTest - * @see gjt.test.BumpAnimationTest - * @see gjt.test.TwoDrinkersAnimationTest - */ -abstract public class CollisionDetector { - protected CollisionArena arena; - - abstract public void detectCollisions(); - - public CollisionDetector(CollisionArena arena) { - this.arena = arena; - } -} diff --git a/java/gjt/animation/EdgeCollisionDetector.java b/java/gjt/animation/EdgeCollisionDetector.java deleted file mode 100644 index 8624b7c2f28..00000000000 --- a/java/gjt/animation/EdgeCollisionDetector.java +++ /dev/null @@ -1,53 +0,0 @@ -package gjt.animation; - -import java.awt.*; -import java.util.Enumeration; -import java.util.Vector; -import gjt.Orientation; - -/** - * A CollisionDetector that detects collisions between Sprites - * and the edges of the CollisionArena in which they reside.<p> - * - * @version 1.0, Apr 1 1996 - * @author David Geary - * @see CollisionDetector - * @see Sprite - * @see gjt.test.SimpleAnimationTest - * @see gjt.test.BumpAnimationTest - * @see gjt.test.TwoDrinkersAnimationTest - */ -public class EdgeCollisionDetector extends CollisionDetector { - public EdgeCollisionDetector(CollisionArena arena) { - super(arena); - } - public void detectCollisions() { - Enumeration sprites = arena.getSprites().elements(); - Dimension arenaSize = arena.getSize(); - Insets arenaInsets = arena.getInsets(); - Sprite sprite; - - while(sprites.hasMoreElements()) { - sprite = (Sprite)sprites.nextElement(); - - Point nl = sprite.nextLocation (); - Point mv = sprite.getMoveVector(); - int nextRightEdge = nl.x + sprite.width(); - int nextBottomEdge = nl.y + sprite.height(); - int arenaBottomEdge = arenaSize.height - - arenaInsets.bottom; - int arenaRightEdge = arenaSize.width - - arenaInsets.right; - - if(nextRightEdge > arenaRightEdge) - arena.edgeCollision(sprite, Orientation.LEFT); - else if(nl.x < arenaInsets.left) - arena.edgeCollision(sprite, Orientation.RIGHT); - - if(nextBottomEdge > arenaBottomEdge) - arena.edgeCollision(sprite, Orientation.BOTTOM); - else if(nl.y < arenaInsets.top) - arena.edgeCollision(sprite, Orientation.TOP); - } - } -} diff --git a/java/gjt/animation/Playfield.java b/java/gjt/animation/Playfield.java deleted file mode 100644 index 386c0fb24c4..00000000000 --- a/java/gjt/animation/Playfield.java +++ /dev/null @@ -1,140 +0,0 @@ -package gjt.animation; - -import java.awt.*; -import java.util.Enumeration; -import java.util.Vector; -import gjt.Util; - -/** - * A surface upon which Sprites are animated. Playfields are - * responsible for animating the sprites.<p> - * - * Each Playfield comes complete with two collision detectors: - * an edge collision detector and a sprite collision detector. - * - * Playfield is an abstract class: extensions must implement - * the following methods: - * <dl> - * <dd> void paintBackground(Graphics) - * <dd> void void spriteCollision(Sprite sprite, Sprite other) - * <dd> void void edgeCollision (Sprite sprite, Sprite other) - * </dl> - * - * @version 1.0, Apr 1 1996 - * @author David Geary - * @see CollisionArena - * @see Sprite - * @see SpriteCollisionDetector - * @see EdgeCollisionDetector - * @see gjt.test.SimpleAnimationTest - * @see gjt.test.BumpAnimationTest - * @see gjt.test.TwoDrinkersAnimationTest - */ -public abstract class Playfield extends Canvas - implements Runnable, - CollisionArena { - protected Vector sprites = new Vector(); - private boolean running = false; - private Insets insets = new Insets(0,0,0,0); - - private Thread animationThread; - private Image bgoffscreen, - workplaceBuffer; - private Dimension offscreenSize; - private EdgeCollisionDetector edgeCollisionDetector; - private SpriteCollisionDetector spriteCollisionDetector; - - abstract public void paintBackground(Graphics g); - - public Playfield() { - edgeCollisionDetector = - new EdgeCollisionDetector(this); - spriteCollisionDetector = - new SpriteCollisionDetector(this); - } - public void stop () { running = false; } - public boolean running () { return running; } - public Dimension getSize () { return size(); } - public Insets getInsets () { return insets; } - public Vector getSprites() { return sprites; } - - public void addSprite(Sprite sprite) { - sprites.addElement(sprite); - } - public void setInsets(Insets insets) { - this.insets = insets; - } - public void start() { - animationThread = new Thread(this); - running = true; - animationThread.start(); - } - public void paint(Graphics g) { - if(needNewOffscreenBuffer()) { - workplaceBuffer = createOffscreenImage(size()); - bgoffscreen = createOffscreenImage(size()); - paintBackground(bgoffscreen.getGraphics()); - } - g.drawImage(bgoffscreen, 0, 0, this); - paintSprites(); - } - public void reshape(int x, int y, int w, int h) { - super.reshape(x,y,w,h); - repaint(); - } - public void run() { - while(running == true) { - edgeCollisionDetector.detectCollisions (); - spriteCollisionDetector.detectCollisions(); - - animateSprites(); - Thread.currentThread().yield(); - } - animationThread = null; - } - private boolean needNewOffscreenBuffer() { - return (workplaceBuffer == null || - bgoffscreen == null || - size().width != offscreenSize.width || - size().height != offscreenSize.height); - } - private Image createOffscreenImage(Dimension size) { - Image image = createImage(size.width, size.height); - Util.waitForImage(this, image); - offscreenSize = size; - return image; - } - protected void animateSprites() { - Sprite nextSprite; - Enumeration e = sprites.elements(); - - while(e.hasMoreElements()) { - nextSprite = (Sprite)e.nextElement(); - nextSprite.animate(); - } - } - protected void paintSprites() { - Sprite nextSprite; - Enumeration e = sprites.elements(); - - while(e.hasMoreElements()) { - nextSprite = (Sprite)e.nextElement(); - paintSprite(nextSprite); - } - } - protected void paintSprite(Sprite sprite) { - Graphics g = getGraphics(); - Graphics wpg = workplaceBuffer.getGraphics(); - Rectangle clip = sprite.clipRect(); - - wpg.clipRect(clip.x, clip.y, clip.width, clip.height); - wpg.drawImage(bgoffscreen, 0, 0, this); - sprite.paint(wpg); - - g.clipRect (clip.x, clip.y, clip.width, clip.height); - g.drawImage(workplaceBuffer, 0, 0, this); - - g.dispose(); - wpg.dispose(); - } -} diff --git a/java/gjt/animation/Sequence.java b/java/gjt/animation/Sequence.java deleted file mode 100644 index 7b777ecd0d8..00000000000 --- a/java/gjt/animation/Sequence.java +++ /dev/null @@ -1,119 +0,0 @@ -package gjt.animation; - -import java.util.Vector; -import java.awt.*; -import java.awt.image.ImageObserver; -import gjt.Util; -import gjt.Stopwatch; - -/** - * A sequence of images used in an animation. Each sequence - * keeps track of the number of cycles the sequence is to run, - * and reports whether or not the cycles have been completed - * via the boolean animationOver() method. - * - * @version 1.0, Apr 1 1996 - * @author David Geary - * @see Sprite - * @see Playfield - * @see gjt.test.SimpleAnimationTest - * @see gjt.test.BumpAnimationTest - * @see gjt.test.TwoDrinkersAnimationTest - */ -public class Sequence { - private static long infiniteCycle = -1; - - private Vector cells = new Vector(); - private Point lastPaintLocation = new Point(0,0); - private Stopwatch cellAdvanceTimer = new Stopwatch(); - private Image currentImage, lastImagePainted; - private long cellAdvanceInterval = 0, - currentCycle = 0, - cyclesPerAnimation = 0; - - public Sequence() { } - - public Sequence(Component component, Image[] images) { - for(int i=0; i < images.length; ++i) { - addImage(component, images[i]); - } - cyclesPerAnimation = infiniteCycle; - } - public void start () { cellAdvanceTimer.start(); } - public Image getLastImage () { return lastImagePainted; } - public Point getLastLocation() { return lastPaintLocation; } - public int getNumImages () { return cells.size(); } - - public long getCurrentCycle() { return currentCycle; } - public void setCurrentCycle(long c) { currentCycle = c; } - - public long getCyclesPerAnimation() { - return currentCycle; - } - public void setCyclesPerAnimation(long cyclesPerAnimation) { - this.cyclesPerAnimation = cyclesPerAnimation; - } - public Image getFirstImage() { - return (Image)cells.firstElement(); - } - public Image getCurrentImage() { - return currentImage; - } - public int getCurrentImagePosition() { - return cells.indexOf(currentImage); - } - public Image getNextImage() { - int index = cells.indexOf(currentImage); - Image image; - - if(index == cells.size() - 1) - image = (Image)cells.elementAt(0); - else - image = (Image)cells.elementAt(index + 1); - - return image; - } - public void setAdvanceInterval(long interval) { - cellAdvanceInterval = interval; - } - public void addImage(Component component, Image image) { - if(currentImage == null) - currentImage = image; - - Util.waitForImage(component, image); - cells.addElement(image); - } - public void removeImage(Image image) { - cells.removeElement(image); - } - public boolean needsRepainting(Point point) { - return (lastPaintLocation.x != point.x || - lastPaintLocation.y != point.y || - lastImagePainted != currentImage); - } - public void paint(Graphics g, int x, int y, - ImageObserver observer) { - g.drawImage(currentImage, x, y, observer); - lastPaintLocation.x = x; - lastPaintLocation.y = y; - lastImagePainted = currentImage; - } - public boolean isAtLastImage() { - return getCurrentImagePosition() == (cells.size() - 1); - } - public boolean timeToAdvanceCell() { - return - cellAdvanceTimer.elapsedTime() > cellAdvanceInterval; - } - public boolean animationOver() { - return (cyclesPerAnimation != infiniteCycle) && - (currentCycle >= cyclesPerAnimation); - } - public void advance() { - if(isAtLastImage()) - ++currentCycle; - - currentImage = getNextImage(); - cellAdvanceTimer.reset(); - } -} diff --git a/java/gjt/animation/Sprite.java b/java/gjt/animation/Sprite.java deleted file mode 100644 index e7840b7615b..00000000000 --- a/java/gjt/animation/Sprite.java +++ /dev/null @@ -1,191 +0,0 @@ -package gjt.animation; - -import java.awt.*; -import java.util.Vector; -import gjt.Assert; -import gjt.Stopwatch; -import gjt.Util; - -/** - * A sequence of images which are animated and moved about on - * a Playfield.<p> - * - * Each Sprite is constructed with a reference to it's - * Playfield, a Sequence, and a beginning position for it's - * upper left hand corner.<p> - * - * A Sprite's animation is controlled by invoking the following - * methods: - *<dl> - *<dd> setMoveVector(Point) - *<dd> setMoveInterval(long) - *<dd> setImageChangeInterval(long) - *<dd> setMainSequence(Sequence) - *<dd> setSequence(Sequence) - *</dl> - * - * @version 1.0, Apr 1 1996 - * @author David Geary - * @see Sequence - * @see Playfield - * @see SpriteCollisionDetector - * @see gjt.test.SimpleAnimationTest - * @see gjt.test.BumpAnimationTest - * @see gjt.test.TwoDrinkersAnimationTest - */ -public class Sprite { - private Playfield field; - private Sequence currentSequence, mainSequence; - private Stopwatch moveTimer = new Stopwatch(); - - private Point ulhc = new Point(0,0); - private Point start = new Point(0,0); - private Point moveVector = new Point(1,1); - - private Rectangle clip = new Rectangle(0,0); - private Rectangle curBounds, lastBounds; - - private int width, height; - private long moveInterval = 0; - - public Sprite(Playfield field, - Sequence sequence, - Point ulhc) { - Assert.notNull(field); - Assert.notNull(sequence); - Assert.notNull(ulhc); - - this.field = field; - this.ulhc = ulhc; - start.x = ulhc.x; - start.y = ulhc.y; - - setSequence(sequence); - setMainSequence(sequence); - - initializeBounds(); - moveTimer.start(); - currentSequence.start(); - } - public Playfield getPlayfield() { return field; } - public Rectangle clipRect () { return clip; } - public Rectangle curBounds () { return curBounds; } - - public int width () { return width; } - public int height () { return height; } - public void reverseX () { moveVector.x = 0-moveVector.x; } - public void reverseY () { moveVector.y = 0-moveVector.y; } - public void reverse () { reverseX(); reverseY(); } - public Point start () { return start; } - - public void setMoveVector (Point p) { moveVector = p; } - public Point getMoveVector() { return moveVector; } - - public void play(Sequence sequence, long cycles) { - setSequence(sequence); - sequence.setCyclesPerAnimation(cycles); - sequence.setCurrentCycle(0); - } - public void animate() { - if(currentSequence.animationOver()) - currentSequence = mainSequence; - - if(timeToChangeImage()) currentSequence.advance(); - if(timeToMove()) move(); - if(needsRepainting()) field.paintSprite(this); - } - public void setMainSequence(Sequence sequence) { - mainSequence = sequence; - } - public Sequence getMainSequence() { - return mainSequence; - } - public void setSequence(Sequence sequence) { - currentSequence = sequence; - - if(curBounds != null) - updateBounds(); - } - public Sequence getSequence() { - return currentSequence; - } - public boolean intersects(Sprite otherSprite) { - return curBounds().intersects(otherSprite.curBounds()); - } - public boolean willIntersect(Sprite otherSprite) { - return - nextBounds().intersects(otherSprite.nextBounds()); - } - public boolean timeToMove() { - return moveTimer.elapsedTime() > moveInterval; - } - public boolean timeToChangeImage() { - return currentSequence.timeToAdvanceCell(); - } - public void moveTo(Point p) { - ulhc = p; - moveTimer.reset(); - } - public boolean needsRepainting() { - return currentSequence.needsRepainting(ulhc); - } - public void setMoveInterval(long interval) { - moveInterval = interval; - } - public void setImageChangeInterval(long interval) { - currentSequence.setAdvanceInterval(interval); - } - public void move() { - ulhc.x += moveVector.x; - ulhc.y += moveVector.y; - updateBounds(); - moveTimer.reset(); - } - public Point location() { - return ulhc; - } - public Point nextLocation() { - return new Point(ulhc.x + moveVector.x, - ulhc.y + moveVector.y); - } - public Rectangle nextBounds() { - Image nextImage = currentSequence.getNextImage(); - Point nextLoc = nextLocation(); - - return new Rectangle( - nextLoc.x, nextLoc.y, width, height); - } - public void paint(Graphics g) { - currentSequence.paint(g, ulhc.x, ulhc.y, field); - } - private void initializeBounds() { - Image curImage = currentSequence.getCurrentImage(); - - width = curImage.getWidth (field); - height = curImage.getHeight(field); - - curBounds = - new Rectangle(ulhc.x, ulhc.y, width, height); - - lastBounds = new Rectangle(curBounds.x, - curBounds.y, - curBounds.width, - curBounds.height); - - clip = lastBounds.union(curBounds); - } - private void updateBounds() { - Image curImage = currentSequence.getCurrentImage(); - - lastBounds.width = curBounds.width; - lastBounds.height = curBounds.height; - - curBounds.width = width = curImage.getWidth(field); - curBounds.height = height = curImage.getHeight(field); - - lastBounds.move(curBounds.x, curBounds.y); - curBounds.move (ulhc.x, ulhc.y); - - clip = lastBounds.union(curBounds); - } -} diff --git a/java/gjt/animation/SpriteCollisionDetector.java b/java/gjt/animation/SpriteCollisionDetector.java deleted file mode 100644 index 2ef37d79208..00000000000 --- a/java/gjt/animation/SpriteCollisionDetector.java +++ /dev/null @@ -1,45 +0,0 @@ -package gjt.animation; - -import java.awt.*; -import java.util.Enumeration; -import java.util.Vector; -import gjt.Orientation; - -/** - * A CollisionDetector that detects collisions between Sprites - * residing in a CollisionArena.<p> - * - * @version 1.0, Apr 1 1996 - * @author David Geary - * @see CollisionArena - * @see CollisionDetector - * @see Sprite - * @see gjt.test.SimpleAnimationTest - * @see gjt.test.BumpAnimationTest - * @see gjt.test.TwoDrinkersAnimationTest - */ -public class SpriteCollisionDetector extends CollisionDetector { - public SpriteCollisionDetector(CollisionArena arena) { - super(arena); - } - public void detectCollisions() { - Enumeration sprites = arena.getSprites().elements(); - Sprite sprite; - - while(sprites.hasMoreElements()) { - sprite = (Sprite)sprites.nextElement(); - - Enumeration otherSprites = - arena.getSprites().elements(); - Sprite otherSprite; - - while(otherSprites.hasMoreElements()) { - otherSprite=(Sprite)otherSprites.nextElement(); - - if(otherSprite != sprite) - if(sprite.willIntersect(otherSprite)) - arena.spriteCollision(sprite,otherSprite); - } - } - } -} |