Editor experimental sector generator

This commit is contained in:
Anuken
2022-01-22 15:06:46 -05:00
parent 97da66cd44
commit fdcc373813
11 changed files with 145 additions and 15 deletions

View File

@@ -67,6 +67,10 @@ public class MapEditor{
renderer.resize(width(), height());
}
public void updateRenderer(){
renderer.resize(width(), height());
}
public void load(Runnable r){
loading = true;
r.run();

View File

@@ -38,6 +38,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
private MapLoadDialog loadDialog;
private MapResizeDialog resizeDialog;
private MapGenerateDialog generateDialog;
private SectorGenerateDialog sectorGenDialog;
private ScrollPane pane;
private BaseDialog menu;
private Table blockSelection;
@@ -54,6 +55,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
view = new MapView();
infoDialog = new MapInfoDialog();
generateDialog = new MapGenerateDialog(true);
sectorGenDialog = new SectorGenerateDialog();
menu = new BaseDialog("@menu");
menu.addCloseButton();
@@ -161,7 +163,16 @@ public class MapEditorDialog extends Dialog implements Disposable{
menu.cont.row();
}
menu.cont.button("@editor.ingame", Icon.right, this::playtest).padTop(!steam ? -3 : 1).size(swidth * 2f + 10, 60f);
//wip feature
if(experimental){
menu.cont.button("@editor.sectorgenerate", Icon.terrain, () -> {
menu.hide();
sectorGenDialog.show();
}).padTop(!steam ? -3 : 1).size(swidth * 2f + 10, 60f);
menu.cont.row();
}
menu.cont.button("@editor.ingame", Icon.right, this::playtest).padTop(!steam && !experimental ? -3 : 1).size(swidth * 2f + 10, 60f);
menu.cont.row();

View File

@@ -0,0 +1,98 @@
package mindustry.editor;
import arc.util.*;
import mindustry.content.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.type.*;
import mindustry.ui.*;
import mindustry.ui.dialogs.*;
import static mindustry.Vars.*;
public class SectorGenerateDialog extends BaseDialog{
Planet planet = Planets.erekir;
int sector = 0, seed = 0;
public SectorGenerateDialog(){
super("@editor.sectorgenerate");
setup();
}
void setup(){
cont.clear();
buttons.clear();
addCloseButton();
cont.defaults().left();
cont.add("@editor.planet").padRight(10f);
cont.button(planet.localizedName, () -> {
BaseDialog dialog = new BaseDialog("");
dialog.cont.pane(p -> {
p.background(Tex.button).margin(10f);
int i = 0;
for(var plan : content.planets()){
if(plan.generator == null || plan.sectors.size == 0) continue;
p.button(plan.localizedName, Styles.clearTogglet, () -> {
planet = plan;
sector = Math.min(sector, planet.sectors.size - 1);
seed = 0;
dialog.hide();
}).size(110f, 45f).checked(planet == plan);
if(++i % 4 == 0){
p.row();
}
}
});
dialog.setFillParent(false);
dialog.addCloseButton();
dialog.show();
}).size(200f, 40f).get().getLabel().setText(() -> planet.localizedName);
cont.row();
cont.add("@editor.sector").padRight(10f);
cont.field(sector + "", text -> {
sector = Strings.parseInt(text);
}).width(200f).valid(text -> planet.sectors.size > Strings.parseInt(text, 99999));
cont.row();
cont.add("@editor.seed").padRight(10f);
cont.field(seed + "", text -> {
seed = Strings.parseInt(text);
}).width(200f).valid(Strings::canParseInt);
cont.row();
cont.label(() -> "[ " + planet.sectors.get(sector).getSize() + "x" + planet.sectors.get(sector).getSize() + " ]").color(Pal.accent).center().labelAlign(Align.center).padTop(5).colspan(2);
buttons.button("@editor.apply", Icon.ok, () -> {
ui.loadAnd(() -> {
apply();
hide();
});
});
}
void apply(){
ui.loadAnd(() -> {
editor.clearOp();
editor.load(() -> {
world.loadSector(planet.sectors.get(sector), seed);
editor.updateRenderer();
state.rules.sector = null;
//clear extra filters
editor.tags.put("genfilters", "{}");
});
});
}
}