Editor filter bugfixes

This commit is contained in:
Anuken
2021-06-07 18:07:37 -04:00
parent a452cd94c6
commit 1c9589eb26
6 changed files with 24 additions and 13 deletions

View File

@@ -460,6 +460,7 @@ toolmode.drawteams = Draw Teams
toolmode.drawteams.description = Draw teams instead of blocks. toolmode.drawteams.description = Draw teams instead of blocks.
filters.empty = [lightgray]No filters! Add one with the button below. filters.empty = [lightgray]No filters! Add one with the button below.
filter.distort = Distort filter.distort = Distort
filter.noise = Noise filter.noise = Noise
filter.enemyspawn = Enemy Spawn Select filter.enemyspawn = Enemy Spawn Select
@@ -476,6 +477,7 @@ filter.clear = Clear
filter.option.ignore = Ignore filter.option.ignore = Ignore
filter.scatter = Scatter filter.scatter = Scatter
filter.terrain = Terrain filter.terrain = Terrain
filter.option.scale = Scale filter.option.scale = Scale
filter.option.chance = Chance filter.option.chance = Chance
filter.option.mag = Magnitude filter.option.mag = Magnitude

View File

@@ -1,6 +1,5 @@
package mindustry.maps.filters; package mindustry.maps.filters;
import arc.math.*;
import arc.util.*; import arc.util.*;
import mindustry.content.*; import mindustry.content.*;
import mindustry.gen.*; import mindustry.gen.*;
@@ -15,9 +14,9 @@ public class BlendFilter extends GenerateFilter{
@Override @Override
public FilterOption[] options(){ public FilterOption[] options(){
return Structs.arr( return Structs.arr(
new SliderOption("radius", () -> radius, f -> radius = f, 1f, 10f), new SliderOption("radius", () -> radius, f -> radius = f, 1f, 15f),
new BlockOption("block", () -> block, b -> block = b, anyOptional), new BlockOption("block", () -> block, b -> block = b, anyOptional),
new BlockOption("floor", () -> floor, b -> floor = b, floorsOnly), new BlockOption("floor", () -> floor, b -> floor = b, anyOptional),
new BlockOption("ignore", () -> ignore, b -> ignore = b, floorsOptional) new BlockOption("ignore", () -> ignore, b -> ignore = b, floorsOptional)
); );
} }
@@ -34,7 +33,7 @@ public class BlendFilter extends GenerateFilter{
@Override @Override
public void apply(){ public void apply(){
if(in.floor == block || block == Blocks.air || in.floor == ignore) return; if(in.floor == block || block == Blocks.air || in.floor == ignore || (!floor.isFloor() && (in.block == block || in.block == ignore))) return;
int rad = (int)radius; int rad = (int)radius;
boolean found = false; boolean found = false;
@@ -42,7 +41,7 @@ public class BlendFilter extends GenerateFilter{
outer: outer:
for(int x = -rad; x <= rad; x++){ for(int x = -rad; x <= rad; x++){
for(int y = -rad; y <= rad; y++){ for(int y = -rad; y <= rad; y++){
if(Mathf.within(x, y, rad)) continue; if(x*x + y*y > rad) continue;
Tile tile = in.tile(in.x + x, in.y + y); Tile tile = in.tile(in.x + x, in.y + y);
if(tile.floor() == block || tile.block() == block || tile.overlay() == block){ if(tile.floor() == block || tile.block() == block || tile.overlay() == block){
@@ -53,7 +52,11 @@ public class BlendFilter extends GenerateFilter{
} }
if(found){ if(found){
in.floor = floor; if(!floor.isFloor()){
in.block = floor;
}else{
in.floor = floor;
}
} }
} }
} }

View File

@@ -9,7 +9,6 @@ import arc.scene.ui.layout.*;
import mindustry.*; import mindustry.*;
import mindustry.content.*; import mindustry.content.*;
import mindustry.gen.*; import mindustry.gen.*;
import mindustry.ui.*;
import mindustry.ui.dialogs.*; import mindustry.ui.dialogs.*;
import mindustry.world.*; import mindustry.world.*;
import mindustry.world.blocks.environment.*; import mindustry.world.blocks.environment.*;
@@ -105,6 +104,7 @@ public abstract class FilterOption{
if(++i % 10 == 0) dialog.cont.row(); if(++i % 10 == 0) dialog.cont.row();
} }
dialog.closeOnBack();
dialog.show(); dialog.show();
}).pad(4).margin(12f); }).pad(4).margin(12f);

View File

@@ -75,11 +75,16 @@ public abstract class GenerateFilter{
/** draw any additional guides */ /** draw any additional guides */
public void draw(Image image){} public void draw(Image image){}
/** localized display name */ public String simpleName(){
public String name(){
Class c = getClass(); Class c = getClass();
if(c.isAnonymousClass()) c = c.getSuperclass(); if(c.isAnonymousClass()) c = c.getSuperclass();
return Core.bundle.get("filter." + c.getSimpleName().toLowerCase().replace("filter", ""), c.getSimpleName().replace("Filter", "")); return c.getSimpleName().toLowerCase().replace("filter", "");
}
/** localized display name */
public String name(){
var s = simpleName();
return Core.bundle.get("filter." + s);
} }
public char icon(){ public char icon(){

View File

@@ -10,14 +10,15 @@ import mindustry.world.*;
import static mindustry.Vars.*; import static mindustry.Vars.*;
public class MedianFilter extends GenerateFilter{ public class MedianFilter extends GenerateFilter{
private static final IntSeq blocks = new IntSeq(), floors = new IntSeq();
float radius = 2; float radius = 2;
float percentile = 0.5f; float percentile = 0.5f;
IntSeq blocks = new IntSeq(), floors = new IntSeq();
@Override @Override
public FilterOption[] options(){ public FilterOption[] options(){
return Structs.arr( return Structs.arr(
new SliderOption("radius", () -> radius, f -> radius = f, 1f, 12f), new SliderOption("radius", () -> radius, f -> radius = f, 1f, 10f),
new SliderOption("percentile", () -> percentile, f -> percentile = f, 0f, 1f) new SliderOption("percentile", () -> percentile, f -> percentile = f, 0f, 1f)
); );
} }

View File

@@ -331,7 +331,7 @@ public class Generators{
average.mul(1f / asum); average.mul(1f / asum);
if(block instanceof Floor){ if(block instanceof Floor){
average.mul(0.8f); average.mul(0.77f);
}else{ }else{
average.mul(1.1f); average.mul(1.1f);
} }