From 29c2cfddd105213c48f1cf0eada9ab993418200c Mon Sep 17 00:00:00 2001 From: Ray Greenwell Date: Thu, 13 Oct 2005 19:00:08 +0000 Subject: [PATCH] Some optimizations and cleanup, since sprites are already sorted by render order in our internal list. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3733 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../media/sprite/SpriteManager.java | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/java/com/threerings/media/sprite/SpriteManager.java b/src/java/com/threerings/media/sprite/SpriteManager.java index e1545762c..6172be91a 100644 --- a/src/java/com/threerings/media/sprite/SpriteManager.java +++ b/src/java/com/threerings/media/sprite/SpriteManager.java @@ -81,14 +81,14 @@ public class SpriteManager extends AbstractMediaManager * and sprites with bounds that contain the supplied point are further * checked for a non-transparent at the specified location. * - * @param list the list to fill with any intersecting sprites. + * @param list the list to fill with any intersecting sprites, the + * sprites with the highest render order provided first. * @param x the x (screen) coordinate to be checked. * @param y the y (screen) coordinate to be checked. */ public void getHitSprites (List list, int x, int y) { - int size = _media.size(); - for (int ii = 0; ii < size; ii++) { + for (int ii = _media.size() - 1; ii >= 0; ii--) { Sprite sprite = (Sprite)_media.get(ii); if (sprite.hitTest(x, y)) { list.add(sprite); @@ -106,18 +106,14 @@ public class SpriteManager extends AbstractMediaManager */ public Sprite getHighestHitSprite (int x, int y) { - int size = _media.size(), - highestLayer = Integer.MIN_VALUE; - Sprite highestSprite = null; - for (int ii = 0; ii < size; ii++) { + // since they're stored in lowest -> highest order.. + for (int ii = _media.size() - 1; ii >= 0; ii--) { Sprite sprite = (Sprite)_media.get(ii); - if (sprite.hitTest(x, y) && - sprite.getRenderOrder() > highestLayer) { - highestSprite = sprite; - highestLayer = sprite.getRenderOrder(); + if (sprite.hitTest(x, y)) { + return sprite; } } - return highestSprite; + return null; } /**