Further unfinished map tweaks

This commit is contained in:
Anuken
2019-05-06 18:32:18 -04:00
parent 3035d569cc
commit 88de54ec90
8 changed files with 33 additions and 27 deletions

View File

@ -12,8 +12,7 @@ import io.anuke.arc.math.Mathf;
import io.anuke.arc.math.geom.Rectangle; import io.anuke.arc.math.geom.Rectangle;
import io.anuke.arc.math.geom.Vector2; import io.anuke.arc.math.geom.Vector2;
import io.anuke.arc.util.*; import io.anuke.arc.util.*;
import io.anuke.arc.util.io.ByteBufferOutput; import io.anuke.arc.util.io.*;
import io.anuke.arc.util.io.ReusableByteOutStream;
import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.content.Blocks;
import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.Entities; import io.anuke.mindustry.entities.Entities;
@ -212,7 +211,7 @@ public class NetServer implements ApplicationListener{
public void sendWorldData(Player player, int clientID){ public void sendWorldData(Player player, int clientID){
ByteArrayOutputStream stream = new ByteArrayOutputStream(); ByteArrayOutputStream stream = new ByteArrayOutputStream();
DeflaterOutputStream def = new DeflaterOutputStream(stream); DeflaterOutputStream def = new FastDeflaterOutputStream(stream);
NetworkIO.writeWorld(player, def); NetworkIO.writeWorld(player, def);
WorldStream data = new WorldStream(); WorldStream data = new WorldStream();
data.stream = new ByteArrayInputStream(stream.toByteArray()); data.stream = new ByteArrayInputStream(stream.toByteArray());

View File

@ -3,11 +3,13 @@ package io.anuke.mindustry.editor;
import io.anuke.arc.collection.ObjectMap; import io.anuke.arc.collection.ObjectMap;
import io.anuke.arc.collection.StringMap; import io.anuke.arc.collection.StringMap;
import io.anuke.arc.files.FileHandle; import io.anuke.arc.files.FileHandle;
import io.anuke.arc.graphics.Pixmap;
import io.anuke.arc.math.Mathf; import io.anuke.arc.math.Mathf;
import io.anuke.arc.util.Structs; import io.anuke.arc.util.Structs;
import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.content.Blocks;
import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.gen.TileOp; import io.anuke.mindustry.gen.TileOp;
import io.anuke.mindustry.io.LegacyMapIO;
import io.anuke.mindustry.io.MapIO; import io.anuke.mindustry.io.MapIO;
import io.anuke.mindustry.maps.Map; import io.anuke.mindustry.maps.Map;
import io.anuke.mindustry.world.Block; 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.BlockPart;
import io.anuke.mindustry.world.blocks.Floor; import io.anuke.mindustry.world.blocks.Floor;
import java.io.IOException;
import static io.anuke.mindustry.Vars.world; import static io.anuke.mindustry.Vars.world;
public class MapEditor{ public class MapEditor{
@ -47,7 +47,7 @@ public class MapEditor{
loading = false; loading = false;
} }
public void beginEdit(Map map) throws IOException{ public void beginEdit(Map map){
reset(); reset();
loading = true; loading = true;
@ -61,6 +61,14 @@ public class MapEditor{
loading = false; 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 //adds missing blockparts
public void checkLinkedTiles(){ public void checkLinkedTiles(){
Tile[][] tiles = world.getTiles(); Tile[][] tiles = world.getTiles();
@ -109,7 +117,7 @@ public class MapEditor{
clearOp(); clearOp();
brushSize = 1; brushSize = 1;
drawBlock = Blocks.stone; drawBlock = Blocks.stone;
tags = new ObjectMap<>(); tags = new StringMap();
} }
public Tile[][] tiles(){ public Tile[][] tiles(){

View File

@ -19,6 +19,7 @@ import io.anuke.arc.util.*;
import io.anuke.mindustry.Vars; import io.anuke.mindustry.Vars;
import io.anuke.mindustry.core.Platform; import io.anuke.mindustry.core.Platform;
import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.io.LegacyMapIO;
import io.anuke.mindustry.io.MapIO; import io.anuke.mindustry.io.MapIO;
import io.anuke.mindustry.maps.Map; import io.anuke.mindustry.maps.Map;
import io.anuke.mindustry.ui.dialogs.FloatingDialog; import io.anuke.mindustry.ui.dialogs.FloatingDialog;
@ -103,9 +104,8 @@ public class MapEditorDialog extends Dialog implements Disposable{
ui.loadAnd(() -> { ui.loadAnd(() -> {
try{ try{
Pixmap pixmap = new Pixmap(file); Pixmap pixmap = new Pixmap(file);
Tile[][] tiles = editor.createTiles(pixmap.getWidth(), pixmap.getHeight()); editor.beginEdit(pixmap);
editor.load(() -> MapIO.readLegacyPixmap(pixmap, tiles)); pixmap.dispose();
editor.beginEdit(tiles);
}catch(Exception e){ }catch(Exception e){
ui.showError(Core.bundle.format("editor.errorload", Strings.parseException(e, false))); ui.showError(Core.bundle.format("editor.errorload", Strings.parseException(e, false)));
Log.err(e); Log.err(e);
@ -281,9 +281,8 @@ public class MapEditorDialog extends Dialog implements Disposable{
public void beginEditMap(FileHandle file){ public void beginEditMap(FileHandle file){
ui.loadAnd(() -> { ui.loadAnd(() -> {
try{ try{
Map map = MapIO.readMap(file, true);
shownWithMap = true; shownWithMap = true;
editor.beginEdit(map); editor.beginEdit(MapIO.createMap(file, true));
show(); show();
}catch(Exception e){ }catch(Exception e){
Log.err(e); Log.err(e);

View File

@ -143,7 +143,7 @@ public class LegacyMapIO{
} }
/** Reads a pixmap in the 3.5 pixmap format. */ /** 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 x = 0; x < pixmap.getWidth(); x++){
for(int y = 0; y < pixmap.getHeight(); y++){ for(int y = 0; y < pixmap.getHeight(); y++){
int color = pixmap.getPixel(x, pixmap.getHeight() - 1 - y); int color = pixmap.getPixel(x, pixmap.getHeight() - 1 - y);

View File

@ -20,6 +20,7 @@ import java.util.zip.InflaterInputStream;
import static io.anuke.mindustry.Vars.bufferSize; import static io.anuke.mindustry.Vars.bufferSize;
/** Reads and writes map files. */ /** Reads and writes map files. */
//TODO does this class even need to exist??? move to Maps
public class MapIO{ public class MapIO{
private static final int[] pngHeader = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A}; 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){ public static void loadMap(Map map){
SaveIO.load(map.file); SaveIO.load(map.file);
} }

View File

@ -4,12 +4,12 @@ import io.anuke.arc.collection.Array;
import io.anuke.arc.collection.IntMap; import io.anuke.arc.collection.IntMap;
import io.anuke.arc.files.FileHandle; import io.anuke.arc.files.FileHandle;
import io.anuke.arc.util.io.CounterInputStream; import io.anuke.arc.util.io.CounterInputStream;
import io.anuke.arc.util.io.FastDeflaterOutputStream;
import io.anuke.mindustry.Vars; import io.anuke.mindustry.Vars;
import io.anuke.mindustry.io.versions.Save1; import io.anuke.mindustry.io.versions.Save1;
import java.io.*; import java.io.*;
import java.util.Arrays; import java.util.Arrays;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.InflaterInputStream; import java.util.zip.InflaterInputStream;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
@ -101,14 +101,7 @@ public class SaveIO{
} }
public static void write(FileHandle file){ public static void write(FileHandle file){
write(new DeflaterOutputStream(file.write(false, bufferSize)){ write(new FastDeflaterOutputStream(file.write(false, bufferSize)));
byte[] tmp = {0};
public void write(int var1) throws IOException{
tmp[0] = (byte)(var1 & 255);
this.write(tmp, 0, 1);
}
});
} }
public static void write(OutputStream os){ public static void write(OutputStream os){

View File

@ -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", "{}"))); 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("meta", stream, this::writeMeta);
region("content", stream, this::writeContentHeader); region("content", stream, this::writeContentHeader);
region("map", stream, this::writeMap); region("map", stream, this::writeMap);
region("entities", stream, this::writeEntities); 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("meta", stream, counter, this::readMeta);
region("content", stream, counter, this::readContentHeader); region("content", stream, counter, this::readContentHeader);
region("map", stream, counter, this::readMap); region("map", stream, counter, this::readMap);

View File

@ -10,7 +10,6 @@ import io.anuke.arc.util.Log;
import io.anuke.arc.util.serialization.Json; import io.anuke.arc.util.serialization.Json;
import io.anuke.mindustry.game.SpawnGroup; import io.anuke.mindustry.game.SpawnGroup;
import io.anuke.mindustry.io.MapIO; import io.anuke.mindustry.io.MapIO;
import io.anuke.mindustry.world.Tile;
import java.io.IOException; import java.io.IOException;
import java.io.StringWriter; import java.io.StringWriter;
@ -106,10 +105,10 @@ public class Maps implements Disposable{
//create map, write it, etc etc etc //create map, write it, etc etc etc
Map map = new Map(file, world.width(), world.height(), tags, true); Map map = new Map(file, world.width(), world.height(), tags, true);
MapIO.writeMap(file, map, data); MapIO.writeMap(file, map);
if(!headless){ if(!headless){
map.texture = new Texture(MapIO.generatePreview(data)); map.texture = new Texture(MapIO.generatePreview(world.getTiles()));
} }
maps.add(map); maps.add(map);
maps.sort(); maps.sort();