Implemented random map load filters

This commit is contained in:
Anuken
2019-07-25 21:27:16 -04:00
parent 4a638cba79
commit c4ceb89240
14 changed files with 230 additions and 169 deletions

View File

@@ -7,6 +7,7 @@ import io.anuke.arc.graphics.Texture;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.game.*;
import io.anuke.mindustry.io.JsonIO;
import io.anuke.mindustry.maps.filters.*;
public class Map implements Comparable<Map>{
/** Whether this is a custom map. */
@@ -59,25 +60,18 @@ public class Map implements Comparable<Map>{
Vars.data.modified();
}
/** This creates a new instance.*/
/** This creates a new instance of Rules.*/
public Rules rules(){
Rules result = JsonIO.read(Rules.class, tags.get("rules", "{}"));
if(result.spawns.isEmpty()) result.spawns = Vars.defaultWaves.get();
return result;
}
/** Whether this map has a core of the enemy 'wave' team. Default: true.
* Used for checking Attack mode validity.
public boolean hasEnemyCore(){
return tags.get("enemycore", "true").equals("true");
/** Returns the generation filters that this map uses on load.*/
public Array<GenerateFilter> filters(){
return JsonIO.read(Array.class, tags.get("genfilters", "{}"));
}
/** Whether this map has a core of any team except the default player team. Default: true.
* Used for checking PvP mode validity.
public boolean hasOtherCores(){
return tags.get("othercore", "true").equals("true");
}*/
public String author(){
return tag("author");
}

View File

@@ -13,6 +13,7 @@ public class BlendFilter extends GenerateFilter{
Block flooronto = Blocks.stone, floor = Blocks.ice;
{
buffered = true;
options(
new SliderOption("radius", () -> radius, f -> radius = f, 1f, 10f),
new BlockOption("flooronto", () -> flooronto, b -> flooronto = b, floorsOnly),

View File

@@ -10,6 +10,7 @@ public class DistortFilter extends GenerateFilter{
float scl = 40, mag = 5;
{
buffered = true;
options(
new SliderOption("scale", () -> scl, f -> scl = f, 1f, 400f),
new SliderOption("mag", () -> mag, f -> mag = f, 0.5f, 100f)

View File

@@ -15,7 +15,8 @@ public abstract class GenerateFilter{
protected transient long seed;
protected transient GenerateInput in;
public FilterOption[] options;
public transient boolean buffered = false;
public transient FilterOption[] options;
public final void apply(GenerateInput in){
this.in = in;

View File

@@ -13,6 +13,7 @@ public class MedianFilter extends GenerateFilter{
IntArray blocks = new IntArray(), floors = new IntArray();
{
buffered = true;
options(
new SliderOption("radius", () -> radius, f -> radius = f, 1f, 12f),
new SliderOption("percentile", () -> percentile, f -> percentile = f, 0f, 1f)

View File

@@ -8,7 +8,7 @@ import static io.anuke.mindustry.maps.filters.FilterOption.BlockOption;
import static io.anuke.mindustry.maps.filters.FilterOption.oresOnly;
public class OreFilter extends GenerateFilter{
public float scl = 50, threshold = 0.72f, octaves = 3f, falloff = 0.4f;
public float scl = 45, threshold = 0.73f, octaves = 3f, falloff = 0.4f;
public Block ore = Blocks.oreCopper;
{

View File

@@ -1,23 +1,19 @@
package io.anuke.mindustry.maps.generators;
import io.anuke.arc.collection.Array;
import io.anuke.arc.math.Mathf;
import io.anuke.arc.math.geom.Point2;
import io.anuke.arc.util.Structs;
import io.anuke.arc.util.noise.Simplex;
import io.anuke.mindustry.content.Blocks;
import io.anuke.mindustry.io.MapIO;
import io.anuke.mindustry.maps.Map;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.Loadout;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
import io.anuke.arc.collection.*;
import io.anuke.arc.math.*;
import io.anuke.arc.math.geom.*;
import io.anuke.arc.util.*;
import io.anuke.arc.util.noise.*;
import io.anuke.mindustry.content.*;
import io.anuke.mindustry.io.*;
import io.anuke.mindustry.maps.*;
import io.anuke.mindustry.type.*;
import io.anuke.mindustry.world.*;
import io.anuke.mindustry.world.blocks.*;
import io.anuke.mindustry.world.blocks.storage.CoreBlock;
import io.anuke.mindustry.world.blocks.storage.StorageBlock;
import io.anuke.mindustry.world.blocks.storage.*;
import static io.anuke.mindustry.Vars.defaultTeam;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Vars.*;
public class MapGenerator extends Generator{
private Map map;
@@ -82,7 +78,7 @@ public class MapGenerator extends Generator{
}
}
MapIO.loadMap(map);
SaveIO.load(map.file);
Array<Point2> players = new Array<>();
Array<Point2> enemies = new Array<>();