v2.2.0: fixed race condition errors in sortMobSprites
This commit is contained in:
@@ -881,7 +881,7 @@ public class GameScene extends PixelScene {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addMobSprite( Mob mob ) {
|
private synchronized void addMobSprite( Mob mob ) {
|
||||||
CharSprite sprite = mob.sprite();
|
CharSprite sprite = mob.sprite();
|
||||||
sprite.visible = Dungeon.level.heroFOV[mob.pos];
|
sprite.visible = Dungeon.level.heroFOV[mob.pos];
|
||||||
mobs.add( sprite );
|
mobs.add( sprite );
|
||||||
@@ -889,18 +889,21 @@ public class GameScene extends PixelScene {
|
|||||||
sortMobSprites();
|
sortMobSprites();
|
||||||
}
|
}
|
||||||
|
|
||||||
//ensures that mob sprites are drawn in the correct order, in case of overlap
|
//ensures that mob sprites are drawn from top to bottom, in case of overlap
|
||||||
public static void sortMobSprites(){
|
public static void sortMobSprites(){
|
||||||
if (scene != null){
|
if (scene != null){
|
||||||
scene.mobs.sort(new Comparator() {
|
synchronized (scene) {
|
||||||
@Override
|
scene.mobs.sort(new Comparator() {
|
||||||
public int compare(Object a, Object b) {
|
@Override
|
||||||
if (a instanceof CharSprite && b instanceof CharSprite){
|
public int compare(Object a, Object b) {
|
||||||
return ((CharSprite) a).ch.pos - ((CharSprite) b).ch.pos;
|
if (a instanceof CharSprite && b instanceof CharSprite) {
|
||||||
|
return (int) Math.signum((((CharSprite) a).y + ((CharSprite) a).height())
|
||||||
|
- (((CharSprite) b).y + ((CharSprite) b).height()));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
return 0;
|
});
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user