Added ore median filter
This commit is contained in:
@@ -268,6 +268,7 @@ filters.empty = [lightgray]No filters! Add one with the button below.
|
|||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.median = Median
|
filter.median = Median
|
||||||
|
filter.oremedian = Ore Median
|
||||||
filter.blend = Blend
|
filter.blend = Blend
|
||||||
filter.defaultores = Default Ores
|
filter.defaultores = Default Ores
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ import static io.anuke.mindustry.Vars.*;
|
|||||||
public class MapGenerateDialog extends FloatingDialog{
|
public class MapGenerateDialog extends FloatingDialog{
|
||||||
private final Supplier<GenerateFilter>[] filterTypes = new Supplier[]{
|
private final Supplier<GenerateFilter>[] filterTypes = new Supplier[]{
|
||||||
NoiseFilter::new, ScatterFilter::new, TerrainFilter::new, DistortFilter::new,
|
NoiseFilter::new, ScatterFilter::new, TerrainFilter::new, DistortFilter::new,
|
||||||
RiverNoiseFilter::new, OreFilter::new, MedianFilter::new, BlendFilter::new,
|
RiverNoiseFilter::new, OreFilter::new, OreMedianFilter::new, MedianFilter::new,
|
||||||
MirrorFilter::new, ClearFilter::new
|
BlendFilter::new, MirrorFilter::new, ClearFilter::new
|
||||||
};
|
};
|
||||||
private final MapEditor editor;
|
private final MapEditor editor;
|
||||||
private final boolean applied;
|
private final boolean applied;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user