From 88de54ec902c309a7bb37d61c9b600cce2fd4b13 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 6 May 2019 18:32:18 -0400 Subject: [PATCH] Further unfinished map tweaks --- core/src/io/anuke/mindustry/core/NetServer.java | 5 ++--- .../src/io/anuke/mindustry/editor/MapEditor.java | 16 ++++++++++++---- .../anuke/mindustry/editor/MapEditorDialog.java | 9 ++++----- core/src/io/anuke/mindustry/io/LegacyMapIO.java | 2 +- core/src/io/anuke/mindustry/io/MapIO.java | 8 ++++++++ core/src/io/anuke/mindustry/io/SaveIO.java | 11 ++--------- core/src/io/anuke/mindustry/io/SaveVersion.java | 4 ++-- core/src/io/anuke/mindustry/maps/Maps.java | 5 ++--- 8 files changed, 33 insertions(+), 27 deletions(-) diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index ea02ae0c01..491eab38ed 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -12,8 +12,7 @@ import io.anuke.arc.math.Mathf; import io.anuke.arc.math.geom.Rectangle; import io.anuke.arc.math.geom.Vector2; import io.anuke.arc.util.*; -import io.anuke.arc.util.io.ByteBufferOutput; -import io.anuke.arc.util.io.ReusableByteOutStream; +import io.anuke.arc.util.io.*; import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.Entities; @@ -212,7 +211,7 @@ public class NetServer implements ApplicationListener{ public void sendWorldData(Player player, int clientID){ ByteArrayOutputStream stream = new ByteArrayOutputStream(); - DeflaterOutputStream def = new DeflaterOutputStream(stream); + DeflaterOutputStream def = new FastDeflaterOutputStream(stream); NetworkIO.writeWorld(player, def); WorldStream data = new WorldStream(); data.stream = new ByteArrayInputStream(stream.toByteArray()); diff --git a/core/src/io/anuke/mindustry/editor/MapEditor.java b/core/src/io/anuke/mindustry/editor/MapEditor.java index 0390e74de3..523f0fc2f3 100644 --- a/core/src/io/anuke/mindustry/editor/MapEditor.java +++ b/core/src/io/anuke/mindustry/editor/MapEditor.java @@ -3,11 +3,13 @@ package io.anuke.mindustry.editor; import io.anuke.arc.collection.ObjectMap; import io.anuke.arc.collection.StringMap; import io.anuke.arc.files.FileHandle; +import io.anuke.arc.graphics.Pixmap; import io.anuke.arc.math.Mathf; import io.anuke.arc.util.Structs; import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.gen.TileOp; +import io.anuke.mindustry.io.LegacyMapIO; import io.anuke.mindustry.io.MapIO; import io.anuke.mindustry.maps.Map; import io.anuke.mindustry.world.Block; @@ -15,8 +17,6 @@ import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.BlockPart; import io.anuke.mindustry.world.blocks.Floor; -import java.io.IOException; - import static io.anuke.mindustry.Vars.world; public class MapEditor{ @@ -47,7 +47,7 @@ public class MapEditor{ loading = false; } - public void beginEdit(Map map) throws IOException{ + public void beginEdit(Map map){ reset(); loading = true; @@ -61,6 +61,14 @@ public class MapEditor{ loading = false; } + public void beginEdit(Pixmap pixmap){ + reset(); + + createTiles(pixmap.getWidth(), pixmap.getHeight()); + load(() -> LegacyMapIO.readPixmap(pixmap, tiles())); + renderer.resize(width(), height()); + } + //adds missing blockparts public void checkLinkedTiles(){ Tile[][] tiles = world.getTiles(); @@ -109,7 +117,7 @@ public class MapEditor{ clearOp(); brushSize = 1; drawBlock = Blocks.stone; - tags = new ObjectMap<>(); + tags = new StringMap(); } public Tile[][] tiles(){ diff --git a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java index 905390631c..2d664bcfda 100644 --- a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java @@ -19,6 +19,7 @@ import io.anuke.arc.util.*; import io.anuke.mindustry.Vars; import io.anuke.mindustry.core.Platform; import io.anuke.mindustry.game.Team; +import io.anuke.mindustry.io.LegacyMapIO; import io.anuke.mindustry.io.MapIO; import io.anuke.mindustry.maps.Map; import io.anuke.mindustry.ui.dialogs.FloatingDialog; @@ -103,9 +104,8 @@ public class MapEditorDialog extends Dialog implements Disposable{ ui.loadAnd(() -> { try{ Pixmap pixmap = new Pixmap(file); - Tile[][] tiles = editor.createTiles(pixmap.getWidth(), pixmap.getHeight()); - editor.load(() -> MapIO.readLegacyPixmap(pixmap, tiles)); - editor.beginEdit(tiles); + editor.beginEdit(pixmap); + pixmap.dispose(); }catch(Exception e){ ui.showError(Core.bundle.format("editor.errorload", Strings.parseException(e, false))); Log.err(e); @@ -281,9 +281,8 @@ public class MapEditorDialog extends Dialog implements Disposable{ public void beginEditMap(FileHandle file){ ui.loadAnd(() -> { try{ - Map map = MapIO.readMap(file, true); shownWithMap = true; - editor.beginEdit(map); + editor.beginEdit(MapIO.createMap(file, true)); show(); }catch(Exception e){ Log.err(e); diff --git a/core/src/io/anuke/mindustry/io/LegacyMapIO.java b/core/src/io/anuke/mindustry/io/LegacyMapIO.java index adf555eaf9..789e9d4c62 100644 --- a/core/src/io/anuke/mindustry/io/LegacyMapIO.java +++ b/core/src/io/anuke/mindustry/io/LegacyMapIO.java @@ -143,7 +143,7 @@ public class LegacyMapIO{ } /** Reads a pixmap in the 3.5 pixmap format. */ - public static void readLegacyPixmap(Pixmap pixmap, Tile[][] tiles){ + public static void readPixmap(Pixmap pixmap, Tile[][] tiles){ for(int x = 0; x < pixmap.getWidth(); x++){ for(int y = 0; y < pixmap.getHeight(); y++){ int color = pixmap.getPixel(x, pixmap.getHeight() - 1 - y); diff --git a/core/src/io/anuke/mindustry/io/MapIO.java b/core/src/io/anuke/mindustry/io/MapIO.java index 59c9aa3f25..7f07fbd989 100644 --- a/core/src/io/anuke/mindustry/io/MapIO.java +++ b/core/src/io/anuke/mindustry/io/MapIO.java @@ -20,6 +20,7 @@ import java.util.zip.InflaterInputStream; import static io.anuke.mindustry.Vars.bufferSize; /** Reads and writes map files. */ +//TODO does this class even need to exist??? move to Maps public class MapIO{ private static final int[] pngHeader = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A}; @@ -47,6 +48,13 @@ public class MapIO{ } } + public static void writeMap(FileHandle file, Map map) throws IOException{ + SaveIO.write(file); + try(DataOutputStream out = new DataOutputStream(file.write(false, bufferSize))){ + + } + } + public static void loadMap(Map map){ SaveIO.load(map.file); } diff --git a/core/src/io/anuke/mindustry/io/SaveIO.java b/core/src/io/anuke/mindustry/io/SaveIO.java index 1dd209b6e0..d01c38c04c 100644 --- a/core/src/io/anuke/mindustry/io/SaveIO.java +++ b/core/src/io/anuke/mindustry/io/SaveIO.java @@ -4,12 +4,12 @@ import io.anuke.arc.collection.Array; import io.anuke.arc.collection.IntMap; import io.anuke.arc.files.FileHandle; import io.anuke.arc.util.io.CounterInputStream; +import io.anuke.arc.util.io.FastDeflaterOutputStream; import io.anuke.mindustry.Vars; import io.anuke.mindustry.io.versions.Save1; import java.io.*; import java.util.Arrays; -import java.util.zip.DeflaterOutputStream; import java.util.zip.InflaterInputStream; import static io.anuke.mindustry.Vars.*; @@ -101,14 +101,7 @@ public class SaveIO{ } public static void write(FileHandle file){ - write(new DeflaterOutputStream(file.write(false, bufferSize)){ - byte[] tmp = {0}; - - public void write(int var1) throws IOException{ - tmp[0] = (byte)(var1 & 255); - this.write(tmp, 0, 1); - } - }); + write(new FastDeflaterOutputStream(file.write(false, bufferSize))); } public static void write(OutputStream os){ diff --git a/core/src/io/anuke/mindustry/io/SaveVersion.java b/core/src/io/anuke/mindustry/io/SaveVersion.java index 3ea724ddf9..5acf7e180f 100644 --- a/core/src/io/anuke/mindustry/io/SaveVersion.java +++ b/core/src/io/anuke/mindustry/io/SaveVersion.java @@ -30,14 +30,14 @@ public abstract class SaveVersion extends SaveFileReader{ return new SaveMeta(map.getInt("version"), map.getLong("saved"), map.getLong("playtime"), map.getInt("build"), map.get("mapname"), map.getInt("wave"), Serialization.readRulesStringJson(map.get("rules", "{}"))); } - public void write(DataOutputStream stream) throws IOException{ + public final void write(DataOutputStream stream) throws IOException{ region("meta", stream, this::writeMeta); region("content", stream, this::writeContentHeader); region("map", stream, this::writeMap); region("entities", stream, this::writeEntities); } - public void read(DataInputStream stream, CounterInputStream counter) throws IOException{ + public final void read(DataInputStream stream, CounterInputStream counter) throws IOException{ region("meta", stream, counter, this::readMeta); region("content", stream, counter, this::readContentHeader); region("map", stream, counter, this::readMap); diff --git a/core/src/io/anuke/mindustry/maps/Maps.java b/core/src/io/anuke/mindustry/maps/Maps.java index 1db54badb2..ec05d339c7 100644 --- a/core/src/io/anuke/mindustry/maps/Maps.java +++ b/core/src/io/anuke/mindustry/maps/Maps.java @@ -10,7 +10,6 @@ import io.anuke.arc.util.Log; import io.anuke.arc.util.serialization.Json; import io.anuke.mindustry.game.SpawnGroup; import io.anuke.mindustry.io.MapIO; -import io.anuke.mindustry.world.Tile; import java.io.IOException; import java.io.StringWriter; @@ -106,10 +105,10 @@ public class Maps implements Disposable{ //create map, write it, etc etc etc Map map = new Map(file, world.width(), world.height(), tags, true); - MapIO.writeMap(file, map, data); + MapIO.writeMap(file, map); if(!headless){ - map.texture = new Texture(MapIO.generatePreview(data)); + map.texture = new Texture(MapIO.generatePreview(world.getTiles())); } maps.add(map); maps.sort();