navmesh bugfix
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit

This commit is contained in:
austin 2025-04-24 19:03:43 -04:00
parent 6c06391245
commit ccb532f4f7
4 changed files with 64 additions and 30 deletions

View File

@ -1517,6 +1517,10 @@ GriddedDataCellManager pathfinding solution
ServerTerrainManager nullcheck fix ServerTerrainManager nullcheck fix
Fix nav mesh construction params Fix nav mesh construction params
(04/24/2025)
GriddedDataCellManager debugging tools
NavMesh bugfix

View File

@ -1,6 +1,8 @@
package electrosphere.client.ui.menu.debug; package electrosphere.client.ui.menu.debug;
import electrosphere.engine.Globals; import electrosphere.engine.Globals;
import electrosphere.entity.Entity;
import electrosphere.entity.EntityUtils;
import electrosphere.renderer.ui.imgui.ImGuiWindow; import electrosphere.renderer.ui.imgui.ImGuiWindow;
import electrosphere.renderer.ui.imgui.ImGuiWindow.ImGuiWindowCallback; import electrosphere.renderer.ui.imgui.ImGuiWindow.ImGuiWindowCallback;
import electrosphere.server.datacell.Realm; import electrosphere.server.datacell.Realm;
@ -46,6 +48,12 @@ public class ImGuiGriddedManager {
ImGui.text("Playerless tracking map size: " + manager.getCellPlayerlessFrameMap().keySet().size()); ImGui.text("Playerless tracking map size: " + manager.getCellPlayerlessFrameMap().keySet().size());
} }
ImGui.text("Cells cleaned last frame: " + manager.getNumCleaned()); ImGui.text("Cells cleaned last frame: " + manager.getNumCleaned());
if(ImGui.button("Player Data Cell Info")){
Entity playerEntity = Globals.playerManager.getFirstPlayer().getPlayerEntity();
Realm realm = Globals.realmManager.getEntityRealm(playerEntity);
GriddedDataCellManager griddedDataCellManager = (GriddedDataCellManager)realm.getDataCellManager();
griddedDataCellManager.printCellInfo(griddedDataCellManager.getDataCellAtPoint(EntityUtils.getPosition(playerEntity)));
}
} }
} }

View File

@ -763,6 +763,7 @@ public class GriddedDataCellManager implements DataCellManager, VoxelCellManager
GriddedDataCellTrackingData trackingData = cellTrackingMap.get(dataCell); GriddedDataCellTrackingData trackingData = cellTrackingMap.get(dataCell);
generationService.submit(() -> { generationService.submit(() -> {
try {
BlockChunkData blockChunkData = realm.getServerWorldData().getServerBlockManager().getChunk(worldPos.x, worldPos.y, worldPos.z); BlockChunkData blockChunkData = realm.getServerWorldData().getServerBlockManager().getChunk(worldPos.x, worldPos.y, worldPos.z);
ServerTerrainChunk terrainChunk = realm.getServerWorldData().getServerTerrainManager().getChunk(worldPos.x, worldPos.y, worldPos.z); ServerTerrainChunk terrainChunk = realm.getServerWorldData().getServerTerrainManager().getChunk(worldPos.x, worldPos.y, worldPos.z);
targetCell.setTerrainChunk(terrainChunk); targetCell.setTerrainChunk(terrainChunk);
@ -786,6 +787,11 @@ public class GriddedDataCellManager implements DataCellManager, VoxelCellManager
//set ready //set ready
dataCell.setReady(true); dataCell.setReady(true);
} catch(Exception ex){
LoggerInterface.loggerEngine.ERROR(ex);
} catch (Error ex){
LoggerInterface.loggerEngine.ERROR(ex);
}
}); });
} }
@ -1078,4 +1084,20 @@ public class GriddedDataCellManager implements DataCellManager, VoxelCellManager
throw new UnsupportedOperationException("Unimplemented method 'findPath'"); throw new UnsupportedOperationException("Unimplemented method 'findPath'");
} }
/**
* Prints information about the provided server data cell
* @param serverDataCell The cell
*/
public void printCellInfo(ServerDataCell serverDataCell){
LoggerInterface.loggerEngine.WARNING("Number of players: " + serverDataCell.getPlayers().size());
GriddedDataCellTrackingData trackingData = this.cellTrackingMap.get(serverDataCell);
if(trackingData == null){
LoggerInterface.loggerEngine.WARNING("No tracking data for this cell in the gridded data cell manager");
} else {
LoggerInterface.loggerEngine.WARNING("Closest player distance: " + trackingData.getClosestPlayer());
}
LoggerInterface.loggerEngine.WARNING("Should simulate: " + this.shouldSimulate(serverDataCell));
LoggerInterface.loggerEngine.WARNING("Cell is ready: " + serverDataCell.isReady());
}
} }

View File

@ -105,10 +105,6 @@ public class NavMeshConstructor {
polyMesh.flags[i] = 1; polyMesh.flags[i] = 1;
} }
PolyMeshDetail polyMeshDetail = recastBuilderResult.getMeshDetail();
if(polyMeshDetail == null){
throw new Error("Poly mesh detail is null");
}
//set params //set params
NavMeshDataCreateParams params = new NavMeshDataCreateParams(); NavMeshDataCreateParams params = new NavMeshDataCreateParams();
@ -119,11 +115,6 @@ public class NavMeshConstructor {
params.polyFlags = polyMesh.flags; params.polyFlags = polyMesh.flags;
params.polyCount = polyMesh.npolys; params.polyCount = polyMesh.npolys;
params.nvp = polyMesh.nvp; params.nvp = polyMesh.nvp;
params.detailMeshes = polyMeshDetail.meshes;
params.detailVerts = polyMeshDetail.verts;
params.detailVertsCount = polyMeshDetail.nverts;
params.detailTris = polyMeshDetail.tris;
params.detailTriCount = polyMeshDetail.ntris;
params.walkableHeight = RECAST_AGENT_HEIGHT; params.walkableHeight = RECAST_AGENT_HEIGHT;
params.walkableRadius = RECAST_AGENT_SIZE; params.walkableRadius = RECAST_AGENT_SIZE;
params.walkableClimb = RECAST_AGENT_MAX_CLIMB; params.walkableClimb = RECAST_AGENT_MAX_CLIMB;
@ -133,6 +124,15 @@ public class NavMeshConstructor {
params.ch = RECAST_CELL_HEIGHT; params.ch = RECAST_CELL_HEIGHT;
params.buildBvTree = true; params.buildBvTree = true;
PolyMeshDetail polyMeshDetail = recastBuilderResult.getMeshDetail();
if(polyMeshDetail != null){
params.detailMeshes = polyMeshDetail.meshes;
params.detailVerts = polyMeshDetail.verts;
params.detailVertsCount = polyMeshDetail.nverts;
params.detailTris = polyMeshDetail.tris;
params.detailTriCount = polyMeshDetail.ntris;
}
// params.offMeshConVerts = new float[6]; // params.offMeshConVerts = new float[6];
// params.offMeshConVerts[0] = 0.1f; // params.offMeshConVerts[0] = 0.1f;
// params.offMeshConVerts[1] = 0.2f; // params.offMeshConVerts[1] = 0.2f;