v0.7.4c: fixed various rare crash bugs

This commit is contained in:
Evan Debenham 2019-08-11 16:01:11 -04:00
parent f3909c0b2e
commit 8b4b241f8a
5 changed files with 36 additions and 21 deletions

View File

@ -189,8 +189,8 @@ public class Tilemap extends Visual {
} }
private int camX, camY, camW, camH; //private int camX, camY, camW, camH;
private int topLeft, bottomRight, length; //private int topLeft, bottomRight, length;
@Override @Override
public void draw() { public void draw() {
@ -215,7 +215,8 @@ public class Tilemap extends Visual {
updating.setEmpty(); updating.setEmpty();
} }
Camera c = Camera.main; //FIXME temporarily disabled this optimization as it is suspected to cause crashes
/*Camera c = Camera.main;
//we treat the position of the tilemap as (0,0) here //we treat the position of the tilemap as (0,0) here
camX = (int)(c.scroll.x/cellW - x/cellW); camX = (int)(c.scroll.x/cellW - x/cellW);
camY = (int)(c.scroll.y/cellH - y/cellH); camY = (int)(c.scroll.y/cellH - y/cellH);
@ -242,7 +243,7 @@ public class Tilemap extends Visual {
length = bottomRight - topLeft + 1; length = bottomRight - topLeft + 1;
if (length <= 0) if (length <= 0)
return; return;*/
NoosaScript script = NoosaScriptNoLighting.get(); NoosaScript script = NoosaScriptNoLighting.get();
@ -252,7 +253,7 @@ public class Tilemap extends Visual {
script.camera( camera ); script.camera( camera );
script.drawQuadSet( buffer, length, topLeft ); script.drawQuadSet( buffer, size, 0 );
} }

View File

@ -35,7 +35,7 @@ public enum Music {
private boolean enabled = true; private boolean enabled = true;
private float volume = 1f; private float volume = 1f;
public void play( String assetName, boolean looping ) { public synchronized void play( String assetName, boolean looping ) {
if (isPlaying() && lastPlayed != null && lastPlayed.equals( assetName )) { if (isPlaying() && lastPlayed != null && lastPlayed.equals( assetName )) {
return; return;
@ -57,25 +57,25 @@ public enum Music {
} }
public void mute() { public synchronized void mute() {
lastPlayed = null; lastPlayed = null;
stop(); stop();
} }
public void pause() { public synchronized void pause() {
if (player != null) { if (player != null) {
player.pause(); player.pause();
} }
} }
public void resume() { public synchronized void resume() {
if (player != null) { if (player != null) {
player.play(); player.play();
player.setLooping(looping); player.setLooping(looping);
} }
} }
public void stop() { public synchronized void stop() {
if (player != null) { if (player != null) {
player.stop(); player.stop();
player.dispose(); player.dispose();
@ -83,18 +83,18 @@ public enum Music {
} }
} }
public void volume( float value ) { public synchronized void volume( float value ) {
volume = value; volume = value;
if (player != null) { if (player != null) {
player.setVolume( value ); player.setVolume( value );
} }
} }
public boolean isPlaying() { public synchronized boolean isPlaying() {
return player != null && player.isPlaying(); return player != null && player.isPlaying();
} }
public void enable( boolean value ) { public synchronized void enable( boolean value ) {
enabled = value; enabled = value;
if (isPlaying() && !value) { if (isPlaying() && !value) {
stop(); stop();
@ -104,7 +104,7 @@ public enum Music {
} }
} }
public boolean isEnabled() { public synchronized boolean isEnabled() {
return enabled; return enabled;
} }

View File

@ -150,6 +150,9 @@ public class Bundle {
} catch (JSONException e) { } catch (JSONException e) {
Game.reportException(e); Game.reportException(e);
return enumClass.getEnumConstants()[0]; return enumClass.getEnumConstants()[0];
} catch (IllegalArgumentException e) {
Game.reportException(e);
return enumClass.getEnumConstants()[0];
} }
} }

View File

@ -217,10 +217,15 @@ public class DriedRose extends Artifact {
@Override @Override
public String status() { public String status() {
if (ghost == null && ghostID != 0){ if (ghost == null && ghostID != 0){
Actor a = Actor.findById(ghostID); try {
if (a != null){ Actor a = Actor.findById(ghostID);
ghost = (GhostHero)a; if (a != null) {
} else { ghost = (GhostHero) a;
} else {
ghostID = 0;
}
} catch ( ClassCastException e ){
ShatteredPixelDungeon.reportException(e);
ghostID = 0; ghostID = 0;
} }
} }

View File

@ -93,10 +93,10 @@ public class WndRanking extends WndTabbed {
public void update() { public void update() {
super.update(); super.update();
if (thread != null && !thread.isAlive()) { if (thread != null && !thread.isAlive() && busy != null) {
thread = null;
if (error == null) { if (error == null) {
remove( busy ); remove( busy );
busy = null;
if (Dungeon.hero != null) { if (Dungeon.hero != null) {
createControls(); createControls();
} else { } else {
@ -109,6 +109,12 @@ public class WndRanking extends WndTabbed {
} }
} }
@Override
public void destroy() {
super.destroy();
thread = null;
}
private void createControls() { private void createControls() {
String[] labels = String[] labels =