From a592144291e2fcdc010087a6ccad32f44803aa4f Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 22 Apr 2020 09:49:04 -0400 Subject: [PATCH] Catching of schematic preview errors / Fixes #1886 --- core/src/mindustry/game/Schematics.java | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/game/Schematics.java b/core/src/mindustry/game/Schematics.java index 1a0a58abfa..bd0ead2373 100644 --- a/core/src/mindustry/game/Schematics.java +++ b/core/src/mindustry/game/Schematics.java @@ -51,7 +51,9 @@ public class Schematics implements Loadable{ private OptimizedByteArrayOutputStream out = new OptimizedByteArrayOutputStream(1024); private Array all = new Array<>(); private OrderedMap previews = new OrderedMap<>(); + private ObjectSet errored = new ObjectSet<>(); private FrameBuffer shadowBuffer; + private Texture errorTexture; private long lastClearTime; public Schematics(){ @@ -59,6 +61,9 @@ public class Schematics implements Loadable{ previews.each((schem, m) -> m.dispose()); previews.clear(); shadowBuffer.dispose(); + if(errorTexture != null){ + errorTexture.dispose(); + } }); Events.on(ContentReloadEvent.class, event -> { @@ -66,6 +71,12 @@ public class Schematics implements Loadable{ previews.clear(); load(); }); + + Events.on(ClientLoadEvent.class, event -> { + Pixmap pixmap = Core.atlas.getPixmap("error").crop(); + errorTexture = new Texture(pixmap); + pixmap.dispose(); + }); } @Override @@ -163,7 +174,15 @@ public class Schematics implements Loadable{ } public Texture getPreview(Schematic schematic){ - return getBuffer(schematic).getTexture(); + if(errored.contains(schematic)) return errorTexture; + + try{ + return getBuffer(schematic).getTexture(); + }catch(Throwable t){ + Log.err(t); + errored.add(schematic); + return errorTexture; + } } public boolean hasPreview(Schematic schematic){