Added ore median filter

This commit is contained in:
Anuken 2019-08-02 12:56:21 -04:00
parent 77d4b0972d
commit 8e84e7284e
3 changed files with 46 additions and 2 deletions

View File

@ -268,6 +268,7 @@ filters.empty = [lightgray]No filters! Add one with the button below.
filter.distort = Distort
filter.noise = Noise
filter.median = Median
filter.oremedian = Ore Median
filter.blend = Blend
filter.defaultores = Default Ores
filter.ore = Ore

View File

@ -28,8 +28,8 @@ import static io.anuke.mindustry.Vars.*;
public class MapGenerateDialog extends FloatingDialog{
private final Supplier<GenerateFilter>[] filterTypes = new Supplier[]{
NoiseFilter::new, ScatterFilter::new, TerrainFilter::new, DistortFilter::new,
RiverNoiseFilter::new, OreFilter::new, MedianFilter::new, BlendFilter::new,
MirrorFilter::new, ClearFilter::new
RiverNoiseFilter::new, OreFilter::new, OreMedianFilter::new, MedianFilter::new,
BlendFilter::new, MirrorFilter::new, ClearFilter::new
};
private final MapEditor editor;
private final boolean applied;

View File

@ -0,0 +1,43 @@
package io.anuke.mindustry.maps.filters;
import io.anuke.arc.collection.*;
import io.anuke.arc.math.*;
import io.anuke.mindustry.maps.filters.FilterOption.*;
import io.anuke.mindustry.world.*;
import static io.anuke.mindustry.Vars.content;
public class OreMedianFilter extends GenerateFilter{
float radius = 2;
float percentile = 0.5f;
IntArray blocks = new IntArray();
{
buffered = true;
options(
new SliderOption("radius", () -> radius, f -> radius = f, 1f, 12f),
new SliderOption("percentile", () -> percentile, f -> percentile = f, 0f, 1f)
);
}
@Override
public void apply(){
int rad = (int)radius;
blocks.clear();
for(int x = -rad; x <= rad; x++){
for(int y = -rad; y <= rad; y++){
if(Mathf.dst2(x, y) > rad*rad) continue;
Tile tile = in.tile(in.x + x, in.y + y);
blocks.add(tile.overlay().id);
}
}
blocks.sort();
int index = Math.min((int)(blocks.size * percentile), blocks.size - 1);
int overlay = blocks.get(index), block = blocks.get(index);
in.ore = content.block(overlay);
}
}