From 7089fae0d54bd6a195c8d3068f3f8e470252e2c6 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 31 Aug 2019 09:45:27 -0400 Subject: [PATCH] Map fixes --- core/src/io/anuke/mindustry/core/Control.java | 2 +- .../mindustry/maps/MapPreviewLoader.java | 2 +- core/src/io/anuke/mindustry/maps/Maps.java | 40 ++++++++++++++----- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index f62ba12df8..b8ad81a564 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -231,7 +231,7 @@ public class Control implements ApplicationListener, Loadable{ world.loadMap(map, rules); state.rules = rules; logic.play(); - if(settings.getBool("savecreate")){ + if(settings.getBool("savecreate") && !world.isInvalidMap()){ control.saves.addSave(map.name() + " " + new SimpleDateFormat("MMM dd h:mm", Locale.getDefault()).format(new Date())); } }); diff --git a/core/src/io/anuke/mindustry/maps/MapPreviewLoader.java b/core/src/io/anuke/mindustry/maps/MapPreviewLoader.java index 26d8214243..c743ec5bab 100644 --- a/core/src/io/anuke/mindustry/maps/MapPreviewLoader.java +++ b/core/src/io/anuke/mindustry/maps/MapPreviewLoader.java @@ -21,7 +21,7 @@ public class MapPreviewLoader extends TextureLoader{ }catch(Exception e){ e.printStackTrace(); MapPreviewParameter param = (MapPreviewParameter)parameter; - Vars.maps.createNewPreview(param.map); + Vars.maps.queueNewPreview(param.map); } } diff --git a/core/src/io/anuke/mindustry/maps/Maps.java b/core/src/io/anuke/mindustry/maps/Maps.java index 13e5d73f8a..81df8640c2 100644 --- a/core/src/io/anuke/mindustry/maps/Maps.java +++ b/core/src/io/anuke/mindustry/maps/Maps.java @@ -34,6 +34,7 @@ public class Maps{ private Json json = new Json(); private AsyncExecutor executor = new AsyncExecutor(2); + private ObjectSet previewList = new ObjectSet<>(); /** Returns a list of all maps, including custom ones. */ public Array all(){ @@ -58,6 +59,8 @@ public class Maps{ Events.on(ClientLoadEvent.class, event -> { maps.sort(); }); + + ((CustomLoader)Core.assets.getLoader(Content.class)).loaded = this::createAllPreviews; } /** @@ -149,8 +152,13 @@ public class Maps{ } } + if(Core.assets.isLoaded(map.previewFile().path() + "." + mapExtension)){ + Core.assets.unload(map.previewFile().path() + "." + mapExtension); + } + Pixmap pix = MapIO.generatePreview(world.getTiles()); executor.submit(() -> map.previewFile().writePNG(pix)); + writeCache(map); map.texture = new Texture(pix); } @@ -309,27 +317,39 @@ public class Maps{ } public void loadPreviews(){ - Array createNew = new Array<>(); for(Map map : maps){ //try to load preview if(map.previewFile().exists()){ //this may fail, but calls createNewPreview Core.assets.load(new AssetDescriptor<>(map.previewFile().path() + "." + mapExtension, Texture.class, new MapPreviewParameter(map))).loaded = t -> map.texture = (Texture)t; - }else{ - createNew.add(map); - } - try{ - readCache(map); - }catch(Exception ignored){ + try{ + readCache(map); + }catch(Exception e){ + e.printStackTrace(); + queueNewPreview(map); + } + }else{ + queueNewPreview(map); } } - - ((CustomLoader)Core.assets.getLoader(Content.class)).loaded = () -> Core.app.post(() -> createNew.each(this::createNewPreview)); } - public void createNewPreview(Map map){ + private void createAllPreviews(){ + Core.app.post(() -> { + for(Map map : previewList){ + createNewPreview(map); + } + previewList.clear(); + }); + } + + public void queueNewPreview(Map map){ + Core.app.post(() -> previewList.add(map)); + } + + private void createNewPreview(Map map){ try{ //if it's here, then the preview failed to load or doesn't exist, make it //this has to be done synchronously!