homogenous world type
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
This commit is contained in:
parent
1672119cb3
commit
f9a7dfea14
@ -1406,7 +1406,10 @@ HillsGen visuals work
|
||||
Falling min frames to activate increased
|
||||
Reorganizing world creation ui file
|
||||
UI panel work
|
||||
World creation options work
|
||||
|
||||
(04/02/2025)
|
||||
Homogenous worlds actually generate-able
|
||||
|
||||
|
||||
|
||||
|
||||
@ -11,6 +11,8 @@ import electrosphere.engine.Globals;
|
||||
import electrosphere.engine.loadingthreads.LoadingThread;
|
||||
import electrosphere.engine.loadingthreads.LoadingThread.LoadingThreadType;
|
||||
import electrosphere.engine.signal.Signal.SignalType;
|
||||
import electrosphere.entity.scene.RealmDescriptor;
|
||||
import electrosphere.entity.scene.SceneFile;
|
||||
import electrosphere.entity.scene.SceneGenerator;
|
||||
import electrosphere.renderer.ui.elements.Button;
|
||||
import electrosphere.renderer.ui.elements.Div;
|
||||
@ -113,7 +115,10 @@ public class MenuWorldSelect {
|
||||
TextInput worldNameInput = TextInput.createTextInput();
|
||||
worldNameInput.setMinWidth(150);
|
||||
worldNameInput.setMaxWidthPercent(50);
|
||||
worldNameInput.setText("World name");
|
||||
worldNameInput.setText(params.name);
|
||||
worldNameInput.setOnValueChangeCallback((value) -> {
|
||||
params.name = value.getAsString();
|
||||
});
|
||||
worldNameInputContainer.addChild(worldNameInput);
|
||||
|
||||
//text entry (world seed)
|
||||
@ -124,7 +129,10 @@ public class MenuWorldSelect {
|
||||
TextInput worldSeedInput = TextInput.createTextInput();
|
||||
worldSeedInput.setMinWidth(150);
|
||||
worldSeedInput.setMaxWidthPercent(50);
|
||||
worldSeedInput.setText(System.currentTimeMillis() + "");
|
||||
worldSeedInput.setText(params.seed);
|
||||
worldSeedInput.setOnValueChangeCallback((value) -> {
|
||||
params.seed = value.getAsString();
|
||||
});
|
||||
worldSeedInputContainer.addChild(worldSeedInput);
|
||||
|
||||
Div worldTypeMenuButtonContainer = Div.createRow();
|
||||
@ -140,10 +148,29 @@ public class MenuWorldSelect {
|
||||
Div createButtonContainer = Div.createCol();
|
||||
createButtonContainer.setMarginTop(20);
|
||||
createButtonContainer.addChild(Button.createButton("Create", () -> {
|
||||
String saveName = worldNameInput.getText();
|
||||
String seed = worldSeedInput.getText();
|
||||
String saveName = params.name;
|
||||
String seed = params.seed;
|
||||
//create scene file
|
||||
SceneFile sceneFile = SceneGenerator.createProceduralSceneFile(saveName, seed);
|
||||
switch(params.worldType){
|
||||
case 0: {
|
||||
sceneFile.getRealmDescriptor().setWorldType(RealmDescriptor.PROCEDURAL_TYPE_DEFAULT);
|
||||
} break;
|
||||
case 1: {
|
||||
sceneFile.getRealmDescriptor().setWorldType(RealmDescriptor.PROCEDURAL_TYPE_HOMOGENOUS);
|
||||
|
||||
//set biome as well
|
||||
List<String> biomes = Globals.gameConfigCurrent.getBiomeMap().getSurfaceBiomes().stream().map((biome) -> {
|
||||
return biome.getId();
|
||||
}).collect(Collectors.toList());
|
||||
sceneFile.getRealmDescriptor().setBiomeType(biomes.get(params.biomeType));
|
||||
} break;
|
||||
default: {
|
||||
throw new Error("Unhandled world type!");
|
||||
}
|
||||
}
|
||||
//create save dir
|
||||
SaveUtils.createOrOverwriteSave(saveName, SceneGenerator.createProceduralSceneFile(saveName, seed));
|
||||
SaveUtils.createOrOverwriteSave(saveName, sceneFile);
|
||||
WindowUtils.replaceMainMenuContents(MenuWorldSelect.createWorldSelectMenu());
|
||||
}));
|
||||
|
||||
@ -270,6 +297,8 @@ public class MenuWorldSelect {
|
||||
static class WorldGenUIParams {
|
||||
int worldType = 0;
|
||||
int biomeType = 0;
|
||||
String name = "World name";
|
||||
String seed = System.currentTimeMillis() + "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -12,6 +12,12 @@ public class RealmDescriptor {
|
||||
public static final String REALM_DESCRIPTOR_PROCEDURAL = "procedural";
|
||||
public static final String REALM_DESCRIPTOR_GENERATION_TESTING = "generationTesting";
|
||||
|
||||
/**
|
||||
* Types of procedural world terrain
|
||||
*/
|
||||
public static final String PROCEDURAL_TYPE_DEFAULT = "proceduralTypeDefault";
|
||||
public static final String PROCEDURAL_TYPE_HOMOGENOUS = "proceduralTypeHomogenous";
|
||||
|
||||
/**
|
||||
* The dirt voxel type's id
|
||||
*/
|
||||
@ -32,6 +38,16 @@ public class RealmDescriptor {
|
||||
*/
|
||||
Integer baseVoxel = VOXEL_DIRT_ID;
|
||||
|
||||
/**
|
||||
* The type of world
|
||||
*/
|
||||
String worldType = PROCEDURAL_TYPE_DEFAULT;
|
||||
|
||||
/**
|
||||
* The type of biome for a homogenous world type
|
||||
*/
|
||||
String biomeType = "";
|
||||
|
||||
|
||||
/**
|
||||
* Gets the type of realm
|
||||
@ -81,4 +97,38 @@ public class RealmDescriptor {
|
||||
this.baseVoxel = voxelId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the type of the world
|
||||
* @return The type of the world
|
||||
*/
|
||||
public String getWorldType() {
|
||||
return worldType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the type of the world
|
||||
* @param worldType The type of the world
|
||||
*/
|
||||
public void setWorldType(String worldType) {
|
||||
this.worldType = worldType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the type of biome for a homogenous world
|
||||
* @return The biome
|
||||
*/
|
||||
public String getBiomeType() {
|
||||
return biomeType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the biome type for a homogenous world
|
||||
* @param biomeType The biome type
|
||||
*/
|
||||
public void setBiomeType(String biomeType) {
|
||||
this.biomeType = biomeType;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -24,6 +24,11 @@ public class BiomeTypeMap {
|
||||
*/
|
||||
Map<Integer,BiomeData> indexBiomeMap = new HashMap<Integer,BiomeData>();
|
||||
|
||||
/**
|
||||
* The map of biome data -> index
|
||||
*/
|
||||
Map<BiomeData,Integer> biomeIndexMap = new HashMap<BiomeData,Integer>();
|
||||
|
||||
/**
|
||||
* The list of surface biomes
|
||||
*/
|
||||
@ -57,6 +62,7 @@ public class BiomeTypeMap {
|
||||
this.subterraneanBiomes.add(biome);
|
||||
}
|
||||
indexBiomeMap.put(indexBiomeMap.size(),biome);
|
||||
biomeIndexMap.put(biome,indexBiomeMap.size());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -153,4 +159,13 @@ public class BiomeTypeMap {
|
||||
return indexBiomeMap.get(index);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the index of a given biome
|
||||
* @param biome The biome
|
||||
* @return The index of the biome
|
||||
*/
|
||||
public Integer getIndexOfBiome(BiomeData biome){
|
||||
return biomeIndexMap.get(biome);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -116,7 +116,7 @@ public class SaveUtils {
|
||||
FileUtils.serializeObjectToSavePath(saveName, "./world.json", serverWorldData);
|
||||
//terrain manager
|
||||
ServerTerrainManager serverTerrainManager = new ServerTerrainManager(serverWorldData, sceneFile.getSeed(), new TestGenerationChunkGenerator(serverWorldData, false));
|
||||
serverTerrainManager.generate();
|
||||
serverTerrainManager.generate(sceneFile.getRealmDescriptor());
|
||||
serverTerrainManager.save(saveName);
|
||||
//fluid manager
|
||||
ServerFluidManager serverFluidManager = new ServerFluidManager(serverWorldData, serverTerrainManager, 0, new DefaultFluidGenerator());
|
||||
|
||||
@ -0,0 +1,45 @@
|
||||
package electrosphere.server.terrain.generation.macro;
|
||||
|
||||
import electrosphere.engine.Globals;
|
||||
import electrosphere.game.data.biome.BiomeData;
|
||||
import electrosphere.game.data.biome.BiomeTypeMap;
|
||||
import electrosphere.server.terrain.models.TerrainModel;
|
||||
|
||||
/**
|
||||
* Generates a world that is a single biome
|
||||
*/
|
||||
public class HomogenousMacroGenerator implements MacroGenerator {
|
||||
|
||||
/**
|
||||
* ID of the biome to generate with
|
||||
*/
|
||||
int biomeId = 0;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param biomeId The biome to use when creating the world
|
||||
*/
|
||||
public HomogenousMacroGenerator(String biomeId){
|
||||
BiomeTypeMap biomeTypeMap = Globals.gameConfigCurrent.getBiomeMap();
|
||||
BiomeData biomeData = biomeTypeMap.getType(biomeId);
|
||||
this.biomeId = biomeTypeMap.getIndexOfBiome(biomeData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generate(TerrainModel model) {
|
||||
int DIM = model.getDiscreteArrayDimension();
|
||||
float[][] elevation = model.getElevation();
|
||||
short[][] biome = model.getBiome();
|
||||
|
||||
for(int x = 0; x < DIM; x++){
|
||||
for(int y = 0; y < DIM; y++){
|
||||
elevation[x][y] = 1;
|
||||
biome[x][y] = (short)this.biomeId;
|
||||
}
|
||||
}
|
||||
|
||||
model.setElevationArray(elevation);
|
||||
model.setBiome(biome);
|
||||
}
|
||||
|
||||
}
|
||||
@ -2,11 +2,14 @@ package electrosphere.server.terrain.manager;
|
||||
|
||||
import electrosphere.client.terrain.cache.ChunkData;
|
||||
import electrosphere.engine.Globals;
|
||||
import electrosphere.entity.scene.RealmDescriptor;
|
||||
import electrosphere.game.server.world.ServerWorldData;
|
||||
import electrosphere.server.terrain.diskmap.ChunkDiskMap;
|
||||
import electrosphere.server.terrain.generation.TestGenerationChunkGenerator;
|
||||
import electrosphere.server.terrain.generation.interfaces.ChunkGenerator;
|
||||
import electrosphere.server.terrain.generation.macro.DefaultMacroGenerator;
|
||||
import electrosphere.server.terrain.generation.macro.HomogenousMacroGenerator;
|
||||
import electrosphere.server.terrain.generation.macro.MacroGenerator;
|
||||
import electrosphere.server.terrain.models.TerrainModel;
|
||||
import electrosphere.server.terrain.models.TerrainModification;
|
||||
import electrosphere.util.FileUtils;
|
||||
@ -106,6 +109,21 @@ public class ServerTerrainManager {
|
||||
this.chunkGenerator.setModel(this.model);
|
||||
this.chunkDiskMap = ChunkDiskMap.init();
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a terrain model for the manager
|
||||
* @param realmDescriptor The realm description to draw parameters from while generating
|
||||
*/
|
||||
public void generate(RealmDescriptor realmDescriptor){
|
||||
this.model = TerrainModel.create(this.seed);
|
||||
MacroGenerator generator = new DefaultMacroGenerator();
|
||||
if(realmDescriptor.getWorldType().equals(RealmDescriptor.PROCEDURAL_TYPE_HOMOGENOUS)){
|
||||
generator = new HomogenousMacroGenerator(realmDescriptor.getBiomeType());
|
||||
}
|
||||
generator.generate(this.model);
|
||||
this.chunkGenerator.setModel(this.model);
|
||||
this.chunkDiskMap = ChunkDiskMap.init();
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the terrain model backing this manager to a save file
|
||||
|
||||
Loading…
Reference in New Issue
Block a user