Editor experimental sector generator
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
98
core/src/mindustry/editor/SectorGenerateDialog.java
Normal file
98
core/src/mindustry/editor/SectorGenerateDialog.java
Normal 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", "{}");
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user