mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-02-25 22:17:59 +07:00
Editor experimental sector generator
This commit is contained in:
parent
97da66cd44
commit
fdcc373813
@ -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}
|
||||
steam.error = Failed to initialize Steam services.\nError: {0}
|
||||
|
||||
editor.planet = Planet:
|
||||
editor.sector = Sector:
|
||||
editor.seed = Seed:
|
||||
editor.cliffs = Walls To Cliffs
|
||||
editor.brush = Brush
|
||||
editor.openin = Open In Editor
|
||||
@ -440,6 +443,7 @@ editor.update = Update
|
||||
editor.randomize = Randomize
|
||||
editor.apply = Apply
|
||||
editor.generate = Generate
|
||||
editor.sectorgenerate = Sector Generate
|
||||
editor.resize = Resize
|
||||
editor.loadmap = Load Map
|
||||
editor.savemap = Save Map
|
||||
|
@ -248,6 +248,10 @@ public class World{
|
||||
}
|
||||
|
||||
public void loadSector(Sector sector){
|
||||
loadSector(sector, 0);
|
||||
}
|
||||
|
||||
public void loadSector(Sector sector, int seedOffset){
|
||||
setSectorRules(sector);
|
||||
|
||||
int size = sector.getSize();
|
||||
@ -256,7 +260,7 @@ public class World{
|
||||
sector.preset.generator.generate(tiles);
|
||||
sector.preset.rules.get(state.rules); //apply extra rules
|
||||
}else if(sector.planet.generator != null){
|
||||
sector.planet.generator.generate(tiles, sector);
|
||||
sector.planet.generator.generate(tiles, sector, seedOffset);
|
||||
}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.");
|
||||
}
|
||||
|
@ -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", "{}");
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
@ -408,7 +408,7 @@ public abstract class BasicGenerator implements WorldGenerator{
|
||||
if(cx*cx + cy*cy <= r2){
|
||||
Tile other = tiles.get(tile.x + cx, tile.y + cy);
|
||||
|
||||
if(other != null){
|
||||
if(other != null && other.floor() != floor){
|
||||
other.setFloor(dest);
|
||||
}
|
||||
}
|
||||
|
@ -30,10 +30,10 @@ public class BlankPlanetGenerator extends PlanetGenerator{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generate(Tiles tiles, Sector sec){
|
||||
public void generate(Tiles tiles, Sector sec, int seed){
|
||||
this.tiles = tiles;
|
||||
this.sector = sec;
|
||||
this.rand.setSeed(sec.id);
|
||||
this.rand.setSeed(sec.id + seed + baseSeed);
|
||||
|
||||
tiles.fill();
|
||||
|
||||
|
@ -16,6 +16,9 @@ import mindustry.world.*;
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
public abstract class PlanetGenerator extends BasicGenerator implements HexMesher{
|
||||
public int baseSeed = 0;
|
||||
public int seed = 0;
|
||||
|
||||
protected IntSeq ints = new IntSeq();
|
||||
protected Sector sector;
|
||||
|
||||
@ -128,10 +131,11 @@ public abstract class PlanetGenerator extends BasicGenerator implements HexMeshe
|
||||
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.seed = seed + baseSeed;
|
||||
this.sector = sec;
|
||||
this.rand.setSeed(sec.id);
|
||||
this.rand.setSeed(sec.id + seed + baseSeed);
|
||||
|
||||
TileGen gen = new TileGen();
|
||||
tiles.each((x, y) -> {
|
||||
|
@ -18,8 +18,6 @@ import mindustry.world.meta.*;
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
public class ErekirPlanetGenerator extends PlanetGenerator{
|
||||
static final int seed = 2;
|
||||
|
||||
public float scl = 2f;
|
||||
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}
|
||||
};
|
||||
|
||||
{
|
||||
baseSeed = 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateSector(Sector sector){
|
||||
//no bases right now
|
||||
@ -96,11 +98,11 @@ public class ErekirPlanetGenerator extends PlanetGenerator{
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -257,6 +259,8 @@ public class ErekirPlanetGenerator extends PlanetGenerator{
|
||||
//}
|
||||
});
|
||||
|
||||
trimDark();
|
||||
|
||||
//vents
|
||||
outer:
|
||||
for(Tile tile : tiles){
|
||||
|
@ -21,7 +21,6 @@ import static mindustry.Vars.*;
|
||||
public class SerpuloPlanetGenerator extends PlanetGenerator{
|
||||
//alternate, less direct generation (wip)
|
||||
public static boolean alt = false;
|
||||
static final int seed = 0;
|
||||
|
||||
BaseGenerator basegen = new BaseGenerator();
|
||||
float scl = 5f;
|
||||
@ -120,7 +119,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
|
||||
tile.floor = getBlock(position);
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -16,14 +16,16 @@ import mindustry.world.meta.*;
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
public class TantrosPlanetGenerator extends PlanetGenerator{
|
||||
static final int seed = 1;
|
||||
|
||||
Color c1 = Color.valueOf("5057a6"), c2 = Color.valueOf("272766"), out = new Color();
|
||||
|
||||
Block[][] arr = {
|
||||
{Blocks.redmat, Blocks.redmat, Blocks.darksand, Blocks.bluemat, Blocks.bluemat}
|
||||
};
|
||||
|
||||
{
|
||||
baseSeed = 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateSector(Sector sector){
|
||||
//no bases
|
||||
|
Loading…
Reference in New Issue
Block a user