seed saved per world and ui input for seed
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
This commit is contained in:
parent
32641d0035
commit
28735cea4e
@ -11,6 +11,7 @@ import electrosphere.entity.scene.SceneGenerator;
|
||||
import electrosphere.renderer.ui.elements.Button;
|
||||
import electrosphere.renderer.ui.elements.Div;
|
||||
import electrosphere.renderer.ui.elements.FormElement;
|
||||
import electrosphere.renderer.ui.elements.Label;
|
||||
import electrosphere.renderer.ui.elements.TextInput;
|
||||
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaAlignment;
|
||||
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaJustification;
|
||||
@ -89,23 +90,37 @@ public class MenuWorldSelect {
|
||||
public static Element createWorldCreationMenu(){
|
||||
FormElement rVal = new FormElement();
|
||||
|
||||
//text entry (address)
|
||||
//text entry (world name)
|
||||
Div worldNameInputContainer = Div.createRow();
|
||||
worldNameInputContainer.setMarginBottom(20);
|
||||
Label worldNameLabel = Label.createLabel("Input Name: ");
|
||||
worldNameInputContainer.addChild(worldNameLabel);
|
||||
TextInput worldNameInput = TextInput.createTextInput();
|
||||
worldNameInput.setMinWidth(100);
|
||||
worldNameInput.setMaxWidthPercent(50);
|
||||
worldNameInput.setText("World name");
|
||||
worldNameInputContainer.addChild(worldNameInput);
|
||||
|
||||
//text entry (world seed)
|
||||
Div worldSeedInputContainer = Div.createRow();
|
||||
worldSeedInputContainer.setMarginBottom(20);
|
||||
Label worldSeedLabel = Label.createLabel("Input Seed: ");
|
||||
worldSeedInputContainer.addChild(worldSeedLabel);
|
||||
TextInput worldSeedInput = TextInput.createTextInput();
|
||||
worldSeedInput.setMinWidth(100);
|
||||
worldSeedInput.setMaxWidthPercent(50);
|
||||
worldSeedInput.setText(System.currentTimeMillis() + "");
|
||||
worldSeedInputContainer.addChild(worldSeedInput);
|
||||
|
||||
|
||||
//button (create)
|
||||
Div createButtonContainer = Div.createCol();
|
||||
createButtonContainer.setMarginTop(20);
|
||||
createButtonContainer.addChild(Button.createButton("Create", () -> {
|
||||
String saveName = worldNameInput.getText();
|
||||
String seed = worldSeedInput.getText();
|
||||
//create save dir
|
||||
SaveUtils.createOrOverwriteSave(saveName, SceneGenerator.createProceduralSceneFile(saveName));
|
||||
SaveUtils.createOrOverwriteSave(saveName, SceneGenerator.createProceduralSceneFile(saveName, seed));
|
||||
WindowUtils.replaceMainMenuContents(MenuWorldSelect.createWorldSelectMenu());
|
||||
}));
|
||||
|
||||
@ -113,6 +128,7 @@ public class MenuWorldSelect {
|
||||
//layout content
|
||||
Div mainLayout = Div.createCol(
|
||||
worldNameInputContainer,
|
||||
worldSeedInputContainer,
|
||||
createButtonContainer
|
||||
);
|
||||
mainLayout.setMarginTop(300);
|
||||
|
||||
@ -33,7 +33,7 @@ public class DebugSPWorldLoading {
|
||||
//the juicy server GENERATION part
|
||||
//
|
||||
//init save structure
|
||||
SaveUtils.createOrOverwriteSave(saveName, SceneGenerator.createProceduralSceneFile(saveName));
|
||||
SaveUtils.createOrOverwriteSave(saveName, SceneGenerator.createProceduralSceneFile(saveName, ""));
|
||||
}
|
||||
//load just-created save
|
||||
SaveUtils.loadSave(saveName, false);
|
||||
|
||||
@ -37,7 +37,7 @@ public class ServerLoading {
|
||||
//the juicy server GENERATION part
|
||||
//
|
||||
//init save structure
|
||||
SaveUtils.createOrOverwriteSave(saveName, SceneGenerator.createProceduralSceneFile(saveName));
|
||||
SaveUtils.createOrOverwriteSave(saveName, SceneGenerator.createProceduralSceneFile(saveName, ""));
|
||||
}
|
||||
//load just-created save
|
||||
SaveUtils.loadSave(saveName, false);
|
||||
|
||||
@ -38,6 +38,11 @@ public class SceneFile {
|
||||
*/
|
||||
boolean loadAllCells;
|
||||
|
||||
/**
|
||||
* The seed for the random number generator
|
||||
*/
|
||||
long seed = 0;
|
||||
|
||||
|
||||
/**
|
||||
* Private constructor
|
||||
@ -117,4 +122,12 @@ public class SceneFile {
|
||||
return loadAllCells;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the seed of the scene file
|
||||
* @return The seed
|
||||
*/
|
||||
public long getSeed(){
|
||||
return seed;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package electrosphere.entity.scene;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import electrosphere.server.datacell.gridded.GriddedDataCellManager;
|
||||
import electrosphere.server.terrain.generation.TestGenerationChunkGenerator;
|
||||
|
||||
@ -13,7 +15,7 @@ public class SceneGenerator {
|
||||
* @param gridSize The size of the terrain grid of the scene
|
||||
* @return The scene file
|
||||
*/
|
||||
public static SceneFile createProceduralSceneFile(String saveName){
|
||||
public static SceneFile createProceduralSceneFile(String saveName, String seed){
|
||||
//base file stuff
|
||||
SceneFile file = SceneFile.createSceneFile();
|
||||
//realm descriptor stuff
|
||||
@ -21,7 +23,7 @@ public class SceneGenerator {
|
||||
file.realmDescriptor.griddedRealmSize = GriddedDataCellManager.MAX_GRID_SIZE;
|
||||
file.createSaveInstance = true; //won't have a predefined scene to load, so must create one in the save
|
||||
file.loadAllCells = false; // do not load all cells on init
|
||||
|
||||
file.seed = Objects.hash(seed);
|
||||
return file;
|
||||
}
|
||||
|
||||
|
||||
@ -115,7 +115,7 @@ public class SaveUtils {
|
||||
ServerWorldData serverWorldData = ServerWorldData.createGriddedRealmWorldData(ServerWorldData.PROCEDURAL_WORLD_SIZE);
|
||||
FileUtils.serializeObjectToSavePath(saveName, "./world.json", serverWorldData);
|
||||
//terrain manager
|
||||
ServerTerrainManager serverTerrainManager = new ServerTerrainManager(serverWorldData, 0, new TestGenerationChunkGenerator(serverWorldData, false));
|
||||
ServerTerrainManager serverTerrainManager = new ServerTerrainManager(serverWorldData, sceneFile.getSeed(), new TestGenerationChunkGenerator(serverWorldData, false));
|
||||
serverTerrainManager.generate();
|
||||
serverTerrainManager.save(saveName);
|
||||
//fluid manager
|
||||
|
||||
@ -395,6 +395,12 @@ public class TestGenerationChunkGenerator implements ChunkGenerator {
|
||||
@Override
|
||||
public void setModel(TerrainModel model) {
|
||||
this.terrainModel = model;
|
||||
for(HeightmapGenerator generator : this.tagHeightmapMap.values()){
|
||||
generator.setSeed(model.getSeed());
|
||||
}
|
||||
for(VoxelGenerator generator : this.tagVoxelMap.values()){
|
||||
generator.setSeed(model.getSeed());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -169,7 +169,7 @@ public class TerrainGenerator {
|
||||
// MOUNTAIN_THRESHOLD * verticalInterpolationRatio,
|
||||
// dynamicInterpRatio
|
||||
// );
|
||||
rVal = TerrainModel.create();
|
||||
rVal = TerrainModel.create(0);
|
||||
|
||||
|
||||
//create internal renderer
|
||||
|
||||
@ -2,6 +2,11 @@ package electrosphere.server.terrain.generation.heightmap;
|
||||
|
||||
public class EmptySkyGen implements HeightmapGenerator {
|
||||
|
||||
/**
|
||||
* The seed of the generator
|
||||
*/
|
||||
long seed = 0;
|
||||
|
||||
@Override
|
||||
public float getHeight(long SEED, double x, double y) {
|
||||
return 0;
|
||||
@ -12,4 +17,9 @@ public class EmptySkyGen implements HeightmapGenerator {
|
||||
return "empty";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSeed(long seed){
|
||||
this.seed = seed;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -20,4 +20,10 @@ public interface HeightmapGenerator {
|
||||
*/
|
||||
public String getTag();
|
||||
|
||||
/**
|
||||
* Sets the seed of the generator
|
||||
* @param seed The seed
|
||||
*/
|
||||
public void setSeed(long seed);
|
||||
|
||||
}
|
||||
|
||||
@ -13,6 +13,11 @@ public class HeightmapNoiseGen implements HeightmapGenerator {
|
||||
*/
|
||||
String tag;
|
||||
|
||||
/**
|
||||
* The seed of the generator
|
||||
*/
|
||||
long seed = 0;
|
||||
|
||||
/**
|
||||
* The sampler to pull from when allocating voxels
|
||||
*/
|
||||
@ -37,4 +42,9 @@ public class HeightmapNoiseGen implements HeightmapGenerator {
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSeed(long seed){
|
||||
this.seed = seed;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -40,6 +40,11 @@ public class HillsGen implements HeightmapGenerator {
|
||||
//param for controlling how pointer the initial layers are
|
||||
public static float GRAD_INFLUENCE_DROPOFF = 0.35f;
|
||||
|
||||
/**
|
||||
* The seed of the generator
|
||||
*/
|
||||
long seed = 0;
|
||||
|
||||
|
||||
/**
|
||||
* Gets the height at a given position for this generation approach
|
||||
@ -96,4 +101,9 @@ public class HillsGen implements HeightmapGenerator {
|
||||
return "hills";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSeed(long seed){
|
||||
this.seed = seed;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -46,6 +46,10 @@ public class MountainGen implements HeightmapGenerator {
|
||||
{0.3, 0.2},
|
||||
};
|
||||
|
||||
/**
|
||||
* The seed of the generator
|
||||
*/
|
||||
long seed = 0;
|
||||
|
||||
/**
|
||||
* Gets the height at a given position for this generation approach
|
||||
@ -94,4 +98,9 @@ public class MountainGen implements HeightmapGenerator {
|
||||
public String getTag() {
|
||||
return "mountains";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSeed(long seed){
|
||||
this.seed = seed;
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,6 +17,11 @@ public class PlainsGen implements HeightmapGenerator {
|
||||
*/
|
||||
static final float GEN_SCALE = 0.2f;
|
||||
|
||||
/**
|
||||
* The seed of the generator
|
||||
*/
|
||||
long seed = 0;
|
||||
|
||||
//the different scales of noise to sample from
|
||||
static final double[][] NOISE_SCALES = new double[][]{
|
||||
{0.01, 3.0},
|
||||
@ -62,4 +67,9 @@ public class PlainsGen implements HeightmapGenerator {
|
||||
return "plains";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSeed(long seed){
|
||||
this.seed = seed;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -7,6 +7,11 @@ import electrosphere.util.noise.OpenSimplex2S;
|
||||
*/
|
||||
public class SeaFloorGen implements HeightmapGenerator {
|
||||
|
||||
/**
|
||||
* The seed of the generator
|
||||
*/
|
||||
long seed = 0;
|
||||
|
||||
/**
|
||||
* The scale of the noise
|
||||
*/
|
||||
@ -23,4 +28,9 @@ public class SeaFloorGen implements HeightmapGenerator {
|
||||
return "seafloor";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSeed(long seed){
|
||||
this.seed = seed;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -17,6 +17,7 @@ public class DefaultMacroGenerator implements MacroGenerator {
|
||||
int DIM = model.getDiscreteArrayDimension();
|
||||
float[][] elevation = model.getElevation();
|
||||
short[][] biome = model.getBiome();
|
||||
long seed = model.getSeed();
|
||||
|
||||
for(int x = 0; x < DIM; x++){
|
||||
for(int y = 0; y < DIM; y++){
|
||||
|
||||
@ -57,11 +57,21 @@ public class AnimeMountainsGen implements VoxelGenerator {
|
||||
*/
|
||||
public static final double VERTICAL_ROTATION_OFFSET_VARIANCE = 0.2;
|
||||
|
||||
/**
|
||||
* The seed for the generator
|
||||
*/
|
||||
long seed = 0;
|
||||
|
||||
@Override
|
||||
public String getTag() {
|
||||
return "animeMountain";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSeed(long seed){
|
||||
this.seed = seed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getVoxel(
|
||||
GeneratedVoxel voxel,
|
||||
|
||||
@ -15,12 +15,22 @@ public class HillsVoxelGen implements VoxelGenerator {
|
||||
*/
|
||||
public static final int SURFACE_VOXEL_WIDTH = 2;
|
||||
|
||||
/**
|
||||
* The seed of the generator
|
||||
*/
|
||||
long seed;
|
||||
|
||||
|
||||
@Override
|
||||
public String getTag(){
|
||||
return "hills";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSeed(long seed){
|
||||
this.seed = seed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getVoxel(
|
||||
GeneratedVoxel voxel,
|
||||
|
||||
@ -22,12 +22,21 @@ public class MountainVoxelGen implements VoxelGenerator {
|
||||
*/
|
||||
public static final float GRADIENT_DIRT_CUTOFF = 0.1f;
|
||||
|
||||
/**
|
||||
* The seed of the generator
|
||||
*/
|
||||
long seed;
|
||||
|
||||
@Override
|
||||
public String getTag(){
|
||||
return "mountains";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSeed(long seed){
|
||||
this.seed = seed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getVoxel(
|
||||
GeneratedVoxel voxel,
|
||||
|
||||
@ -31,6 +31,11 @@ public class NoiseVoxelGen implements VoxelGenerator {
|
||||
*/
|
||||
NoiseSampler sampler;
|
||||
|
||||
/**
|
||||
* The seed of the generator
|
||||
*/
|
||||
long seed;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param samplerDefinitionFile The file to model this generator off of
|
||||
@ -45,6 +50,11 @@ public class NoiseVoxelGen implements VoxelGenerator {
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSeed(long seed){
|
||||
this.seed = seed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getVoxel(
|
||||
GeneratedVoxel voxel,
|
||||
|
||||
@ -17,6 +17,12 @@ public interface VoxelGenerator {
|
||||
*/
|
||||
public String getTag();
|
||||
|
||||
/**
|
||||
* Sets the seed of the generator
|
||||
* @param seed The seed
|
||||
*/
|
||||
public void setSeed(long seed);
|
||||
|
||||
|
||||
/**
|
||||
* Gets the value for a chunk
|
||||
|
||||
@ -100,7 +100,7 @@ public class ServerTerrainManager {
|
||||
* Generates a terrain model for the manager
|
||||
*/
|
||||
public void generate(){
|
||||
this.model = TerrainModel.create();
|
||||
this.model = TerrainModel.create(this.seed);
|
||||
DefaultMacroGenerator generator = new DefaultMacroGenerator();
|
||||
generator.generate(this.model);
|
||||
this.chunkGenerator.setModel(this.model);
|
||||
|
||||
@ -83,10 +83,11 @@ public class TerrainModel {
|
||||
* Creates the default terrain model
|
||||
* @return The default terrain model
|
||||
*/
|
||||
public static TerrainModel create(){
|
||||
public static TerrainModel create(long seed){
|
||||
TerrainModel rVal = new TerrainModel();
|
||||
rVal.elevation = new float[rVal.discreteArrayDimension][rVal.discreteArrayDimension];
|
||||
rVal.biome = new short[rVal.discreteArrayDimension][rVal.discreteArrayDimension];
|
||||
rVal.seed = seed;
|
||||
return rVal;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user