grid alignment visualization work

This commit is contained in:
austin 2025-05-14 20:05:26 -04:00
parent 99dbf13dd1
commit 5e7a5ecf03
4 changed files with 72 additions and 6 deletions

View File

@ -1780,6 +1780,7 @@ Sorting imgui debug windows
Grid alignment cursor Grid alignment cursor
Furniture spawner items triggers grid alignment cursor Furniture spawner items triggers grid alignment cursor
Grid aligned entity work Grid aligned entity work
Grid alignment visualization work

View File

@ -285,6 +285,16 @@ public class MenuGeneratorsInGame {
togglePhysicsObjectsButton.setMarginLeft(BUTTON_MARGIN); togglePhysicsObjectsButton.setMarginLeft(BUTTON_MARGIN);
scrollable.addChild(togglePhysicsObjectsButton); scrollable.addChild(togglePhysicsObjectsButton);
//toggle draw grid alignment data
Button toggleDrawGridAlignmentDataButton = Button.createButton("Toggle draw grid alignment data", new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
// Main.running = false;
Globals.userSettings.setGraphicsDebugDrawGridAlignment(!Globals.userSettings.getGraphicsDebugDrawGridAlignment());
return false;
}});
toggleDrawGridAlignmentDataButton.setMarginTop(BUTTON_MARGIN);
toggleDrawGridAlignmentDataButton.setMarginLeft(BUTTON_MARGIN);
scrollable.addChild(toggleDrawGridAlignmentDataButton);
//label (toggle draw movement vectors) //label (toggle draw movement vectors)
Button toggleMovementVectorsButton = Button.createButton("Toggle draw movement vectors", new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ Button toggleMovementVectorsButton = Button.createButton("Toggle draw movement vectors", new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
// Main.running = false; // Main.running = false;

View File

@ -52,6 +52,7 @@ public class UserSettings {
boolean graphicsDebugDrawPhysicsObjects; boolean graphicsDebugDrawPhysicsObjects;
boolean graphicsDebugDrawMovementVectors; boolean graphicsDebugDrawMovementVectors;
boolean graphicsDebugDrawNavmesh; boolean graphicsDebugDrawNavmesh;
boolean graphicsDebugDrawGridAlignment;
//debug network //debug network
boolean netRunNetMonitor; boolean netRunNetMonitor;
@ -187,12 +188,30 @@ public class UserSettings {
this.graphicsPerformanceEnableFoliageManager = graphicsPerformanceEnableFoliageManager; this.graphicsPerformanceEnableFoliageManager = graphicsPerformanceEnableFoliageManager;
} }
/**
* Checks if should render the grid alignment data
* @return true if should render grid alignment data, false otherwise
*/
public boolean getGraphicsDebugDrawGridAlignment() {
return graphicsDebugDrawGridAlignment;
}
/**
* Sets whether to draw the grid alignment data or not
* @param graphicsDebugDrawGridAlignment true to render the data, false otherwise
*/
public void setGraphicsDebugDrawGridAlignment(boolean graphicsDebugDrawGridAlignment) {
this.graphicsDebugDrawGridAlignment = graphicsDebugDrawGridAlignment;
}
/** /**
* Generates a default settings file * Generates a default settings file

View File

@ -11,12 +11,15 @@ import org.ode4j.ode.DCapsule;
import org.ode4j.ode.DGeom; import org.ode4j.ode.DGeom;
import org.ode4j.ode.DSphere; import org.ode4j.ode.DSphere;
import electrosphere.client.block.BlockChunkData;
import electrosphere.client.entity.camera.CameraEntityUtils; import electrosphere.client.entity.camera.CameraEntityUtils;
import electrosphere.collision.CollisionEngine; import electrosphere.collision.CollisionEngine;
import electrosphere.collision.PhysicsUtils; import electrosphere.collision.PhysicsUtils;
import electrosphere.collision.collidable.Collidable; import electrosphere.collision.collidable.Collidable;
import electrosphere.data.collidable.CollidableTemplate; import electrosphere.data.collidable.CollidableTemplate;
import electrosphere.data.collidable.HitboxData; import electrosphere.data.collidable.HitboxData;
import electrosphere.data.common.CommonEntityType;
import electrosphere.data.grident.GridAlignedData;
import electrosphere.engine.Globals; import electrosphere.engine.Globals;
import electrosphere.engine.assetmanager.AssetDataStrings; import electrosphere.engine.assetmanager.AssetDataStrings;
import electrosphere.entity.Entity; import electrosphere.entity.Entity;
@ -24,6 +27,7 @@ import electrosphere.entity.EntityDataStrings;
import electrosphere.entity.EntityUtils; import electrosphere.entity.EntityUtils;
import electrosphere.entity.state.hitbox.HitboxCollectionState; import electrosphere.entity.state.hitbox.HitboxCollectionState;
import electrosphere.entity.state.hitbox.HitboxCollectionState.HitboxState; import electrosphere.entity.state.hitbox.HitboxCollectionState.HitboxState;
import electrosphere.entity.types.common.CommonEntityUtils;
import electrosphere.renderer.OpenGLState; import electrosphere.renderer.OpenGLState;
import electrosphere.renderer.RenderPipelineState; import electrosphere.renderer.RenderPipelineState;
import electrosphere.renderer.RenderingEngine; import electrosphere.renderer.RenderingEngine;
@ -230,6 +234,38 @@ public class DebugContentPipeline implements RenderPipeline {
} }
} }
//
//Draw grid alignment data
if(Globals.userSettings.getGraphicsDebugDrawGridAlignment()){
Model physicsGraphicsModel = Globals.assetManager.fetchModel(AssetDataStrings.UNITCUBE);
for(Entity entity : Globals.clientSceneWrapper.getScene().getEntityList()){
CommonEntityType data = CommonEntityUtils.getCommonData(entity);
if(data == null){
continue;
}
if(data.getGridAlignedData() != null){
GridAlignedData gridAlignedData = data.getGridAlignedData();
Texture texture = Globals.assetManager.fetchTexture("Textures/transparent_blue.png");
if(texture != null){
texture.bind(openGLState);
}
Vector3d position = EntityUtils.getPosition(entity);
//calculate camera-modified vector3d
Vector3d cameraModifiedPosition = new Vector3d(position).add(0,gridAlignedData.getLength() * BlockChunkData.BLOCK_SIZE_MULTIPLIER / 2.0f,0).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera));
modelTransformMatrix.identity();
modelTransformMatrix.translate(cameraModifiedPosition);
modelTransformMatrix.rotate(EntityUtils.getRotation(entity));
modelTransformMatrix.scale(
gridAlignedData.getWidth() * BlockChunkData.BLOCK_SIZE_MULTIPLIER,
gridAlignedData.getHeight() * BlockChunkData.BLOCK_SIZE_MULTIPLIER,
gridAlignedData.getLength() * BlockChunkData.BLOCK_SIZE_MULTIPLIER
);
physicsGraphicsModel.setModelMatrix(modelTransformMatrix);
physicsGraphicsModel.draw(renderPipelineState,openGLState);
}
}
}
//update pipeline state to use mats again //update pipeline state to use mats again
renderPipelineState.setUseMaterial(true); renderPipelineState.setUseMaterial(true);