From 1fbaa27f5b80fe6558e9e72eff52df9115c748f5 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sun, 12 Nov 2017 23:30:57 -0500 Subject: [PATCH] v0.6.2c: fixed a variety of rare crash bugs --- .../src/main/java/com/watabou/noosa/Camera.java | 14 ++++++-------- build.gradle | 2 +- .../shatteredpixeldungeon/actors/Actor.java | 2 +- .../shatteredpixeldungeon/actors/buffs/Buff.java | 2 +- .../shatteredpixeldungeon/items/BrokenSeal.java | 6 +++--- .../shatteredpixeldungeon/sprites/CharSprite.java | 5 ++--- 6 files changed, 14 insertions(+), 17 deletions(-) diff --git a/SPD-classes/src/main/java/com/watabou/noosa/Camera.java b/SPD-classes/src/main/java/com/watabou/noosa/Camera.java index 4ca6e1033..2073fcc6c 100644 --- a/SPD-classes/src/main/java/com/watabou/noosa/Camera.java +++ b/SPD-classes/src/main/java/com/watabou/noosa/Camera.java @@ -30,7 +30,7 @@ import java.util.ArrayList; public class Camera extends Gizmo { - protected static ArrayList all = new ArrayList(); + private static ArrayList all = new ArrayList(); protected static float invW2; protected static float invH2; @@ -66,7 +66,7 @@ public class Camera extends Gizmo { return reset( createFullscreen( 1 ) ); } - public static Camera reset( Camera newCamera ) { + public static synchronized Camera reset( Camera newCamera ) { invW2 = 2f / Game.width; invH2 = 2f / Game.height; @@ -80,20 +80,18 @@ public class Camera extends Gizmo { return main = add( newCamera ); } - public static Camera add( Camera camera ) { + public static synchronized Camera add( Camera camera ) { all.add( camera ); return camera; } - public static Camera remove( Camera camera ) { + public static synchronized Camera remove( Camera camera ) { all.remove( camera ); return camera; } - public static void updateAll() { - int length = all.size(); - for (int i=0; i < length; i++) { - Camera c = all.get( i ); + public static synchronized void updateAll() { + for (Camera c : all) { if (c.exists && c.active) { c.update(); } diff --git a/build.gradle b/build.gradle index 28f8d4b6d..3ac9c14a1 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0' + classpath 'com.android.tools.build:gradle:2.3.3' } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Actor.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Actor.java index 36685148b..a2ce76065 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Actor.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Actor.java @@ -220,7 +220,7 @@ public abstract class Actor implements Bundlable { current = null; } else { doNext = acting.act(); - if (doNext && !Dungeon.hero.isAlive()) { + if (doNext && (Dungeon.hero == null || !Dungeon.hero.isAlive())) { doNext = false; current = null; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Buff.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Buff.java index 1d8f4f5e7..34635b533 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Buff.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Buff.java @@ -72,7 +72,7 @@ public class Buff extends Actor { } public void detach() { - fx( false ); + if (target.sprite != null) fx( false ); target.remove( this ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSeal.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSeal.java index 92d0f0b39..c7488a156 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSeal.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSeal.java @@ -107,7 +107,7 @@ public class BrokenSeal extends Item { private float partialShield; @Override - public boolean act() { + public synchronized boolean act() { if (armor == null) detach(); else if (armor.isEquipped((Hero)target)) { if (target.SHLD < maxShield()){ @@ -122,11 +122,11 @@ public class BrokenSeal extends Item { return true; } - public void setArmor(Armor arm){ + public synchronized void setArmor(Armor arm){ armor = arm; } - public int maxShield() { + public synchronized int maxShield() { return 1 + armor.tier + armor.level(); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/CharSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/CharSprite.java index 159ccf030..49bd33e14 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/CharSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/CharSprite.java @@ -300,7 +300,7 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip flashTime = FLASH_INTERVAL; } - public void add( State state ) { + public synchronized void add( State state ) { switch (state) { case BURNING: burning = emitter(); @@ -350,7 +350,7 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip } } - public void remove( State state ) { + public synchronized void remove( State state ) { switch (state) { case BURNING: if (burning != null) { @@ -414,7 +414,6 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip } @Override - //syncronized due to EmoIcon handling public synchronized void update() { super.update();