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

View File

@@ -291,10 +291,8 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip
public void die() { public void die() {
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,8 +495,10 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip
} else { } else {
hideSleep(); hideSleep();
} }
if (emo != null && emo.alive) { synchronized (EmoIcon.class) {
emo.visible = visible; if (emo != null && emo.alive) {
emo.visible = visible;
}
} }
} }
@@ -511,61 +510,76 @@ 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.visible = visible;
} }
emo = new EmoIcon.Sleep( this );
emo.visible = visible;
} }
idle(); idle();
} }
public synchronized void hideSleep() { public void hideSleep() {
if (emo instanceof EmoIcon.Sleep) { synchronized (EmoIcon.class) {
emo.killAndErase(); if (emo instanceof EmoIcon.Sleep) {
emo = null; emo.killAndErase();
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) {
emo.killAndErase();
}
emo = new EmoIcon.Alert(this);
emo.visible = visible;
}
}
}
public void hideAlert() {
synchronized (EmoIcon.class) {
if (emo instanceof EmoIcon.Alert) {
emo.killAndErase();
emo = null;
}
}
}
public void showLost() {
synchronized (EmoIcon.class) {
if (!(emo instanceof EmoIcon.Lost)) {
if (emo != null) {
emo.killAndErase();
}
emo = new EmoIcon.Lost(this);
emo.visible = visible;
}
}
}
public void hideLost() {
synchronized (EmoIcon.class) {
if (emo instanceof EmoIcon.Lost) {
emo.killAndErase();
emo = null;
}
}
}
public void hideEmo(){
synchronized (EmoIcon.class) {
if (emo != null) { if (emo != null) {
emo.killAndErase(); emo.killAndErase();
emo = null;
} }
emo = new EmoIcon.Alert( this );
emo.visible = visible;
}
}
public synchronized void hideAlert() {
if (emo instanceof EmoIcon.Alert) {
emo.killAndErase();
emo = null;
}
}
public synchronized void showLost() {
if (emo instanceof EmoIcon.Lost) {
} else {
if (emo != null) {
emo.killAndErase();
}
emo = new EmoIcon.Lost( this );
emo.visible = visible;
}
}
public synchronized void hideLost() {
if (emo instanceof EmoIcon.Lost) {
emo.killAndErase();
emo = null;
} }
} }
@@ -573,9 +587,7 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip
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);

View File

@@ -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);
} }

View File

@@ -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;
} }

View File

@@ -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();