v0.8.1a: tweaked syncing on char sprites to hopefully fix rare deadlocks

This commit is contained in:
Evan Debenham
2020-06-30 21:15:04 -04:00
parent bc757ed57b
commit ea4d45da7f
4 changed files with 70 additions and 63 deletions
@@ -292,9 +292,7 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip
sleeping = false; sleeping = false;
play( die ); play( die );
if (emo != null) { hideEmo();
emo.killAndErase();
}
if (health != null){ if (health != null){
health.killAndErase(); health.killAndErase();
@@ -465,8 +463,7 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip
} }
@Override @Override
//syncronized due to EmoIcon handling public void update() {
public synchronized void update() {
super.update(); super.update();
@@ -498,10 +495,12 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip
} else { } else {
hideSleep(); hideSleep();
} }
synchronized (EmoIcon.class) {
if (emo != null && emo.alive) { if (emo != null && emo.alive) {
emo.visible = visible; emo.visible = visible;
} }
} }
}
@Override @Override
public void resetColor() { public void resetColor() {
@@ -511,30 +510,31 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip
} }
} }
public synchronized void showSleep() { public void showSleep() {
if (emo instanceof EmoIcon.Sleep) { synchronized (EmoIcon.class) {
if (!(emo instanceof EmoIcon.Sleep)) {
} else {
if (emo != null) { if (emo != null) {
emo.killAndErase(); emo.killAndErase();
} }
emo = new EmoIcon.Sleep(this); emo = new EmoIcon.Sleep(this);
emo.visible = visible; emo.visible = visible;
} }
}
idle(); idle();
} }
public synchronized void hideSleep() { public void hideSleep() {
synchronized (EmoIcon.class) {
if (emo instanceof EmoIcon.Sleep) { if (emo instanceof EmoIcon.Sleep) {
emo.killAndErase(); emo.killAndErase();
emo = null; emo = null;
} }
} }
}
public synchronized void showAlert() { public void showAlert() {
if (emo instanceof EmoIcon.Alert) { synchronized (EmoIcon.class) {
if (!(emo instanceof EmoIcon.Alert)) {
} else {
if (emo != null) { if (emo != null) {
emo.killAndErase(); emo.killAndErase();
} }
@@ -542,18 +542,20 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip
emo.visible = visible; emo.visible = visible;
} }
} }
}
public synchronized void hideAlert() { public void hideAlert() {
synchronized (EmoIcon.class) {
if (emo instanceof EmoIcon.Alert) { if (emo instanceof EmoIcon.Alert) {
emo.killAndErase(); emo.killAndErase();
emo = null; emo = null;
} }
} }
}
public synchronized void showLost() { public void showLost() {
if (emo instanceof EmoIcon.Lost) { synchronized (EmoIcon.class) {
if (!(emo instanceof EmoIcon.Lost)) {
} else {
if (emo != null) { if (emo != null) {
emo.killAndErase(); emo.killAndErase();
} }
@@ -561,21 +563,31 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip
emo.visible = visible; emo.visible = visible;
} }
} }
}
public synchronized void hideLost() { public void hideLost() {
synchronized (EmoIcon.class) {
if (emo instanceof EmoIcon.Lost) { if (emo instanceof EmoIcon.Lost) {
emo.killAndErase(); emo.killAndErase();
emo = null; emo = null;
} }
} }
}
public void hideEmo(){
synchronized (EmoIcon.class) {
if (emo != null) {
emo.killAndErase();
emo = null;
}
}
}
@Override @Override
public void kill() { public void kill() {
super.kill(); super.kill();
if (emo != null) { hideEmo();
emo.killAndErase();
}
for( State s : State.values()){ for( State s : State.values()){
remove(s); remove(s);
@@ -54,10 +54,7 @@ public class GhoulSprite extends MobSprite {
} }
public void crumple(){ public void crumple(){
if (emo != null){ hideEmo();
emo.killAndErase();
emo = null;
}
play(crumple); play(crumple);
} }
@@ -81,7 +81,7 @@ public class MimicSprite extends MobSprite {
} }
@Override @Override
public synchronized void showSleep() { public void showSleep() {
if (curAnim == hiding){ if (curAnim == hiding){
return; return;
} }
@@ -62,9 +62,7 @@ public class MobSprite extends CharSprite {
angularSpeed = Random.Int( 2 ) == 0 ? -720 : 720; angularSpeed = Random.Int( 2 ) == 0 ? -720 : 720;
am = 1; am = 1;
if (emo != null){ hideEmo();
emo.killAndErase();
}
if (health != null){ if (health != null){
health.killAndErase(); health.killAndErase();