From 9309263036665f604497b79236f3af57e8415067 Mon Sep 17 00:00:00 2001 From: austin Date: Wed, 28 May 2025 16:19:52 -0400 Subject: [PATCH] debug rendering of server physics objects --- docs/src/progress/renderertodo.md | 1 + .../ui/menu/debug/render/ImGuiRenderer.java | 7 ++++-- .../ui/menu/ingame/MenuGeneratorsInGame.java | 20 ++++++++++++----- .../data/settings/UserSettings.java | 22 ++++++++++++++----- .../pipelines/debug/DebugContentPipeline.java | 15 ++++++++++++- 5 files changed, 51 insertions(+), 14 deletions(-) diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index c1ad80d4..7980b7a2 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -2027,6 +2027,7 @@ Improvement to building placement math in TownLayout Scaffold character job data Moving data packages around Fix client LOD tree re-enabling physics positioning +Debug rendering of server physics objects diff --git a/src/main/java/electrosphere/client/ui/menu/debug/render/ImGuiRenderer.java b/src/main/java/electrosphere/client/ui/menu/debug/render/ImGuiRenderer.java index 7109dd76..503ad1fe 100644 --- a/src/main/java/electrosphere/client/ui/menu/debug/render/ImGuiRenderer.java +++ b/src/main/java/electrosphere/client/ui/menu/debug/render/ImGuiRenderer.java @@ -50,8 +50,11 @@ public class ImGuiRenderer { if(ImGui.button("Draw Server Hitboxes")){ Globals.gameConfigCurrent.getSettings().setGraphicsDebugDrawCollisionSpheresServer(!Globals.gameConfigCurrent.getSettings().getGraphicsDebugDrawCollisionSpheresServer()); } - if(ImGui.button("Draw Physics Objects")){ - Globals.gameConfigCurrent.getSettings().setGraphicsDebugDrawPhysicsObjects(!Globals.gameConfigCurrent.getSettings().graphicsDebugDrawPhysicsObjects()); + if(ImGui.button("Draw Physics Objects (client)")){ + Globals.gameConfigCurrent.getSettings().setGraphicsDebugDrawPhysicsObjectsClient(!Globals.gameConfigCurrent.getSettings().graphicsDebugDrawPhysicsObjectsClient()); + } + if(ImGui.button("Draw Physics Objects (server)")){ + Globals.gameConfigCurrent.getSettings().setGraphicsDebugDrawPhysicsObjectsServer(!Globals.gameConfigCurrent.getSettings().graphicsDebugDrawPhysicsObjectsServer()); } if(ImGui.button("Draw Grid Alignment Data")){ Globals.gameConfigCurrent.getSettings().setGraphicsDebugDrawGridAlignment(!Globals.gameConfigCurrent.getSettings().getGraphicsDebugDrawGridAlignment()); diff --git a/src/main/java/electrosphere/client/ui/menu/ingame/MenuGeneratorsInGame.java b/src/main/java/electrosphere/client/ui/menu/ingame/MenuGeneratorsInGame.java index cbf4e880..9b8458c1 100644 --- a/src/main/java/electrosphere/client/ui/menu/ingame/MenuGeneratorsInGame.java +++ b/src/main/java/electrosphere/client/ui/menu/ingame/MenuGeneratorsInGame.java @@ -277,14 +277,24 @@ public class MenuGeneratorsInGame { scrollable.addChild(toggleServerCollisionSpheresButton); //label (toggle draw physics objects) - Button togglePhysicsObjectsButton = Button.createButton("Toggle draw physics objects", new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ + Button togglePhysicsObjectsClientButton = Button.createButton("Toggle draw physics objects (client)", new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ // Main.running = false; - Globals.gameConfigCurrent.getSettings().setGraphicsDebugDrawPhysicsObjects(!Globals.gameConfigCurrent.getSettings().graphicsDebugDrawPhysicsObjects()); + Globals.gameConfigCurrent.getSettings().setGraphicsDebugDrawPhysicsObjectsClient(!Globals.gameConfigCurrent.getSettings().graphicsDebugDrawPhysicsObjectsClient()); return false; }}); - togglePhysicsObjectsButton.setMarginTop(BUTTON_MARGIN); - togglePhysicsObjectsButton.setMarginLeft(BUTTON_MARGIN); - scrollable.addChild(togglePhysicsObjectsButton); + togglePhysicsObjectsClientButton.setMarginTop(BUTTON_MARGIN); + togglePhysicsObjectsClientButton.setMarginLeft(BUTTON_MARGIN); + scrollable.addChild(togglePhysicsObjectsClientButton); + + //label (toggle draw physics objects) + Button togglePhysicsObjectsServerButton = Button.createButton("Toggle draw physics objects (server)", new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ + // Main.running = false; + Globals.gameConfigCurrent.getSettings().setGraphicsDebugDrawPhysicsObjectsServer(!Globals.gameConfigCurrent.getSettings().graphicsDebugDrawPhysicsObjectsServer()); + return false; + }}); + togglePhysicsObjectsServerButton.setMarginTop(BUTTON_MARGIN); + togglePhysicsObjectsServerButton.setMarginLeft(BUTTON_MARGIN); + scrollable.addChild(togglePhysicsObjectsServerButton); //toggle draw grid alignment data Button toggleDrawGridAlignmentDataButton = Button.createButton("Toggle draw grid alignment data", new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ diff --git a/src/main/java/electrosphere/data/settings/UserSettings.java b/src/main/java/electrosphere/data/settings/UserSettings.java index 9f025b5b..28a2367c 100644 --- a/src/main/java/electrosphere/data/settings/UserSettings.java +++ b/src/main/java/electrosphere/data/settings/UserSettings.java @@ -48,7 +48,8 @@ public class UserSettings { //debug visuals boolean graphicsDebugDrawCollisionSpheresClient; boolean graphicsDebugDrawCollisionSpheresServer; - boolean graphicsDebugDrawPhysicsObjects; + boolean graphicsDebugDrawPhysicsObjectsClient; + boolean graphicsDebugDrawPhysicsObjectsServer; boolean graphicsDebugDrawMovementVectors; boolean graphicsDebugDrawNavmesh; boolean graphicsDebugDrawGridAlignment; @@ -101,8 +102,12 @@ public class UserSettings { return graphicsDebugDrawCollisionSpheresServer; } - public boolean graphicsDebugDrawPhysicsObjects() { - return graphicsDebugDrawPhysicsObjects; + public boolean graphicsDebugDrawPhysicsObjectsClient() { + return graphicsDebugDrawPhysicsObjectsClient; + } + + public boolean graphicsDebugDrawPhysicsObjectsServer() { + return graphicsDebugDrawPhysicsObjectsServer; } public boolean graphicsDebugDrawMovementVectors() { @@ -154,8 +159,12 @@ public class UserSettings { this.graphicsDebugDrawCollisionSpheresServer = draw; } - public void setGraphicsDebugDrawPhysicsObjects(boolean draw){ - this.graphicsDebugDrawPhysicsObjects = draw; + public void setGraphicsDebugDrawPhysicsObjectsClient(boolean draw){ + this.graphicsDebugDrawPhysicsObjectsClient = draw; + } + + public void setGraphicsDebugDrawPhysicsObjectsServer(boolean draw){ + this.graphicsDebugDrawPhysicsObjectsServer = draw; } public void setGraphicsDebugDrawMovementVectors(boolean draw){ @@ -282,7 +291,8 @@ public class UserSettings { rVal.graphicsDebugDrawCollisionSpheresClient = false; rVal.graphicsDebugDrawCollisionSpheresServer = false; rVal.graphicsDebugDrawMovementVectors = false; - rVal.graphicsDebugDrawPhysicsObjects = false; + rVal.graphicsDebugDrawPhysicsObjectsClient = false; + rVal.graphicsDebugDrawPhysicsObjectsServer = false; rVal.graphicsDebugDrawNavmesh = false; rVal.graphicsPerformanceLODChunkRadius = 5; rVal.graphicsFOV = 90.0f; diff --git a/src/main/java/electrosphere/renderer/pipelines/debug/DebugContentPipeline.java b/src/main/java/electrosphere/renderer/pipelines/debug/DebugContentPipeline.java index d03cf353..f5750825 100644 --- a/src/main/java/electrosphere/renderer/pipelines/debug/DebugContentPipeline.java +++ b/src/main/java/electrosphere/renderer/pipelines/debug/DebugContentPipeline.java @@ -101,7 +101,8 @@ public class DebugContentPipeline implements RenderPipeline { } } - if(Globals.gameConfigCurrent.getSettings().graphicsDebugDrawPhysicsObjects()){ + //render client physics objects + if(Globals.gameConfigCurrent.getSettings().graphicsDebugDrawPhysicsObjectsClient()){ CollisionEngine engine = Globals.clientState.clientSceneWrapper.getCollisionEngine(); for(Collidable collidable : engine.getCollidables()){ Entity physicsEntity = collidable.getParent(); @@ -112,6 +113,18 @@ public class DebugContentPipeline implements RenderPipeline { } } + //render server physics objects + if(Globals.gameConfigCurrent.getSettings().graphicsDebugDrawPhysicsObjectsServer()){ + CollisionEngine engine = Globals.serverState.realmManager.first().getCollisionEngine(); + for(Collidable collidable : engine.getCollidables()){ + Entity physicsEntity = collidable.getParent(); + if(physicsEntity.getData(EntityDataStrings.PHYSICS_MODEL_TEMPLATE) != null){ + CollidableTemplate template = (CollidableTemplate)physicsEntity.getData(EntityDataStrings.PHYSICS_MODEL_TEMPLATE); + DebugContentPipeline.renderCollidable(openGLState, renderPipelineState, modelTransformMatrix, physicsEntity, template); + } + } + } + //render interaction engine collidables if(Globals.gameConfigCurrent.getSettings().getGraphicsDebugDrawInteractionCollidables()){ CollisionEngine engine = Globals.clientState.clientSceneWrapper.getInteractionEngine();