render pathing nodes
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit

This commit is contained in:
austin 2025-05-30 14:03:35 -04:00
parent 4b1efb2bcf
commit 5c82c0fc93
7 changed files with 76 additions and 6 deletions

Binary file not shown.

View File

@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
#Wed May 28 21:00:17 EDT 2025
buildNumber=643
#Fri May 30 13:38:53 EDT 2025
buildNumber=644

View File

@ -2075,6 +2075,7 @@ Sprinting/physics work
Reorganizing macro classes
Start work on macro pathfinding storage
Town constructs nav graph of road nodes
Render pathing nodes (still needs some work)

View File

@ -103,4 +103,9 @@ public class AssetDataStrings {
public static final String INTERACT_SFX_BLOCK_PICKUP = "Audio/interact/Grab Cloth High A.wav";
public static final String INTERACT_SFX_BLOCK_PLACE = "Audio/interact/High Five A.wav";
/**
* Debug geometry of the engine
*/
public static final String MODEL_WAYPOINT = "Models/engine/waypoint.glb";
}

View File

@ -125,4 +125,21 @@ public class DrawableUtils {
Globals.clientState.clientScene.registerEntityToTag(entity, EntityTags.DRAW_CAST_SHADOW);
}
/**
* Makes an entity drawable with a model at a given path
* @param entity The entity
* @param path The path to the model
*/
public static void makeEntityDrawable(Entity entity, String path){
entity.putData(EntityDataStrings.DATA_STRING_ACTOR, ActorUtils.createActorFromModelPath(path));
entity.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3d(0,0,0));
entity.putData(EntityDataStrings.DATA_STRING_ROTATION, new Quaterniond().identity());
entity.putData(EntityDataStrings.DATA_STRING_SCALE, new Vector3f(1,1,1));
entity.putData(EntityDataStrings.DATA_STRING_DRAW, true);
entity.putData(EntityDataStrings.DRAW_SOLID_PASS, true);
Globals.clientState.clientScene.registerEntityToTag(entity, EntityTags.DRAWABLE);
Globals.clientState.clientScene.registerEntityToTag(entity, EntityTags.DRAW_VOLUMETIC_SOLIDS_PASS);
Globals.clientState.clientScene.registerEntityToTag(entity, EntityTags.DRAW_CAST_SHADOW);
}
}

View File

@ -7,7 +7,7 @@ import org.joml.AABBd;
import org.joml.Matrix4d;
import org.joml.Quaterniond;
import org.joml.Vector3d;
import org.lwjgl.opengl.GL40;
import org.lwjgl.opengl.GL45;
import org.ode4j.ode.DAABBC;
import org.ode4j.ode.DCapsule;
import org.ode4j.ode.DGeom;
@ -51,6 +51,7 @@ import electrosphere.server.datacell.utils.EntityLookupUtils;
import electrosphere.server.macro.MacroData;
import electrosphere.server.macro.civilization.road.Road;
import electrosphere.server.macro.region.MacroRegion;
import electrosphere.server.macro.spatial.path.MacroPathNode;
import electrosphere.server.macro.structure.VirtualStructure;
import electrosphere.util.math.SpatialMathUtils;
import electrosphere.util.math.region.RegionPrism;
@ -68,6 +69,11 @@ public class DebugContentPipeline implements RenderPipeline {
*/
private List<Entity> farmPlotEntities = new LinkedList<Entity>();
/**
* Renderables for macro nav graph entities
*/
private List<Entity> macroNavEntities = new LinkedList<Entity>();
@Override
public void render(OpenGLState openGLState, RenderPipelineState renderPipelineState) {
Globals.profiler.beginCpuSample("DebugContentPipeline.render");
@ -75,8 +81,8 @@ public class DebugContentPipeline implements RenderPipeline {
//bind screen fbo
RenderingEngine.screenFramebuffer.bind(openGLState);
openGLState.glDepthTest(true);
openGLState.glDepthFunc(GL40.GL_LESS);
GL40.glDepthMask(true);
openGLState.glDepthFunc(GL45.GL_LESS);
GL45.glDepthMask(true);
openGLState.glViewport(Globals.gameConfigCurrent.getSettings().getRenderResolutionX(), Globals.gameConfigCurrent.getSettings().getRenderResolutionY());
///
@ -242,6 +248,41 @@ public class DebugContentPipeline implements RenderPipeline {
}
}
}
if(this.macroNavEntities.isEmpty()){
MacroData macroData = Globals.serverState.realmManager.first().getMacroData();
List<MacroPathNode> pathNodes = macroData.getPathCache().getNodes();
if(pathNodes.size() > 0){
for(MacroPathNode pathNode : pathNodes){
Entity pathDebugEnt = EntityCreationUtils.createClientSpatialEntity();
DrawableUtils.makeEntityDrawable(pathDebugEnt, AssetDataStrings.MODEL_WAYPOINT);
EntityUtils.getPosition(pathDebugEnt).set(pathNode.getPosition());
EntityUtils.getScale(pathDebugEnt).set(1);
this.macroNavEntities.add(pathDebugEnt);
//draw paths between nodes
List<MacroPathNode> neighbors = pathNode.getNeighborNodes(macroData.getPathCache());
for(MacroPathNode neighbor : neighbors){
if(neighbor.getId() < pathNode.getId()){
}
}
}
}
} else {
//render connections between points
MacroData macroData = Globals.serverState.realmManager.first().getMacroData();
List<MacroPathNode> pathNodes = macroData.getPathCache().getNodes();
if(pathNodes.size() > 0){
for(MacroPathNode pathNode : pathNodes){
//draw paths between nodes
List<MacroPathNode> neighbors = pathNode.getNeighborNodes(macroData.getPathCache());
for(MacroPathNode neighbor : neighbors){
if(neighbor.getId() < pathNode.getId()){
DebugContentPipeline.renderTube(openGLState, renderPipelineState, modelTransformMatrix, pathNode.getPosition(), neighbor.getPosition(), 1, AssetDataStrings.TEXTURE_YELLOW_TRANSPARENT);
}
}
}
}
}
} else {
if(!this.farmPlotEntities.isEmpty()){
for(Entity entity : this.farmPlotEntities){
@ -249,6 +290,12 @@ public class DebugContentPipeline implements RenderPipeline {
}
this.farmPlotEntities.clear();
}
if(!this.macroNavEntities.isEmpty()){
for(Entity entity : this.macroNavEntities){
ClientEntityUtils.destroyEntity(entity);
}
this.macroNavEntities.clear();
}
}
//

View File

@ -199,7 +199,7 @@ public class MacroPathNode {
* @return The list of node ids
*/
public List<MacroPathNode> getNeighborNodes(MacroPathCache cache) {
return this.neighborNodes.stream().map((Long id) -> cache.getNodeById(objectId)).collect(Collectors.toList());
return this.neighborNodes.stream().map((Long neighborId) -> cache.getNodeById(neighborId)).collect(Collectors.toList());
}
/**