diff --git a/SPD-classes/src/main/java/com/watabou/noosa/Group.java b/SPD-classes/src/main/java/com/watabou/noosa/Group.java index eb7a2dc98..0148b684d 100644 --- a/SPD-classes/src/main/java/com/watabou/noosa/Group.java +++ b/SPD-classes/src/main/java/com/watabou/noosa/Group.java @@ -314,6 +314,12 @@ public class Group extends Gizmo { } public synchronized void sort(Comparator c){ - Collections.sort(members, c); + //only sort if we aren't already sorted + for (int i=0; i < length-1; i++) { + if (c.compare(members.get(i), members.get(i+1)) > 0) { + Collections.sort(members, c); + return; + } + } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java index 88956bee6..198f24c14 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java @@ -896,13 +896,13 @@ public class GameScene extends PixelScene { scene.mobs.sort(new Comparator() { @Override public int compare(Object a, Object b) { - //elements that aren't CharSprites go to the end of the list - if (a instanceof CharSprite && b instanceof CharSprite) { - return (int) Math.signum((((CharSprite) a).y + ((CharSprite) a).height()) - - (((CharSprite) b).y + ((CharSprite) b).height())); - } else if (a instanceof CharSprite){ + //elements that aren't visual go to the end of the list + if (a instanceof Visual && b instanceof Visual) { + return (int) Math.signum((((Visual) a).y + ((Visual) a).height()) + - (((Visual) b).y + ((Visual) b).height())); + } else if (a instanceof Visual){ return -1; - } else if (b instanceof CharSprite){ + } else if (b instanceof Visual){ return 1; } else { return 0;