generation testing menu with regenerate button
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good

This commit is contained in:
austin 2024-10-29 14:10:10 -04:00
parent 604380b31e
commit 987165649f
6 changed files with 111 additions and 1 deletions

View File

@ -3,7 +3,7 @@
have a heightmap generated by tectonic sim have a heightmap generated by tectonic sim
is interpolated to 2000x2000 is interpolated to 2000x2000
saved as a byte per pixel saved as a byte per pixel
this map is used to determine what type of noise to sample from (ie mountain noise vs ocean noise vs plains noise) ~~~~~this map is used to determine what type of noise to sample from (ie mountain noise vs ocean noise vs plains noise)~~~~~
generate a separate map for biomes that is also 2000x2000 generate a separate map for biomes that is also 2000x2000
this is stored as shorts, where value is the id of the biome this is stored as shorts, where value is the id of the biome
"civilization" gradient map generated with simplex noise (1byte resolution) "civilization" gradient map generated with simplex noise (1byte resolution)

View File

@ -475,6 +475,22 @@ public class DrawCellManager {
updateable.add(getCellKey(chunkX, chunkY, chunkZ)); updateable.add(getCellKey(chunkX, chunkY, chunkZ));
} }
/**
* Evicts all chunks
*/
public void evictAll(){
//destroy models
for(String key : drawable){
keyCellMap.get(key).destroy();
}
keyCellMap.clear();
hasNotRequested.clear();
requested.clear();
drawable.clear();
undrawable.clear();
updateable.clear();
}
/** /**
* Gets the radius within which full-detail models are drawn * Gets the radius within which full-detail models are drawn

View File

@ -0,0 +1,48 @@
package electrosphere.client.ui.menu.debug;
import electrosphere.engine.Globals;
import electrosphere.renderer.ui.imgui.ImGuiWindow;
import electrosphere.renderer.ui.imgui.ImGuiWindow.ImGuiWindowCallback;
import electrosphere.server.datacell.GriddedDataCellManager;
import imgui.ImGui;
/**
* Menu for altering parameters of the test terrain generator
*/
public class ImGuiTestGen {
//window for viewing information about the ai state
protected static ImGuiWindow testGenWindow;
/**
* Creates the windows in this file
*/
protected static void createTestGenWindows(){
createTestGenDebugWindow();
}
/**
* Client scene entity view
*/
protected static void createTestGenDebugWindow(){
testGenWindow = new ImGuiWindow("Test Terrain Generation");
testGenWindow.setCallback(new ImGuiWindowCallback() {
@Override
public void exec() {
//ui framework text
ImGui.text("Test Terrain Generation");
//regenerate the test area
if(ImGui.button("Regenerate")){
GriddedDataCellManager gridManager = (GriddedDataCellManager)Globals.realmManager.first().getDataCellManager();
gridManager.evictAll();
Globals.drawCellManager.evictAll();
}
}
});
testGenWindow.setOpen(false);
Globals.renderingEngine.getImGuiPipeline().addImGuiWindow(testGenWindow);
}
}

View File

@ -11,6 +11,7 @@ import electrosphere.renderer.ui.imgui.ImGuiWindow;
import electrosphere.renderer.ui.imgui.ImGuiLinePlot.ImGuiLinePlotDataset; import electrosphere.renderer.ui.imgui.ImGuiLinePlot.ImGuiLinePlotDataset;
import electrosphere.renderer.ui.imgui.ImGuiWindow.ImGuiWindowCallback; import electrosphere.renderer.ui.imgui.ImGuiWindow.ImGuiWindowCallback;
import electrosphere.server.fluid.manager.ServerFluidManager; import electrosphere.server.fluid.manager.ServerFluidManager;
import electrosphere.server.terrain.generation.TestGenerationChunkGenerator;
import imgui.ImGui; import imgui.ImGui;
/** /**
@ -49,6 +50,7 @@ public class ImGuiWindowMacros {
ImGuiAudio.createAudioDebugMenu(); ImGuiAudio.createAudioDebugMenu();
ImGuiLogger.createLoggersWindows(); ImGuiLogger.createLoggersWindows();
ImGuiRenderer.createRendererWindows(); ImGuiRenderer.createRendererWindows();
ImGuiTestGen.createTestGenWindows();
} }
/** /**
@ -171,6 +173,16 @@ public class ImGuiWindowMacros {
if(ImGui.button("UI")){ if(ImGui.button("UI")){
ImGuiUIFramework.uiFrameworkWindow.setOpen(true); ImGuiUIFramework.uiFrameworkWindow.setOpen(true);
} }
//test gen window (only drawn if realm is a test generation realm)
if(
Globals.realmManager != null &&
Globals.realmManager.first() != null &&
Globals.realmManager.first().getServerWorldData() != null &&
Globals.realmManager.first().getServerWorldData().getServerTerrainManager().getChunkGenerator() instanceof TestGenerationChunkGenerator &&
ImGui.button("Test Terrain Gen")
){
ImGuiTestGen.testGenWindow.setOpen(true);
}
//close button //close button
if(ImGui.button("Close")){ if(ImGui.button("Close")){
mainDebugWindow.setOpen(false); mainDebugWindow.setOpen(false);

View File

@ -315,6 +315,37 @@ public class GriddedDataCellManager implements DataCellManager, VoxelCellManager
} }
} }
/**
* Evicts all loaded chunks.
* <p>
* Note: Does not save to disk.
* </p>
*/
public void evictAll(){
//TODO: improve to make have less performance impact
for(ServerDataCell cell : loadedCells){
loadedCellsLock.acquireUninterruptibly();
int frameCount = cellPlayerlessFrameMap.get(cell) + 1;
cellPlayerlessFrameMap.put(cell,frameCount);
toCleanQueue.add(cell);
loadedCellsLock.release();
}
for(ServerDataCell cell : toCleanQueue){
parent.deregisterCell(cell);
loadedCells.remove(cell);
Vector3i worldPos = getCellWorldPosition(cell);
String key = getServerDataCellKey(worldPos);
groundDataCells.remove(key);
//offload all entities in cell to chunk file
serverContentManager.saveContentToDisk(key, cell.getScene().getEntityList());
//clear all entities in cell
for(Entity entity : cell.getScene().getEntityList()){
ClientEntityUtils.destroyEntity(entity);
}
}
toCleanQueue.clear();
}
/** /**
* Get data cell at a given real point in this realm * Get data cell at a given real point in this realm
* @param point The real point * @param point The real point

View File

@ -199,6 +199,9 @@ public class RealmManager {
* @return The first realm in the manager * @return The first realm in the manager
*/ */
public Realm first(){ public Realm first(){
if(realms.size() == 0){
return null;
}
return realms.iterator().next(); return realms.iterator().next();
} }