From 3e89dd9224dfcc7125151042ac478a2d74695582 Mon Sep 17 00:00:00 2001 From: austin Date: Wed, 28 May 2025 16:29:33 -0400 Subject: [PATCH] server LOD emitter fix --- docs/src/progress/renderertodo.md | 3 ++- .../electrosphere/entity/state/lod/ServerLODComponent.java | 4 ++-- .../renderer/pipelines/debug/DebugContentPipeline.java | 3 ++- .../java/electrosphere/server/service/LODEmitterService.java | 4 ++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 7980b7a2..bd04c00c 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -2026,8 +2026,9 @@ Fix macro structure rotation generation Improvement to building placement math in TownLayout Scaffold character job data Moving data packages around -Fix client LOD tree re-enabling physics positioning +Fix client LOD component re-enabling physics positioning Debug rendering of server physics objects +Server LOD component properly attaches physics bodies when the entity comes in range diff --git a/src/main/java/electrosphere/entity/state/lod/ServerLODComponent.java b/src/main/java/electrosphere/entity/state/lod/ServerLODComponent.java index 94997dd7..2224453d 100644 --- a/src/main/java/electrosphere/entity/state/lod/ServerLODComponent.java +++ b/src/main/java/electrosphere/entity/state/lod/ServerLODComponent.java @@ -58,7 +58,7 @@ public class ServerLODComponent implements BehaviorTree { Vector3d parentLoc = EntityUtils.getPosition(this.parent); boolean fullRes = Globals.serverState.lodEmitterService.isFullLod(parentLoc); if(fullRes){ - if(lodLevel != FULL_RES){ + if(this.lodLevel != FULL_RES){ //make full res this.setLodLevel(FULL_RES); Realm realm = Globals.serverState.realmManager.getEntityRealm(this.parent); @@ -68,7 +68,7 @@ public class ServerLODComponent implements BehaviorTree { } } } else { - if(lodLevel != LOW_RES){ + if(this.lodLevel != LOW_RES){ //make low res this.setLodLevel(LOW_RES); Realm realm = Globals.serverState.realmManager.getEntityRealm(this.parent); diff --git a/src/main/java/electrosphere/renderer/pipelines/debug/DebugContentPipeline.java b/src/main/java/electrosphere/renderer/pipelines/debug/DebugContentPipeline.java index f5750825..79510923 100644 --- a/src/main/java/electrosphere/renderer/pipelines/debug/DebugContentPipeline.java +++ b/src/main/java/electrosphere/renderer/pipelines/debug/DebugContentPipeline.java @@ -116,7 +116,8 @@ 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()){ + LinkedList collidables = new LinkedList(engine.getCollidables()); + for(Collidable collidable : collidables){ Entity physicsEntity = collidable.getParent(); if(physicsEntity.getData(EntityDataStrings.PHYSICS_MODEL_TEMPLATE) != null){ CollidableTemplate template = (CollidableTemplate)physicsEntity.getData(EntityDataStrings.PHYSICS_MODEL_TEMPLATE); diff --git a/src/main/java/electrosphere/server/service/LODEmitterService.java b/src/main/java/electrosphere/server/service/LODEmitterService.java index a931bf10..5b7b6093 100644 --- a/src/main/java/electrosphere/server/service/LODEmitterService.java +++ b/src/main/java/electrosphere/server/service/LODEmitterService.java @@ -98,13 +98,13 @@ public class LODEmitterService extends SignalServiceImpl { for(Entity emitter : this.getEmitters()){ Vector3d emitterLoc = EntityUtils.getPosition(emitter); double dist = position.distance(emitterLoc); - if(dist < ServerLODComponent.FULL_RES){ + if(dist < ServerLODComponent.LOD_RADIUS){ return true; } } for(Vector3d tempVec : this.tempVecs){ double dist = position.distance(tempVec); - if(dist < ServerLODComponent.FULL_RES){ + if(dist < ServerLODComponent.LOD_RADIUS){ return true; } }