diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 2daa533eff..900fd0f44d 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -238,7 +238,7 @@ error.mapnotfound = Map file not found! error.io = Network I/O error. error.any = Unknown network error. -zone.wasteland.name = Wasteland +zone.groundZero.name = Ground Zero settings.language = Language settings.reset = Reset to Defaults diff --git a/core/assets/maps/groundZero.mmap b/core/assets/maps/groundZero.mmap new file mode 100644 index 0000000000..aa4cb1a038 Binary files /dev/null and b/core/assets/maps/groundZero.mmap differ diff --git a/core/assets/maps/sandbox.mmap b/core/assets/maps/sandbox.mmap deleted file mode 100644 index 14e89ed3b7..0000000000 Binary files a/core/assets/maps/sandbox.mmap and /dev/null differ diff --git a/core/src/io/anuke/mindustry/content/Blocks.java b/core/src/io/anuke/mindustry/content/Blocks.java index d3520108ef..0db67048f0 100644 --- a/core/src/io/anuke/mindustry/content/Blocks.java +++ b/core/src/io/anuke/mindustry/content/Blocks.java @@ -88,14 +88,7 @@ public class Blocks implements ContentList{ blockpart = new BlockPart(); spawn = new Block("spawn"){ - public void drawShadow(Tile tile){} - - public void draw(Tile tile){ - Draw.color(Color.SCARLET); - Lines.circle(tile.worldx(), tile.worldy(), 4f +Mathf.absin(Time.time(), 6f, 6f)); - Draw.color(); - } }; //Registers build blocks from size 1-6 diff --git a/core/src/io/anuke/mindustry/content/Zones.java b/core/src/io/anuke/mindustry/content/Zones.java index bb333f2f60..c5c27b18a3 100644 --- a/core/src/io/anuke/mindustry/content/Zones.java +++ b/core/src/io/anuke/mindustry/content/Zones.java @@ -2,17 +2,17 @@ package io.anuke.mindustry.content; import io.anuke.mindustry.game.ContentList; import io.anuke.mindustry.game.Rules; -import io.anuke.mindustry.maps.generators.BasicGenerator; +import io.anuke.mindustry.maps.generators.MapGenerator; import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.type.Zone; public class Zones implements ContentList{ - public Zone wasteland; + public Zone groundZero; @Override public void load(){ - wasteland = new Zone("wasteland", new BasicGenerator(256, 256, Items.copper)){{ + groundZero = new Zone("groundZero", new MapGenerator("groundZero")){{ deployCost = ItemStack.with(Items.copper, 100); startingItems = ItemStack.with(Items.copper, 50); alwaysUnlocked = true; diff --git a/core/src/io/anuke/mindustry/core/World.java b/core/src/io/anuke/mindustry/core/World.java index 9ec221e850..d3d29189dd 100644 --- a/core/src/io/anuke/mindustry/core/World.java +++ b/core/src/io/anuke/mindustry/core/World.java @@ -6,6 +6,8 @@ import io.anuke.arc.Events; import io.anuke.arc.collection.Array; import io.anuke.arc.collection.IntArray; import io.anuke.arc.entities.EntityQuery; +import io.anuke.arc.math.Mathf; +import io.anuke.arc.math.geom.Geometry; import io.anuke.arc.math.geom.Point2; import io.anuke.arc.util.Log; import io.anuke.arc.util.Structs; @@ -409,6 +411,47 @@ public class World implements ApplicationListener{ * Usually used before placing structures on a tile array.*/ public void prepareTiles(Tile[][] tiles){ + byte[][] dark = new byte[tiles.length][tiles[0].length]; + byte[][] writeBuffer = new byte[tiles.length][tiles[0].length]; + + byte darkIterations = 4; + for(int x = 0; x < tiles.length; x++){ + for(int y = 0; y < tiles[0].length; y++){ + Tile tile = tiles[x][y]; + if(tile.block().solid && !tile.block().update){ + dark[x][y] = darkIterations; + } + } + } + + for(int i = 0; i < darkIterations; i++){ + for(int x = 0; x < tiles.length; x++){ + for(int y = 0; y < tiles[0].length; y++){ + boolean min = false; + for(Point2 point : Geometry.d4){ + int newX = x + point.x, newY = y + point.y; + if(Structs.inBounds(newX, newY, tiles) && dark[newX][newY] < dark[x][y]){ + min = true; + break; + } + } + writeBuffer[x][y] = (byte)Math.max(0, dark[x][y] - Mathf.num(min)); + } + } + + for(int x = 0; x < tiles.length; x++){ + for(int y = 0; y < tiles[0].length; y++){ + dark[x][y] = writeBuffer[x][y]; + } + } + } + + for(int x = 0; x < tiles.length; x++){ + for(int y = 0; y < tiles[0].length; y++){ + tiles[x][y].setRotation(dark[x][y]); + } + } + //find multiblocks IntArray multiblocks = new IntArray(); diff --git a/core/src/io/anuke/mindustry/editor/MapEditor.java b/core/src/io/anuke/mindustry/editor/MapEditor.java index e7fee69dbd..275329dcd1 100644 --- a/core/src/io/anuke/mindustry/editor/MapEditor.java +++ b/core/src/io/anuke/mindustry/editor/MapEditor.java @@ -99,9 +99,6 @@ public class MapEditor{ } public void draw(int x, int y, Block drawBlock){ - if(x < 0 || y < 0 || x >= map.width() || y >= map.height()){ - return; - } byte writeID = drawBlock.id; byte partID = Blocks.blockpart.id; diff --git a/core/src/io/anuke/mindustry/maps/Maps.java b/core/src/io/anuke/mindustry/maps/Maps.java index 6af98f428e..51f8b85ec6 100644 --- a/core/src/io/anuke/mindustry/maps/Maps.java +++ b/core/src/io/anuke/mindustry/maps/Maps.java @@ -63,14 +63,7 @@ public class Maps implements Disposable{ 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; + return new Map(name, MapIO.readMapMeta(ds), false, file::read); }catch(IOException e){ throw new RuntimeException(e); } diff --git a/core/src/io/anuke/mindustry/maps/generators/Generator.java b/core/src/io/anuke/mindustry/maps/generators/Generator.java index 1f818fc499..dac0b08093 100644 --- a/core/src/io/anuke/mindustry/maps/generators/Generator.java +++ b/core/src/io/anuke/mindustry/maps/generators/Generator.java @@ -12,5 +12,9 @@ public abstract class Generator{ public Generator(){} + 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 index 92c5def5f9..9d593e0e1f 100644 --- a/core/src/io/anuke/mindustry/maps/generators/MapGenerator.java +++ b/core/src/io/anuke/mindustry/maps/generators/MapGenerator.java @@ -10,9 +10,15 @@ import io.anuke.mindustry.world.Tile; import static io.anuke.mindustry.Vars.world; public class MapGenerator extends Generator{ - private final Map map; + private Map map; + private String mapName; public MapGenerator(String mapName){ + this.mapName = mapName; + } + + @Override + public void init(){ map = world.maps.loadInternalMap(mapName); width = map.meta.width; height = map.meta.height; diff --git a/core/src/io/anuke/mindustry/type/Zone.java b/core/src/io/anuke/mindustry/type/Zone.java index fe922a29f2..87a3cc45b6 100644 --- a/core/src/io/anuke/mindustry/type/Zone.java +++ b/core/src/io/anuke/mindustry/type/Zone.java @@ -21,6 +21,11 @@ public class Zone extends UnlockableContent{ this.generator = generator; } + @Override + public void init(){ + generator.init(); + } + @Override public boolean alwaysUnlocked(){ return alwaysUnlocked; diff --git a/core/src/io/anuke/mindustry/world/blocks/Rock.java b/core/src/io/anuke/mindustry/world/blocks/Rock.java index 57680e6b75..d2cca6e9cf 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Rock.java +++ b/core/src/io/anuke/mindustry/world/blocks/Rock.java @@ -19,11 +19,13 @@ public class Rock extends Block{ @Override public void draw(Tile tile){ + Draw.colorl(1f - tile.getRotation() / 4f); if(variants > 0){ Draw.rect(regions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, regions.length - 1))], tile.worldx(), tile.worldy()); }else{ Draw.rect(region, tile.worldx(), tile.worldy()); } + Draw.color(); } @Override