summaryrefslogtreecommitdiff
path: root/java/gjt/animation/EdgeCollisionDetector.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/gjt/animation/EdgeCollisionDetector.java')
-rw-r--r--java/gjt/animation/EdgeCollisionDetector.java53
1 files changed, 53 insertions, 0 deletions
diff --git a/java/gjt/animation/EdgeCollisionDetector.java b/java/gjt/animation/EdgeCollisionDetector.java
new file mode 100644
index 00000000000..8624b7c2f28
--- /dev/null
+++ b/java/gjt/animation/EdgeCollisionDetector.java
@@ -0,0 +1,53 @@
+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);
+ }
+ }
+}