diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index ae5f188f..c1ad80d4 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -2026,6 +2026,7 @@ 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 diff --git a/src/main/java/electrosphere/entity/ClientEntityUtils.java b/src/main/java/electrosphere/entity/ClientEntityUtils.java index 62fe1c4c..87521d8b 100644 --- a/src/main/java/electrosphere/entity/ClientEntityUtils.java +++ b/src/main/java/electrosphere/entity/ClientEntityUtils.java @@ -32,6 +32,16 @@ public class ClientEntityUtils { CollisionObjUtils.clientPositionCharacter(entity, position, rotation); } + /** + * Called when the creature is first spawned to serialize to all people in its initial chunk + * @param entity + * @param position + */ + public static void reositionEntity(Entity entity, Vector3d position, Quaterniond rotation){ + //reposition entity + CollisionObjUtils.clientPositionCharacter(entity, position, rotation); + } + /** * Destroys an entity on the client * @param entity the entity to destroy diff --git a/src/main/java/electrosphere/entity/state/lod/ClientLODComponent.java b/src/main/java/electrosphere/entity/state/lod/ClientLODComponent.java index ca6d935f..93cf2d00 100644 --- a/src/main/java/electrosphere/entity/state/lod/ClientLODComponent.java +++ b/src/main/java/electrosphere/entity/state/lod/ClientLODComponent.java @@ -8,6 +8,7 @@ import electrosphere.data.entity.common.CommonEntityType; import electrosphere.engine.Globals; import electrosphere.entity.EntityDataStrings; import electrosphere.entity.EntityUtils; +import electrosphere.entity.ClientEntityUtils; import electrosphere.entity.Entity; import electrosphere.net.synchronization.enums.BehaviorTreeIdEnums; import electrosphere.entity.btree.BehaviorTree; @@ -49,6 +50,7 @@ public class ClientLODComponent implements BehaviorTree { ){ CollidableTemplate physicsTemplate = commonData.getCollidable(); PhysicsEntityUtils.clientAttachCollidableTemplate(this.parent, physicsTemplate); + ClientEntityUtils.reositionEntity(parent, EntityUtils.getPosition(parent), EntityUtils.getRotation(parent)); } } if(cachedLodLevel != lodLevel){ @@ -57,6 +59,7 @@ public class ClientLODComponent implements BehaviorTree { CommonEntityType type = CommonEntityUtils.getCommonData(this.parent); if(type.getCollidable() != null && PhysicsEntityUtils.getCollidable(this.parent) == null){ PhysicsEntityUtils.clientAttachCollidableTemplate(parent, type.getCollidable()); + ClientEntityUtils.reositionEntity(parent, EntityUtils.getPosition(parent), EntityUtils.getRotation(parent)); } } else if(cachedLodLevel == ServerLODComponent.LOW_RES){ if(PhysicsEntityUtils.containsDBody(this.parent)){