mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-08-03 08:29:29 +07:00
Further unfinished map tweaks
This commit is contained in:
@ -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());
|
||||||
|
@ -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(){
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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){
|
||||||
|
@ -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);
|
||||||
|
@ -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();
|
||||||
|
Reference in New Issue
Block a user