Editor experimental sector generator
This commit is contained in:
@@ -367,6 +367,9 @@ publish.confirm = Are you sure you want to publish this?\n\n[lightgray]Make sure
|
|||||||
publish.error = Error publishing item: {0}
|
publish.error = Error publishing item: {0}
|
||||||
steam.error = Failed to initialize Steam services.\nError: {0}
|
steam.error = Failed to initialize Steam services.\nError: {0}
|
||||||
|
|
||||||
|
editor.planet = Planet:
|
||||||
|
editor.sector = Sector:
|
||||||
|
editor.seed = Seed:
|
||||||
editor.cliffs = Walls To Cliffs
|
editor.cliffs = Walls To Cliffs
|
||||||
editor.brush = Brush
|
editor.brush = Brush
|
||||||
editor.openin = Open In Editor
|
editor.openin = Open In Editor
|
||||||
@@ -440,6 +443,7 @@ editor.update = Update
|
|||||||
editor.randomize = Randomize
|
editor.randomize = Randomize
|
||||||
editor.apply = Apply
|
editor.apply = Apply
|
||||||
editor.generate = Generate
|
editor.generate = Generate
|
||||||
|
editor.sectorgenerate = Sector Generate
|
||||||
editor.resize = Resize
|
editor.resize = Resize
|
||||||
editor.loadmap = Load Map
|
editor.loadmap = Load Map
|
||||||
editor.savemap = Save Map
|
editor.savemap = Save Map
|
||||||
|
|||||||
@@ -248,6 +248,10 @@ public class World{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void loadSector(Sector sector){
|
public void loadSector(Sector sector){
|
||||||
|
loadSector(sector, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadSector(Sector sector, int seedOffset){
|
||||||
setSectorRules(sector);
|
setSectorRules(sector);
|
||||||
|
|
||||||
int size = sector.getSize();
|
int size = sector.getSize();
|
||||||
@@ -256,7 +260,7 @@ public class World{
|
|||||||
sector.preset.generator.generate(tiles);
|
sector.preset.generator.generate(tiles);
|
||||||
sector.preset.rules.get(state.rules); //apply extra rules
|
sector.preset.rules.get(state.rules); //apply extra rules
|
||||||
}else if(sector.planet.generator != null){
|
}else if(sector.planet.generator != null){
|
||||||
sector.planet.generator.generate(tiles, sector);
|
sector.planet.generator.generate(tiles, sector, seedOffset);
|
||||||
}else{
|
}else{
|
||||||
throw new RuntimeException("Sector " + sector.id + " on planet " + sector.planet.name + " has no generator or preset defined. Provide a planet generator or preset map.");
|
throw new RuntimeException("Sector " + sector.id + " on planet " + sector.planet.name + " has no generator or preset defined. Provide a planet generator or preset map.");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,6 +67,10 @@ public class MapEditor{
|
|||||||
renderer.resize(width(), height());
|
renderer.resize(width(), height());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateRenderer(){
|
||||||
|
renderer.resize(width(), height());
|
||||||
|
}
|
||||||
|
|
||||||
public void load(Runnable r){
|
public void load(Runnable r){
|
||||||
loading = true;
|
loading = true;
|
||||||
r.run();
|
r.run();
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
|||||||
private MapLoadDialog loadDialog;
|
private MapLoadDialog loadDialog;
|
||||||
private MapResizeDialog resizeDialog;
|
private MapResizeDialog resizeDialog;
|
||||||
private MapGenerateDialog generateDialog;
|
private MapGenerateDialog generateDialog;
|
||||||
|
private SectorGenerateDialog sectorGenDialog;
|
||||||
private ScrollPane pane;
|
private ScrollPane pane;
|
||||||
private BaseDialog menu;
|
private BaseDialog menu;
|
||||||
private Table blockSelection;
|
private Table blockSelection;
|
||||||
@@ -54,6 +55,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
|||||||
view = new MapView();
|
view = new MapView();
|
||||||
infoDialog = new MapInfoDialog();
|
infoDialog = new MapInfoDialog();
|
||||||
generateDialog = new MapGenerateDialog(true);
|
generateDialog = new MapGenerateDialog(true);
|
||||||
|
sectorGenDialog = new SectorGenerateDialog();
|
||||||
|
|
||||||
menu = new BaseDialog("@menu");
|
menu = new BaseDialog("@menu");
|
||||||
menu.addCloseButton();
|
menu.addCloseButton();
|
||||||
@@ -161,7 +163,16 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
|||||||
menu.cont.row();
|
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();
|
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", "{}");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -408,7 +408,7 @@ public abstract class BasicGenerator implements WorldGenerator{
|
|||||||
if(cx*cx + cy*cy <= r2){
|
if(cx*cx + cy*cy <= r2){
|
||||||
Tile other = tiles.get(tile.x + cx, tile.y + cy);
|
Tile other = tiles.get(tile.x + cx, tile.y + cy);
|
||||||
|
|
||||||
if(other != null){
|
if(other != null && other.floor() != floor){
|
||||||
other.setFloor(dest);
|
other.setFloor(dest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,10 +30,10 @@ public class BlankPlanetGenerator extends PlanetGenerator{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generate(Tiles tiles, Sector sec){
|
public void generate(Tiles tiles, Sector sec, int seed){
|
||||||
this.tiles = tiles;
|
this.tiles = tiles;
|
||||||
this.sector = sec;
|
this.sector = sec;
|
||||||
this.rand.setSeed(sec.id);
|
this.rand.setSeed(sec.id + seed + baseSeed);
|
||||||
|
|
||||||
tiles.fill();
|
tiles.fill();
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,9 @@ import mindustry.world.*;
|
|||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public abstract class PlanetGenerator extends BasicGenerator implements HexMesher{
|
public abstract class PlanetGenerator extends BasicGenerator implements HexMesher{
|
||||||
|
public int baseSeed = 0;
|
||||||
|
public int seed = 0;
|
||||||
|
|
||||||
protected IntSeq ints = new IntSeq();
|
protected IntSeq ints = new IntSeq();
|
||||||
protected Sector sector;
|
protected Sector sector;
|
||||||
|
|
||||||
@@ -128,10 +131,11 @@ public abstract class PlanetGenerator extends BasicGenerator implements HexMeshe
|
|||||||
return res % 2 == 0 ? res : res + 1;
|
return res % 2 == 0 ? res : res + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generate(Tiles tiles, Sector sec){
|
public void generate(Tiles tiles, Sector sec, int seed){
|
||||||
this.tiles = tiles;
|
this.tiles = tiles;
|
||||||
|
this.seed = seed + baseSeed;
|
||||||
this.sector = sec;
|
this.sector = sec;
|
||||||
this.rand.setSeed(sec.id);
|
this.rand.setSeed(sec.id + seed + baseSeed);
|
||||||
|
|
||||||
TileGen gen = new TileGen();
|
TileGen gen = new TileGen();
|
||||||
tiles.each((x, y) -> {
|
tiles.each((x, y) -> {
|
||||||
|
|||||||
@@ -18,8 +18,6 @@ import mindustry.world.meta.*;
|
|||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class ErekirPlanetGenerator extends PlanetGenerator{
|
public class ErekirPlanetGenerator extends PlanetGenerator{
|
||||||
static final int seed = 2;
|
|
||||||
|
|
||||||
public float scl = 2f;
|
public float scl = 2f;
|
||||||
public float heightScl = 0.9f, octaves = 8, persistence = 0.7f, heightPow = 3f, heightMult = 1.6f;
|
public float heightScl = 0.9f, octaves = 8, persistence = 0.7f, heightPow = 3f, heightMult = 1.6f;
|
||||||
|
|
||||||
@@ -30,6 +28,10 @@ public class ErekirPlanetGenerator extends PlanetGenerator{
|
|||||||
//{Blocks.regolith, Blocks.regolith, Blocks.yellowStone, Blocks.crystallineStone, Blocks.carbonStone}
|
//{Blocks.regolith, Blocks.regolith, Blocks.yellowStone, Blocks.crystallineStone, Blocks.carbonStone}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
{
|
||||||
|
baseSeed = 2;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generateSector(Sector sector){
|
public void generateSector(Sector sector){
|
||||||
//no bases right now
|
//no bases right now
|
||||||
@@ -96,11 +98,11 @@ public class ErekirPlanetGenerator extends PlanetGenerator{
|
|||||||
|
|
||||||
tile.block = tile.floor.asFloor().wall;
|
tile.block = tile.floor.asFloor().wall;
|
||||||
|
|
||||||
if(Ridged.noise3d(1, position.x, position.y, position.z, 2, 14) > 0.14){
|
if(Ridged.noise3d(seed + 1, position.x, position.y, position.z, 2, 14) > 0.14){
|
||||||
tile.block = Blocks.air;
|
tile.block = Blocks.air;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Ridged.noise3d(2, position.x, position.y + 4f, position.z, 3, 6f) > 0.6){
|
if(Ridged.noise3d(seed + 2, position.x, position.y + 4f, position.z, 3, 6f) > 0.6){
|
||||||
tile.floor = Blocks.carbonStone;
|
tile.floor = Blocks.carbonStone;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -257,6 +259,8 @@ public class ErekirPlanetGenerator extends PlanetGenerator{
|
|||||||
//}
|
//}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
trimDark();
|
||||||
|
|
||||||
//vents
|
//vents
|
||||||
outer:
|
outer:
|
||||||
for(Tile tile : tiles){
|
for(Tile tile : tiles){
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import static mindustry.Vars.*;
|
|||||||
public class SerpuloPlanetGenerator extends PlanetGenerator{
|
public class SerpuloPlanetGenerator extends PlanetGenerator{
|
||||||
//alternate, less direct generation (wip)
|
//alternate, less direct generation (wip)
|
||||||
public static boolean alt = false;
|
public static boolean alt = false;
|
||||||
static final int seed = 0;
|
|
||||||
|
|
||||||
BaseGenerator basegen = new BaseGenerator();
|
BaseGenerator basegen = new BaseGenerator();
|
||||||
float scl = 5f;
|
float scl = 5f;
|
||||||
@@ -120,7 +119,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
|
|||||||
tile.floor = getBlock(position);
|
tile.floor = getBlock(position);
|
||||||
tile.block = tile.floor.asFloor().wall;
|
tile.block = tile.floor.asFloor().wall;
|
||||||
|
|
||||||
if(Ridged.noise3d(1, position.x, position.y, position.z, 2, 22) > 0.31){
|
if(Ridged.noise3d(seed + 1, position.x, position.y, position.z, 2, 22) > 0.31){
|
||||||
tile.block = Blocks.air;
|
tile.block = Blocks.air;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,14 +16,16 @@ import mindustry.world.meta.*;
|
|||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class TantrosPlanetGenerator extends PlanetGenerator{
|
public class TantrosPlanetGenerator extends PlanetGenerator{
|
||||||
static final int seed = 1;
|
|
||||||
|
|
||||||
Color c1 = Color.valueOf("5057a6"), c2 = Color.valueOf("272766"), out = new Color();
|
Color c1 = Color.valueOf("5057a6"), c2 = Color.valueOf("272766"), out = new Color();
|
||||||
|
|
||||||
Block[][] arr = {
|
Block[][] arr = {
|
||||||
{Blocks.redmat, Blocks.redmat, Blocks.darksand, Blocks.bluemat, Blocks.bluemat}
|
{Blocks.redmat, Blocks.redmat, Blocks.darksand, Blocks.bluemat, Blocks.bluemat}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
{
|
||||||
|
baseSeed = 1;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generateSector(Sector sector){
|
public void generateSector(Sector sector){
|
||||||
//no bases
|
//no bases
|
||||||
|
|||||||
Reference in New Issue
Block a user