Fixed some generation issues

This commit is contained in:
Anuken 2019-07-25 22:18:45 -04:00
parent 69454048ad
commit 951cbf3d16
9 changed files with 50 additions and 26 deletions

View File

@ -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);

View File

@ -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<Block>(){
@Override

View File

@ -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<Map>{
/** Whether this is a custom map. */
public final boolean custom;
@ -69,7 +71,7 @@ public class Map implements Comparable<Map>{
/** Returns the generation filters that this map uses on load.*/
public Array<GenerateFilter> filters(){
return JsonIO.read(Array.class, tags.get("genfilters", "{}"));
return world.maps.readFilters(tags.get("genfilters", ""));
}
public String author(){

View File

@ -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<GenerateFilter> 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<SpawnGroup> groups){
if(groups == null){
return "[]";

View File

@ -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;
}

View File

@ -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;
}
}
}

View File

@ -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;
}

View File

@ -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;
}
}

View File

@ -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(){