Skip to content

Commit e9cc320

Browse files
committed
quick fix on dispose
1 parent 135c85a commit e9cc320

5 files changed

Lines changed: 58 additions & 51 deletions

File tree

forge-gui-mobile/src/forge/Forge.java

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.badlogic.gdx.graphics.g2d.TextureRegion;
2020
import com.badlogic.gdx.utils.Array;
2121
import com.badlogic.gdx.utils.Clipboard;
22+
import com.badlogic.gdx.utils.Disposable;
2223
import forge.adventure.scene.DeckSelectScene;
2324
import forge.adventure.scene.DuelScene;
2425
import forge.adventure.scene.ForgeScene;
@@ -1018,25 +1019,46 @@ public void dispose() {
10181019
currentScreen.onClose(null);
10191020
currentScreen = null;
10201021
}
1021-
FOverlay.hideAll();
1022+
// TODO: Implement disposable to applicable classes
1023+
try {
1024+
FOverlay.hideAll();
1025+
} catch (Exception e) {
1026+
e.printStackTrace();
1027+
}
10221028
Dscreens.clear();
1023-
graphics.dispose();
1024-
SoundSystem.instance.dispose();
1025-
MapStage.getInstance().disposeWorld();
1026-
getAssets().dispose();
1027-
1028-
AdventureScreen.dispose();
1029-
Adventure.getInstance().dispose();
1030-
ScreenUtil.getInstance().dispose();
1031-
ShaderUtil.getInstance().dispose();
1029+
safeDispose(MapStage.getInstance(), Adventure.getInstance(), ScreenUtil.getInstance(), ShaderUtil.getInstance(),
1030+
graphics, getAssets());
1031+
try {
1032+
SoundSystem.instance.dispose();
1033+
} catch (Exception e) {
1034+
e.printStackTrace();
1035+
}
1036+
try {
1037+
AdventureScreen.dispose();
1038+
} catch (Exception e) {
1039+
e.printStackTrace();
1040+
}
10321041
try {
10331042
ExceptionHandler.unregisterErrorHandling();
1043+
} catch (Exception e) {
1044+
e.printStackTrace();
1045+
}
1046+
try {
10341047
if (lastPreview != null)
10351048
lastPreview.dispose();
10361049
} catch (Exception e) {
10371050
e.printStackTrace();
10381051
}
10391052
}
1053+
public static void safeDispose(Disposable... disposables) {
1054+
for (Disposable d : disposables) {
1055+
if (d != null) {
1056+
try {
1057+
d.dispose();
1058+
} catch (Exception ignored) {}
1059+
}
1060+
}
1061+
}
10401062
/** Retrieve assets.
10411063
*/
10421064
public static Assets getAssets() {

forge-gui-mobile/src/forge/Graphics.java

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
import java.util.ArrayDeque;
3232
import java.util.Deque;
3333

34-
public class Graphics {
34+
public class Graphics implements Disposable {
3535
private static final int GL_BLEND = GL20.GL_BLEND;
3636
private static final int GL_LINE_SMOOTH = 2848; //create constant here since not in GL20
3737

@@ -69,20 +69,11 @@ public void end() {
6969
}
7070
}
7171

72+
@Override
7273
public void dispose() {
7374
if (invokeShapeRenderer)
74-
safeDispose(shapeRenderer.get());
75-
safeDispose(batch);
76-
}
77-
78-
public void safeDispose(Disposable... disposables) {
79-
for (Disposable d : disposables) {
80-
if (d != null) {
81-
try {
82-
d.dispose();
83-
} catch (Exception ignored) {}
84-
}
85-
}
75+
Forge.safeDispose(shapeRenderer.get());
76+
Forge.safeDispose(batch);
8677
}
8778

8879
public SpriteBatch getBatch() {

forge-gui-mobile/src/forge/adventure/stage/MapStage.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public PointOfInterestChanges getChanges() {
112112

113113
protected MapStage() {
114114
disposeWorld();
115-
gdxWorld = new World(new Vector2(0, 0),false);
115+
createNewWorld();
116116
eventTouchDown = new InputEvent();
117117
eventTouchDown.setPointer(-1);
118118
eventTouchDown.setType(InputEvent.Type.touchDown);
@@ -125,6 +125,11 @@ public static MapStage getInstance() {
125125
return instance == null ? instance = new MapStage() : instance;
126126
}
127127

128+
@Override
129+
public void dispose() {
130+
disposeWorld();
131+
}
132+
128133
public void disposeWorld() {
129134
if (gdxWorld != null) {
130135
try {
@@ -194,13 +199,20 @@ public void debugCollision(boolean b) {
194199
Array<EntryActor> spawnClassified = new Array<>();
195200
Array<EntryActor> sourceMapMatch = new Array<>();
196201

202+
private void createNewWorld() {
203+
try {
204+
gdxWorld = new World(new Vector2(0, 0),false);
205+
} catch (Exception e) {
206+
e.printStackTrace();
207+
}
208+
}
197209
public void loadMap(TiledMap map, String sourceMap, String targetMap) {
198210
loadMap(map, sourceMap, targetMap, 0);
199211
}
200212

201213
public void loadMap(TiledMap map, String sourceMap, String targetMap, int spawnTargetId) {
202214
disposeWorld();
203-
gdxWorld = new World(new Vector2(0, 0),false);
215+
createNewWorld();
204216
isLoadingMatch = false;
205217
isInMap = true;
206218
GameHUD.getInstance().showHideMap(false);

forge-gui-mobile/src/forge/assets/Assets.java

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -124,25 +124,25 @@ private Assets() {
124124
public void dispose() {
125125
if (counterFonts != null) {
126126
for (BitmapFont bitmapFont : counterFonts.values())
127-
safeDispose(bitmapFont);
127+
Forge.safeDispose(bitmapFont);
128128
counterFonts.clear();
129129
}
130130
if (fallback_skins != null) {
131131
for (Texture texture : fallback_skins.values())
132-
safeDispose(texture);
132+
Forge.safeDispose(texture);
133133
fallback_skins.clear();
134134
}
135135
if (tmxMap != null) {
136136
for (Texture texture : tmxMap.values())
137-
safeDispose(texture);
137+
Forge.safeDispose(texture);
138138
tmxMap.clear();
139139
}
140140
if (textrafonts != null) {
141141
for (Font f : textrafonts.values())
142-
safeDispose(f);
142+
Forge.safeDispose(f);
143143
textrafonts.clear();
144144
}
145-
safeDispose(defaultImage, blackTexture, whiteTexture, backdropTexture, grayTexture);
145+
Forge.safeDispose(defaultImage, blackTexture, whiteTexture, backdropTexture, grayTexture);
146146
if (cardArtCache != null)
147147
cardArtCache.clear();
148148
if (avatarImages != null)
@@ -167,16 +167,7 @@ public void dispose() {
167167
cursor.clear();
168168
if (fonts != null)
169169
fonts.clear();
170-
safeDispose(manager);
171-
}
172-
private void safeDispose(Disposable... disposables) {
173-
for (Disposable d : disposables) {
174-
if (d != null) {
175-
try {
176-
d.dispose();
177-
} catch (Exception ignored) {}
178-
}
179-
}
170+
Forge.safeDispose(manager);
180171
}
181172

182173
public MemoryTrackingAssetManager manager() {

forge-gui-mobile/src/forge/util/ShaderUtil.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.badlogic.gdx.graphics.glutils.ShaderProgram;
44
import com.badlogic.gdx.utils.Disposable;
5+
import forge.Forge;
56

67
public class ShaderUtil implements Disposable {
78
private static ShaderUtil instance;
@@ -99,18 +100,8 @@ public ShaderProgram getShaderNightDay() {
99100

100101
@Override
101102
public void dispose() {
102-
safeDispose(shaderOutline, shaderGrayscale, shaderWarp, shaderUnderwater, shaderNightDay, shaderPixelate,
103+
Forge.safeDispose(shaderOutline, shaderGrayscale, shaderWarp, shaderUnderwater, shaderNightDay, shaderPixelate,
103104
shaderRipple, shaderPixelateWarp, shaderChromaticAberration, shaderHueShift, shaderRoundedRect,
104105
shaderRoundedRect2, shaderNoiseFade, shaderPortal);
105106
}
106-
107-
private void safeDispose(Disposable... disposables) {
108-
for (Disposable d : disposables) {
109-
if (d != null) {
110-
try {
111-
d.dispose();
112-
} catch (Exception ignored) {}
113-
}
114-
}
115-
}
116107
}

0 commit comments

Comments
 (0)