v0.6.1b: fixed rare crashes caused by floating text

This commit is contained in:
Evan Debenham 2017-08-23 03:43:10 -04:00
parent d71559e0cc
commit 70cce2c8b3

View File

@ -42,7 +42,7 @@ public class FloatingText extends RenderedText {
private float cameraZoom = -1;
private static SparseArray<ArrayList<FloatingText>> stacks = new SparseArray<ArrayList<FloatingText>>();
private static final SparseArray<ArrayList<FloatingText>> stacks = new SparseArray<ArrayList<FloatingText>>();
public FloatingText() {
speed.y = - DISTANCE / LIFESPAN;
@ -65,7 +65,9 @@ public class FloatingText extends RenderedText {
@Override
public void kill() {
if (key != -1) {
stacks.get( key ).remove( this );
synchronized (stacks) {
stacks.get(key).remove(this);
}
key = -1;
}
super.kill();
@ -116,30 +118,32 @@ public class FloatingText extends RenderedText {
private static void push( FloatingText txt, int key ) {
txt.key = key;
synchronized (stacks) {
txt.key = key;
ArrayList<FloatingText> stack = stacks.get( key );
if (stack == null) {
stack = new ArrayList<FloatingText>();
stacks.put( key, stack );
}
ArrayList<FloatingText> stack = stacks.get(key);
if (stack == null) {
stack = new ArrayList<FloatingText>();
stacks.put(key, stack);
}
if (stack.size() > 0) {
FloatingText below = txt;
int aboveIndex = stack.size() - 1;
while (aboveIndex >= 0) {
FloatingText above = stack.get( aboveIndex );
if (above.y + above.height() > below.y) {
above.y = below.y - above.height();
if (stack.size() > 0) {
FloatingText below = txt;
int aboveIndex = stack.size() - 1;
while (aboveIndex >= 0) {
FloatingText above = stack.get(aboveIndex);
if (above.y + above.height() > below.y) {
above.y = below.y - above.height();
below = above;
aboveIndex--;
} else {
break;
below = above;
aboveIndex--;
} else {
break;
}
}
}
}
stack.add( txt );
stack.add(txt);
}
}
}