From 951cbf3d164e641de14bc4e850a6e3c5af8bbecc Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 25 Jul 2019 22:18:45 -0400 Subject: [PATCH] Fixed some generation issues --- .../anuke/mindustry/editor/MapInfoDialog.java | 4 ++- core/src/io/anuke/mindustry/io/JsonIO.java | 12 +++----- core/src/io/anuke/mindustry/maps/Map.java | 4 ++- core/src/io/anuke/mindustry/maps/Maps.java | 29 +++++++++++++++++++ .../maps/filters/GenerateFilter.java | 13 +++------ .../mindustry/maps/filters/NoiseFilter.java | 2 +- .../maps/filters/RiverNoiseFilter.java | 2 +- .../mindustry/maps/filters/ScatterFilter.java | 8 ++--- core/src/io/anuke/mindustry/world/Tile.java | 2 +- 9 files changed, 50 insertions(+), 26 deletions(-) diff --git a/core/src/io/anuke/mindustry/editor/MapInfoDialog.java b/core/src/io/anuke/mindustry/editor/MapInfoDialog.java index 6aae3803e7..82ee7bcd6d 100644 --- a/core/src/io/anuke/mindustry/editor/MapInfoDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapInfoDialog.java @@ -9,6 +9,8 @@ import io.anuke.mindustry.game.*; import io.anuke.mindustry.io.*; import io.anuke.mindustry.ui.dialogs.*; +import static io.anuke.mindustry.Vars.world; + public class MapInfoDialog extends FloatingDialog{ private final MapEditor editor; private final WaveInfoDialog waveInfo; @@ -68,7 +70,7 @@ public class MapInfoDialog extends FloatingDialog{ t.row(); t.add("$editor.generation").padRight(8).left(); t.addButton("$edit", - () -> generate.show(JsonIO.read(Array.class, editor.getTags().get("genfilters", "{}")), + () -> generate.show(world.maps.readFilters(editor.getTags().get("genfilters", "")), filters -> editor.getTags().put("genfilters", JsonIO.write(filters))) ).left().width(200f); diff --git a/core/src/io/anuke/mindustry/io/JsonIO.java b/core/src/io/anuke/mindustry/io/JsonIO.java index 1c6151624f..6cea5fb1c1 100644 --- a/core/src/io/anuke/mindustry/io/JsonIO.java +++ b/core/src/io/anuke/mindustry/io/JsonIO.java @@ -1,13 +1,10 @@ package io.anuke.mindustry.io; -import io.anuke.arc.collection.EnumSet; -import io.anuke.arc.collection.LongQueue; -import io.anuke.arc.util.*; -import io.anuke.arc.util.serialization.Json; -import io.anuke.arc.util.serialization.JsonValue; -import io.anuke.mindustry.Vars; +import io.anuke.arc.collection.*; +import io.anuke.arc.util.serialization.*; +import io.anuke.mindustry.*; import io.anuke.mindustry.game.*; -import io.anuke.mindustry.game.Teams.TeamData; +import io.anuke.mindustry.game.Teams.*; import io.anuke.mindustry.type.*; import io.anuke.mindustry.world.*; @@ -46,7 +43,6 @@ public class JsonIO{ for(Block block : Vars.content.blocks()){ Class type = block.getClass(); if(type.isAnonymousClass()) type = type.getSuperclass(); - Log.info(type); setSerializer(type, new Serializer(){ @Override diff --git a/core/src/io/anuke/mindustry/maps/Map.java b/core/src/io/anuke/mindustry/maps/Map.java index 93a99de294..05878572b8 100644 --- a/core/src/io/anuke/mindustry/maps/Map.java +++ b/core/src/io/anuke/mindustry/maps/Map.java @@ -9,6 +9,8 @@ import io.anuke.mindustry.game.*; import io.anuke.mindustry.io.JsonIO; import io.anuke.mindustry.maps.filters.*; +import static io.anuke.mindustry.Vars.world; + public class Map implements Comparable{ /** Whether this is a custom map. */ public final boolean custom; @@ -69,7 +71,7 @@ public class Map implements Comparable{ /** Returns the generation filters that this map uses on load.*/ public Array filters(){ - return JsonIO.read(Array.class, tags.get("genfilters", "{}")); + return world.maps.readFilters(tags.get("genfilters", "")); } public String author(){ diff --git a/core/src/io/anuke/mindustry/maps/Maps.java b/core/src/io/anuke/mindustry/maps/Maps.java index 62c244d843..563882be2e 100644 --- a/core/src/io/anuke/mindustry/maps/Maps.java +++ b/core/src/io/anuke/mindustry/maps/Maps.java @@ -10,6 +10,7 @@ import io.anuke.arc.util.serialization.*; import io.anuke.mindustry.content.*; import io.anuke.mindustry.game.*; import io.anuke.mindustry.io.*; +import io.anuke.mindustry.maps.filters.*; import io.anuke.mindustry.world.*; import io.anuke.mindustry.world.blocks.storage.*; @@ -181,6 +182,34 @@ public class Maps implements Disposable{ map.file.delete(); } + /** Reads JSON of filters, returning a new default array if not found.*/ + @SuppressWarnings("unchecked") + public Array readFilters(String str){ + if(str == null || str.isEmpty()){ + return Array.with( + //stone + new ScatterFilter(){{ + flooronto = Blocks.stone; + block = Blocks.rock; + }}, + new ScatterFilter(){{ + flooronto = Blocks.shale; + block = Blocks.shaleBoulder; + }}, + new ScatterFilter(){{ + flooronto = Blocks.snow; + block = Blocks.snowrock; + }}, + new ScatterFilter(){{ + flooronto = Blocks.ice; + block = Blocks.snowrock; + }} + ); + }else{ + return JsonIO.read(Array.class, str); + } + } + public String writeWaves(Array groups){ if(groups == null){ return "[]"; diff --git a/core/src/io/anuke/mindustry/maps/filters/GenerateFilter.java b/core/src/io/anuke/mindustry/maps/filters/GenerateFilter.java index fdd16b9bad..007f2c1dbb 100644 --- a/core/src/io/anuke/mindustry/maps/filters/GenerateFilter.java +++ b/core/src/io/anuke/mindustry/maps/filters/GenerateFilter.java @@ -68,12 +68,7 @@ public abstract class GenerateFilter{ /** an input for generating at a certain coordinate. should only be instantiated once. */ public static class GenerateInput{ - /** input floor */ - public Floor srcfloor; - /** input block */ - public Block srcblock; - /** input overlay */ - public Block srcore; + /** input size parameters */ public int x, y, width, height; @@ -85,9 +80,9 @@ public abstract class GenerateFilter{ TileProvider buffer; public void apply(int x, int y, Block floor, Block block, Block ore){ - this.floor = this.srcfloor = (Floor)floor; - this.block = this.srcblock = block; - this.ore = srcore = ore; + this.floor = floor; + this.block = block; + this.ore = ore; this.x = x; this.y = y; } diff --git a/core/src/io/anuke/mindustry/maps/filters/NoiseFilter.java b/core/src/io/anuke/mindustry/maps/filters/NoiseFilter.java index d37eeeed29..90c60afc39 100644 --- a/core/src/io/anuke/mindustry/maps/filters/NoiseFilter.java +++ b/core/src/io/anuke/mindustry/maps/filters/NoiseFilter.java @@ -29,7 +29,7 @@ public class NoiseFilter extends GenerateFilter{ if(noise > threshold){ in.floor = floor; - if(wallsOnly.test(in.srcblock)) in.block = block; + if(wallsOnly.test(in.block)) in.block = block; } } } diff --git a/core/src/io/anuke/mindustry/maps/filters/RiverNoiseFilter.java b/core/src/io/anuke/mindustry/maps/filters/RiverNoiseFilter.java index e9bba5a7ba..6126657227 100644 --- a/core/src/io/anuke/mindustry/maps/filters/RiverNoiseFilter.java +++ b/core/src/io/anuke/mindustry/maps/filters/RiverNoiseFilter.java @@ -30,7 +30,7 @@ public class RiverNoiseFilter extends GenerateFilter{ if(noise >= threshold){ in.floor = floor; - if(in.srcblock.solid){ + if(in.block.solid){ in.block = block; } diff --git a/core/src/io/anuke/mindustry/maps/filters/ScatterFilter.java b/core/src/io/anuke/mindustry/maps/filters/ScatterFilter.java index 100c02be39..3c00823075 100644 --- a/core/src/io/anuke/mindustry/maps/filters/ScatterFilter.java +++ b/core/src/io/anuke/mindustry/maps/filters/ScatterFilter.java @@ -8,8 +8,8 @@ import io.anuke.mindustry.world.Block; import static io.anuke.mindustry.maps.filters.FilterOption.*; public class ScatterFilter extends GenerateFilter{ - float chance = 0.1f; - Block flooronto = Blocks.air, floor = Blocks.air, block = Blocks.air; + protected float chance = 0.014f; + protected Block flooronto = Blocks.air, floor = Blocks.air, block = Blocks.air; { options( @@ -23,7 +23,7 @@ public class ScatterFilter extends GenerateFilter{ @Override public void apply(){ - if(block != Blocks.air && (in.srcfloor == flooronto || flooronto == Blocks.air) && in.srcblock == Blocks.air && chance() <= chance){ + if(block != Blocks.air && (in.floor == flooronto || flooronto == Blocks.air) && in.block == Blocks.air && chance() <= chance){ if(!block.isOverlay()){ in.block = block; }else{ @@ -31,7 +31,7 @@ public class ScatterFilter extends GenerateFilter{ } } - if(floor != Blocks.air && (in.srcfloor == flooronto || flooronto == Blocks.air) && chance() <= chance){ + if(floor != Blocks.air && (in.floor == flooronto || flooronto == Blocks.air) && chance() <= chance){ in.floor = floor; } } diff --git a/core/src/io/anuke/mindustry/world/Tile.java b/core/src/io/anuke/mindustry/world/Tile.java index 386f3e1a55..f46178f1d4 100644 --- a/core/src/io/anuke/mindustry/world/Tile.java +++ b/core/src/io/anuke/mindustry/world/Tile.java @@ -191,7 +191,7 @@ public class Tile implements Position, TargetTrait{ } public void setOverlay(Block block){ - setOverlayID(block.id); + this.overlay = (Floor)block; } public void clearOverlay(){