diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java
index 47d866d128..756b759399 100644
--- a/core/src/io/anuke/mindustry/core/Control.java
+++ b/core/src/io/anuke/mindustry/core/Control.java
@@ -18,8 +18,8 @@ import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.Player;
import io.anuke.mindustry.game.Content;
import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.Saves;
import io.anuke.mindustry.game.GlobalData;
+import io.anuke.mindustry.game.Saves;
import io.anuke.mindustry.gen.Call;
import io.anuke.mindustry.input.Binding;
import io.anuke.mindustry.input.DesktopInput;
diff --git a/core/src/io/anuke/mindustry/core/World.java b/core/src/io/anuke/mindustry/core/World.java
index a6ae216584..9ec221e850 100644
--- a/core/src/io/anuke/mindustry/core/World.java
+++ b/core/src/io/anuke/mindustry/core/World.java
@@ -254,12 +254,9 @@ public class World implements ApplicationListener{
ui.showError("$map.nospawn.pvp");
}
}
- }else{
- invalidMap = false;
}
if(invalidMap) Core.app.post(() -> state.set(State.menu));
-
}
public void notifyChanged(Tile tile){
@@ -410,7 +407,7 @@ public class World implements ApplicationListener{
* - setting up multiblocks
* - updating occlusion
* Usually used before placing structures on a tile array.*/
- void prepareTiles(Tile[][] tiles){
+ public void prepareTiles(Tile[][] tiles){
//find multiblocks
IntArray multiblocks = new IntArray();
diff --git a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java
index 76d0da1211..4552f3e1c3 100644
--- a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java
+++ b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java
@@ -83,7 +83,7 @@ public class BlockRenderer{
Draw.shader();
}
- /**Process all blocks to draw, simultaneously updating the block shadow framebuffer.*/
+ /**Process all blocks to draw.*/
public void processBlocks(){
iterateidx = 0;
@@ -108,28 +108,25 @@ public class BlockRenderer{
for(int y = miny; y <= maxy; y++){
boolean expanded = (Math.abs(x - avgx) > rangex || Math.abs(y - avgy) > rangey);
Tile tile = world.rawTile(x, y);
+ Block block = tile.block();
- if(tile != null){
- Block block = tile.block();
+ if(!expanded && block != Blocks.air && world.isAccessible(x, y)){
+ tile.block().drawShadow(tile);
+ }
- if(!expanded && block != Blocks.air && world.isAccessible(x, y)){
- tile.block().drawShadow(tile);
+ if(block != Blocks.air){
+ if(!expanded){
+ addRequest(tile, Layer.shadow);
+ addRequest(tile, Layer.block);
}
- if(block != Blocks.air){
- if(!expanded){
- addRequest(tile, Layer.shadow);
- addRequest(tile, Layer.block);
+ if(block.expanded || !expanded){
+ if(block.layer != null && block.isLayer(tile)){
+ addRequest(tile, block.layer);
}
- if(block.expanded || !expanded){
- if(block.layer != null && block.isLayer(tile)){
- addRequest(tile, block.layer);
- }
-
- if(block.layer2 != null && block.isLayer2(tile)){
- addRequest(tile, block.layer2);
- }
+ if(block.layer2 != null && block.isLayer2(tile)){
+ addRequest(tile, block.layer2);
}
}
}
diff --git a/core/src/io/anuke/mindustry/maps/Maps.java b/core/src/io/anuke/mindustry/maps/Maps.java
index 678920aa51..6af98f428e 100644
--- a/core/src/io/anuke/mindustry/maps/Maps.java
+++ b/core/src/io/anuke/mindustry/maps/Maps.java
@@ -18,7 +18,7 @@ import static io.anuke.mindustry.Vars.*;
public class Maps implements Disposable{
/**List of all built-in maps.*/
- private static final String[] defaultMapNames = {"sandbox"};
+ private static final String[] defaultMapNames = {};
/**Tile format version.*/
private static final int version = 0;
@@ -57,9 +57,28 @@ public class Maps implements Disposable{
return maps.get(name.toLowerCase());
}
+ /**Loads a map from the map folder and returns it. Should only be used for zone maps.
+ * Does not add this map to the map list.*/
+ public Map loadInternalMap(String name){
+ FileHandle file = Core.files.internal("maps/" + name + "." + mapExtension);
+
+ try(DataInputStream ds = new DataInputStream(file.read())) {
+ MapMeta meta = MapIO.readMapMeta(ds);
+ Map map = new Map(name, meta, false, file::read);
+
+ if (!headless){
+ map.texture = new Texture(MapIO.generatePixmap(MapIO.readTileData(ds, meta, true)));
+ }
+
+ return map;
+ }catch(IOException e){
+ throw new RuntimeException(e);
+ }
+ }
+
/**Load all maps. Should be called at application start.*/
public void load(){
- try {
+ try{
for (String name : defaultMapNames) {
FileHandle file = Core.files.internal("maps/" + name + "." + mapExtension);
loadMap(file.nameWithoutExtension(), file::read, false);
diff --git a/core/src/io/anuke/mindustry/maps/generators/Generator.java b/core/src/io/anuke/mindustry/maps/generators/Generator.java
index 60f9b2abfe..c0d33c0cab 100644
--- a/core/src/io/anuke/mindustry/maps/generators/Generator.java
+++ b/core/src/io/anuke/mindustry/maps/generators/Generator.java
@@ -3,12 +3,17 @@ package io.anuke.mindustry.maps.generators;
import io.anuke.mindustry.world.Tile;
public abstract class Generator{
- public final int width, height;
+ public int width, height;
public Generator(int width, int height){
this.width = width;
this.height = height;
}
+ public Generator(){}
+
+ /**Initialize special variables like maps.*/
+ public void init(){}
+
public abstract void generate(Tile[][] tiles);
}
diff --git a/core/src/io/anuke/mindustry/maps/generators/MapGenerator.java b/core/src/io/anuke/mindustry/maps/generators/MapGenerator.java
new file mode 100644
index 0000000000..da8c2c18ac
--- /dev/null
+++ b/core/src/io/anuke/mindustry/maps/generators/MapGenerator.java
@@ -0,0 +1,38 @@
+package io.anuke.mindustry.maps.generators;
+
+import io.anuke.mindustry.content.Blocks;
+import io.anuke.mindustry.io.MapIO;
+import io.anuke.mindustry.maps.Map;
+import io.anuke.mindustry.maps.MapTileData;
+import io.anuke.mindustry.maps.MapTileData.TileDataMarker;
+import io.anuke.mindustry.world.Tile;
+
+import static io.anuke.mindustry.Vars.world;
+
+public class MapGenerator extends Generator{
+ private final Map map;
+
+ public MapGenerator(String mapName){
+ map = world.maps.loadInternalMap(mapName);
+ width = map.meta.width;
+ height = map.meta.height;
+ }
+
+ @Override
+ public void generate(Tile[][] tiles){
+ MapTileData data = MapIO.readTileData(map, true);
+
+ data.position(0, 0);
+ TileDataMarker marker = data.newDataMarker();
+
+ for(int y = 0; y < data.height(); y++){
+ for(int x = 0; x < data.width(); x++){
+ data.read(marker);
+
+ tiles[x][y] = new Tile(x, y, marker.floor, marker.wall == Blocks.blockpart.id ? 0 : marker.wall, marker.rotation, marker.team);
+ }
+ }
+
+ world.prepareTiles(tiles);
+ }
+}
diff --git a/core/src/io/anuke/mindustry/type/Zone.java b/core/src/io/anuke/mindustry/type/Zone.java
index 5a943029ce..40a8438a35 100644
--- a/core/src/io/anuke/mindustry/type/Zone.java
+++ b/core/src/io/anuke/mindustry/type/Zone.java
@@ -20,6 +20,11 @@ public class Zone extends UnlockableContent{
this.generator = generator;
}
+ @Override
+ public void init(){
+ generator.init();
+ }
+
@Override
public boolean isHidden(){
return true;
diff --git a/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java
index 52da73a69e..90c7d40f33 100644
--- a/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java
+++ b/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java
@@ -46,7 +46,7 @@ public class DeployDialog extends FloatingDialog{
data.removeItems(zone.deployCost);
hide();
world.playZone(zone);
- }).size(150f).disabled(b -> !data.hasItems(zone.deployCost));
+ }).size(150f)/*.disabled(b -> !data.hasItems(zone.deployCost))*/;
t.row();
t.table(req -> {
req.left();
diff --git a/core/src/io/anuke/mindustry/world/blocks/Floor.java b/core/src/io/anuke/mindustry/world/blocks/Floor.java
index a2122428ba..52cb877db8 100644
--- a/core/src/io/anuke/mindustry/world/blocks/Floor.java
+++ b/core/src/io/anuke/mindustry/world/blocks/Floor.java
@@ -2,7 +2,6 @@ package io.anuke.mindustry.world.blocks;
import io.anuke.arc.Core;
import io.anuke.arc.entities.Effects.Effect;
-import io.anuke.arc.function.BiPredicate;
import io.anuke.arc.function.Predicate;
import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.g2d.Draw;
@@ -10,8 +9,8 @@ import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.math.Mathf;
import io.anuke.arc.math.geom.Geometry;
import io.anuke.arc.math.geom.Vector2;
-import io.anuke.mindustry.content.StatusEffects;
import io.anuke.mindustry.content.Fx;
+import io.anuke.mindustry.content.StatusEffects;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.type.StatusEffect;
import io.anuke.mindustry.world.Block;
@@ -52,11 +51,9 @@ public class Floor extends Block{
public boolean playerUnmineable = false;
protected TextureRegion edgeRegion;
protected TextureRegion[] edgeRegions;
- protected TextureRegion[] cliffRegions;
protected TextureRegion[] variantRegions;
protected Vector2[] offsets;
protected Predicate blends = block -> block != this && !block.blendOverride(this);
- protected BiPredicate tileBlends = (tile, other) -> false;
protected boolean blend = true;
public Floor(String name){
@@ -96,12 +93,6 @@ public class Floor extends Block{
edgeRegions[i] = result;
offsets[i] = new Vector2(-padSize + rx, -padSize + ry);
}
-
- cliffRegions = new TextureRegion[4];
- cliffRegions[0] = Core.atlas.find(name + "-cliff-edge-2");
- cliffRegions[1] = Core.atlas.find(name + "-cliff-edge");
- cliffRegions[2] = Core.atlas.find(name + "-cliff-edge-1");
- cliffRegions[3] = Core.atlas.find(name + "-cliff-side");
}
//load variant regions for drawing
@@ -115,6 +106,8 @@ public class Floor extends Block{
variantRegions = new TextureRegion[1];
variantRegions[0] = Core.atlas.find(name);
}
+
+ region = variantRegions[0];
}
@Override