Add try/catch to FContainer::draw() so screen doesn't bug out when something throws an exception during rendering

This commit is contained in:
drdev
2014-07-30 02:39:24 +00:00
parent a002898db5
commit df9f02e66a

View File

@@ -5,6 +5,7 @@ import java.util.ArrayList;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
import forge.Graphics; import forge.Graphics;
import forge.error.BugReporter;
public abstract class FContainer extends FDisplayObject { public abstract class FContainer extends FDisplayObject {
private final ArrayList<FDisplayObject> children = new ArrayList<FDisplayObject>(); private final ArrayList<FDisplayObject> children = new ArrayList<FDisplayObject>();
@@ -38,33 +39,38 @@ public abstract class FContainer extends FDisplayObject {
} }
public void draw(Graphics g) { public void draw(Graphics g) {
drawBackground(g); try {
drawBackground(g);
boolean needOverlayDrawn = true; boolean needOverlayDrawn = true;
for (FDisplayObject child : children) { for (FDisplayObject child : children) {
if (child.isVisible()) { if (child.isVisible()) {
if (child.drawAboveOverlay() && needOverlayDrawn) { if (child.drawAboveOverlay() && needOverlayDrawn) {
drawOverlay(g); drawOverlay(g);
needOverlayDrawn = false; needOverlayDrawn = false;
}
final boolean disabled = !child.isEnabled();
if (disabled) {
g.setAlphaComposite(DISABLED_COMPOSITE);
}
g.draw(child);
if (disabled) {
g.resetAlphaComposite();
}
child.drawOnContainer(g); //give child an additional chance to draw additional content on container outside its bounds
} }
}
final boolean disabled = !child.isEnabled(); if (needOverlayDrawn) {
if (disabled) { drawOverlay(g);
g.setAlphaComposite(DISABLED_COMPOSITE);
}
g.draw(child);
if (disabled) {
g.resetAlphaComposite();
}
child.drawOnContainer(g); //give child an additional chance to draw additional content on container outside its bounds
} }
} }
catch (Exception ex) {
if (needOverlayDrawn) { BugReporter.reportException(ex);
drawOverlay(g);
} }
} }