From 236eb59274d2417a1391be96108315337ad76cc6 Mon Sep 17 00:00:00 2001 From: austin Date: Sun, 8 Aug 2021 01:14:41 -0400 Subject: [PATCH] Convert entity position to double from float --- .../electrosphere/engine/LoadingThread.java | 2 +- .../entity/CameraEntityUtils.java | 20 +++++++ .../entity/EntityDataStrings.java | 2 + .../electrosphere/entity/EntityManager.java | 5 +- .../electrosphere/entity/EntityUtils.java | 11 ++-- .../entity/state/AttackTree.java | 39 ++++++------- .../entity/state/GravityTree.java | 15 ++--- .../entity/state/ParticleTree.java | 3 +- .../entity/state/movement/MovementTree.java | 57 ++++++++++--------- .../entity/types/attach/AttachUtils.java | 9 ++- .../types/collision/CollisionObjUtils.java | 7 ++- .../entity/types/creature/CreatureUtils.java | 5 +- .../entity/types/hitbox/HitboxUtils.java | 13 +++-- .../entity/types/item/ItemUtils.java | 5 +- .../entity/types/particle/ParticleUtils.java | 3 +- .../types/structure/StructureUtils.java | 5 +- .../game/client/cells/DrawCellManager.java | 5 +- .../terrain/manager/ClientTerrainManager.java | 10 ++-- .../game/client/world/ClientWorldData.java | 2 +- .../game/collision/CollisionEngine.java | 25 ++++---- .../game/collision/CommonWorldData.java | 5 +- .../game/collision/PhysicsUtils.java | 5 +- .../server/ai/creature/MindlessAttacker.java | 25 ++++---- .../structure/virtual/StructurePlacer.java | 10 ++-- .../terrain/manager/ServerTerrainManager.java | 8 +-- .../game/server/world/ServerWorldData.java | 4 +- .../world/datacell/DataCellManager.java | 3 +- .../world/datacell/EnvironmentGenerator.java | 6 +- src/main/java/electrosphere/main/Main.java | 30 ++++++++-- .../renderer/Light/LightEntityUtils.java | 5 +- .../renderer/RenderingEngine.java | 51 +++++++++++------ .../renderer/light/LightEntityUtils.java | 5 +- 32 files changed, 242 insertions(+), 158 deletions(-) diff --git a/src/main/java/electrosphere/engine/LoadingThread.java b/src/main/java/electrosphere/engine/LoadingThread.java index 68dea5bf..ea27f925 100644 --- a/src/main/java/electrosphere/engine/LoadingThread.java +++ b/src/main/java/electrosphere/engine/LoadingThread.java @@ -346,7 +346,7 @@ public class LoadingThread extends Thread { Vector2i townLoc = Town.findValidTownLocation(); if(townLoc != null){ int chunkSize = Globals.serverTerrainManager.getChunkWidth(); - Globals.spawnPoint = new Vector3f(townLoc.x * chunkSize, Globals.serverTerrainManager.getHeightAtPosition(townLoc.x * chunkSize,townLoc.y * chunkSize), townLoc.y * chunkSize); + Globals.spawnPoint = new Vector3f(townLoc.x * chunkSize, (float)Globals.serverTerrainManager.getHeightAtPosition(townLoc.x * chunkSize,townLoc.y * chunkSize), townLoc.y * chunkSize); // System.out.println("Setting spawn point @ " + Globals.spawnPoint); Town.createTown(townLoc.x,townLoc.y); } diff --git a/src/main/java/electrosphere/entity/CameraEntityUtils.java b/src/main/java/electrosphere/entity/CameraEntityUtils.java index 3ac290d2..b5036e09 100644 --- a/src/main/java/electrosphere/entity/CameraEntityUtils.java +++ b/src/main/java/electrosphere/entity/CameraEntityUtils.java @@ -18,6 +18,8 @@ public class CameraEntityUtils { rVal.putData(EntityDataStrings.DATA_STRING_CAMERA_TYPE, EntityDataStrings.DATA_STRING_CAMERA_TYPE_BASIC); rVal.putData(EntityDataStrings.DATA_STRING_CAMERA_CENTER, center); rVal.putData(EntityDataStrings .DATA_STRING_CAMERA_EYE, eye); + rVal.putData(EntityDataStrings.CAMERA_PITCH, 0.0f); + rVal.putData(EntityDataStrings.CAMERA_YAW, 0.0f); return rVal; } @@ -27,6 +29,8 @@ public class CameraEntityUtils { rVal.putData(EntityDataStrings.DATA_STRING_CAMERA_TYPE, EntityDataStrings.DATA_STRING_CAMERA_TYPE_ORBIT); rVal.putData(EntityDataStrings.DATA_STRING_CAMERA_CENTER, center); rVal.putData(EntityDataStrings .DATA_STRING_CAMERA_EYE, eye); + rVal.putData(EntityDataStrings.CAMERA_PITCH, 0.0f); + rVal.putData(EntityDataStrings.CAMERA_YAW, 0.0f); return rVal; } @@ -54,6 +58,22 @@ public class CameraEntityUtils { return (Vector3f)camera.getData(EntityDataStrings.DATA_STRING_CAMERA_EYE); } + public static void setCameraPitch(Entity camera, float pitch){ + camera.putData(EntityDataStrings.CAMERA_PITCH, pitch); + } + + public static float getCameraPitch(Entity camera){ + return (float)camera.getData(EntityDataStrings.CAMERA_PITCH); + } + + public static void setCameraYaw(Entity camera, float yaw){ + camera.putData(EntityDataStrings.CAMERA_YAW, yaw); + } + + public static float getCameraYaw(Entity camera){ + return (float)camera.getData(EntityDataStrings.CAMERA_YAW); + } + public static void destroyCameraEntity(Entity e){ if(e != null){ Globals.entityManager.deregisterEntity(e); diff --git a/src/main/java/electrosphere/entity/EntityDataStrings.java b/src/main/java/electrosphere/entity/EntityDataStrings.java index 0d17d642..b469f421 100644 --- a/src/main/java/electrosphere/entity/EntityDataStrings.java +++ b/src/main/java/electrosphere/entity/EntityDataStrings.java @@ -45,6 +45,8 @@ public class EntityDataStrings { public static final String DATA_STRING_CAMERA_TYPE_ORBIT = "cameraTypeOrbit"; public static final String DATA_STRING_CAMERA_EYE = "cameraEye"; public static final String DATA_STRING_CAMERA_CENTER = "cameraCenter"; + public static final String CAMERA_PITCH = "cameraPitch"; + public static final String CAMERA_YAW = "cameraYaw"; /* diff --git a/src/main/java/electrosphere/entity/EntityManager.java b/src/main/java/electrosphere/entity/EntityManager.java index 5d42944d..d6a44424 100644 --- a/src/main/java/electrosphere/entity/EntityManager.java +++ b/src/main/java/electrosphere/entity/EntityManager.java @@ -7,6 +7,7 @@ import java.util.Iterator; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; +import org.joml.Vector3d; import org.joml.Vector3f; /** @@ -209,7 +210,7 @@ public class EntityManager { public void clearOutOfBoundsEntities(){ if(Globals.commonWorldData != null && Globals.playerCharacter != null && Globals.clientPlayerData != null){ - Vector3f playerCharacterPos = EntityUtils.getPosition(Globals.playerCharacter); + Vector3d playerCharacterPos = EntityUtils.getPosition(Globals.playerCharacter); int playerCharacterWorldX = Globals.commonWorldData.convertRealToWorld(playerCharacterPos.x); int playerCharacterWorldY = Globals.commonWorldData.convertRealToWorld(playerCharacterPos.z); if(playerCharacterWorldX != Globals.clientPlayerData.getWorldPositionX() || playerCharacterWorldY != Globals.clientPlayerData.getWorldPositionY()){ @@ -217,7 +218,7 @@ public class EntityManager { if(entity.getDataKeys().contains(EntityDataStrings.TERRAIN_IS_TERRAIN) || entity.getDataKeys().contains(EntityDataStrings.ATTACH_PARENT) || entity.getDataKeys().contains(EntityDataStrings.COLLISION_ENTITY_PARENT)){ } else { - Vector3f position = EntityUtils.getPosition(entity); + Vector3d position = EntityUtils.getPosition(entity); //common world data is initialized with the collision data //if this is null then the engine hasn't fully started up yet if(position != null){ diff --git a/src/main/java/electrosphere/entity/EntityUtils.java b/src/main/java/electrosphere/entity/EntityUtils.java index ea0a0d8f..dd30e0e7 100644 --- a/src/main/java/electrosphere/entity/EntityUtils.java +++ b/src/main/java/electrosphere/entity/EntityUtils.java @@ -13,6 +13,7 @@ import electrosphere.main.Globals; import electrosphere.renderer.Actor; import electrosphere.renderer.ActorUtils; import org.joml.Quaternionf; +import org.joml.Vector3d; import org.joml.Vector3f; /** @@ -21,8 +22,8 @@ import org.joml.Vector3f; */ public class EntityUtils { - public static Vector3f getPosition(Entity e){ - return (Vector3f)e.getData(EntityDataStrings.DATA_STRING_POSITION); + public static Vector3d getPosition(Entity e){ + return (Vector3d)e.getData(EntityDataStrings.DATA_STRING_POSITION); } public static Quaternionf getRotation(Entity e){ @@ -41,7 +42,7 @@ public class EntityUtils { Entity rVal = new Entity(); rVal.putData(EntityDataStrings.DATA_STRING_ACTOR, ActorUtils.createActorFromModelPath(modelPath)); // rVal.putData(EntityDataStrings.DATA_STRING_MODEL_PATH, modelPath); - rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3f(0,0,0)); + rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3d(0,0,0)); rVal.putData(EntityDataStrings.DATA_STRING_ROTATION, new Quaternionf().identity()); rVal.putData(EntityDataStrings.DATA_STRING_SCALE, new Vector3f(1,1,1)); rVal.putData(EntityDataStrings.DATA_STRING_DRAW, true); @@ -53,7 +54,7 @@ public class EntityUtils { public static Entity spawnDrawableEntityWithPreexistingModel(String modelPath){ Entity rVal = new Entity(); rVal.putData(EntityDataStrings.DATA_STRING_ACTOR, ActorUtils.createActorFromModelPath(modelPath)); - rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3f(0,0,0)); + rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3d(0,0,0)); rVal.putData(EntityDataStrings.DATA_STRING_ROTATION, new Quaternionf().rotateAxis((float)0, new Vector3f(1,0,0))); rVal.putData(EntityDataStrings.DATA_STRING_SCALE, new Vector3f(1,1,1)); rVal.putData(EntityDataStrings.DATA_STRING_DRAW, true); @@ -65,7 +66,7 @@ public class EntityUtils { public static Entity spawnUIEntity(String modelPath){ Entity rVal = new Entity(); rVal.putData(EntityDataStrings.DATA_STRING_ACTOR, ActorUtils.createActorFromModelPath(modelPath)); - rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3f(0,0,0)); + rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3d(0,0,0)); rVal.putData(EntityDataStrings.DATA_STRING_ROTATION, new Quaternionf().rotateAxis((float)0, new Vector3f(1,0,0))); rVal.putData(EntityDataStrings.DATA_STRING_SCALE, new Vector3f(1,1,1)); rVal.putData(EntityDataStrings.DATA_STRING_UI_ELEMENT, true); diff --git a/src/main/java/electrosphere/entity/state/AttackTree.java b/src/main/java/electrosphere/entity/state/AttackTree.java index 0abf90d8..2d29d4e9 100644 --- a/src/main/java/electrosphere/entity/state/AttackTree.java +++ b/src/main/java/electrosphere/entity/state/AttackTree.java @@ -12,6 +12,7 @@ import electrosphere.renderer.Actor; import electrosphere.renderer.anim.Animation; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import org.joml.Vector3d; import org.joml.Vector3f; public class AttackTree { @@ -76,7 +77,7 @@ public class AttackTree { public void simulate(){ float velocity = CreatureUtils.getVelocity(parent); Actor entityActor = EntityUtils.getActor(parent); - Vector3f position = EntityUtils.getPosition(parent); + Vector3d position = EntityUtils.getPosition(parent); Vector3f movementVector = CreatureUtils.getMovementVector(parent); //parse attached network messages @@ -135,9 +136,9 @@ public class AttackTree { EntityMessage.constructattackUpdateMessage( parent.getId(), System.currentTimeMillis(), - position.x, - position.y, - position.z, + (float)position.x, + (float)position.y, + (float)position.z, movementVector.x, movementVector.y, movementVector.z, @@ -150,9 +151,9 @@ public class AttackTree { EntityMessage.constructattackUpdateMessage( parent.getId(), System.currentTimeMillis(), - position.x, - position.y, - position.z, + (float)position.x, + (float)position.y, + (float)position.z, movementVector.x, movementVector.y, movementVector.z, @@ -184,9 +185,9 @@ public class AttackTree { EntityMessage.constructattackUpdateMessage( parent.getId(), System.currentTimeMillis(), - position.x, - position.y, - position.z, + (float)position.x, + (float)position.y, + (float)position.z, movementVector.x, movementVector.y, movementVector.z, @@ -199,9 +200,9 @@ public class AttackTree { EntityMessage.constructattackUpdateMessage( parent.getId(), System.currentTimeMillis(), - position.x, - position.y, - position.z, + (float)position.x, + (float)position.y, + (float)position.z, movementVector.x, movementVector.y, movementVector.z, @@ -234,9 +235,9 @@ public class AttackTree { EntityMessage.constructattackUpdateMessage( parent.getId(), System.currentTimeMillis(), - position.x, - position.y, - position.z, + (float)position.x, + (float)position.y, + (float)position.z, movementVector.x, movementVector.y, movementVector.z, @@ -249,9 +250,9 @@ public class AttackTree { EntityMessage.constructattackUpdateMessage( parent.getId(), System.currentTimeMillis(), - position.x, - position.y, - position.z, + (float)position.x, + (float)position.y, + (float)position.z, movementVector.x, movementVector.y, movementVector.z, diff --git a/src/main/java/electrosphere/entity/state/GravityTree.java b/src/main/java/electrosphere/entity/state/GravityTree.java index 524e3890..c88af98e 100644 --- a/src/main/java/electrosphere/entity/state/GravityTree.java +++ b/src/main/java/electrosphere/entity/state/GravityTree.java @@ -12,6 +12,7 @@ import electrosphere.net.parser.net.message.EntityMessage; import electrosphere.renderer.Actor; import java.util.concurrent.CopyOnWriteArrayList; import org.joml.Quaternionf; +import org.joml.Vector3d; import org.joml.Vector3f; /** @@ -74,7 +75,7 @@ public class GravityTree { float acceleration = CreatureUtils.getAcceleration(parent); float maxNaturalVelocity = CreatureUtils.getMaxNaturalVelocity(parent); Actor entityActor = EntityUtils.getActor(parent); - Vector3f position = EntityUtils.getPosition(parent); + Vector3d position = EntityUtils.getPosition(parent); Vector3f movementVector = CreatureUtils.getMovementVector(parent); Quaternionf rotation = EntityUtils.getRotation(parent); Vector3f newPosition; @@ -108,19 +109,19 @@ public class GravityTree { if(hadGroundCollision()){ state = GravityTreeState.NOT_ACTIVE; if(!hadStructureCollision()){ - position.set(new Vector3f(position.x,Globals.commonWorldData.getElevationAtPoint(position) + 0.0001f,position.z)); + position.set(new Vector3d(position.x,Globals.commonWorldData.getElevationAtPoint(position) + 0.0001f,position.z)); } } else { float gravityDif = gravityConstant * (float)Math.pow(1.0f - linearDamping,deltaTime * 2); - Vector3f newGravityPos = new Vector3f(position.x,position.y - gravityDif,position.z); - float hitFraction = Globals.collisionEngine.sweepTest(body, position, newGravityPos); + Vector3d newGravityPos = new Vector3d(position.x,position.y - gravityDif,position.z); + float hitFraction = Globals.collisionEngine.sweepTest(body, new Vector3f((float)position.x,(float)position.y,(float)position.z), new Vector3f((float)newGravityPos.x,(float)newGravityPos.y,(float)newGravityPos.z)); if(hitFraction >= 0){ - position.set(new Vector3f(position.x,position.y - gravityDif * hitFraction,position.z)); + position.set(new Vector3d(position.x,position.y - gravityDif * hitFraction,position.z)); } else { - position.set(new Vector3f(position.x,position.y - gravityDif,position.z)); + position.set(new Vector3d(position.x,position.y - gravityDif,position.z)); } // System.out.println(hitFraction); - bodyTransformMatrix = new javax.vecmath.Matrix4f(PhysicsUtils.jomlToVecmathQuaternionf(rotation),PhysicsUtils.jomlToVecmathVector3f(position),1.0f); + bodyTransformMatrix = new javax.vecmath.Matrix4f(PhysicsUtils.jomlToVecmathQuaternionf(rotation),PhysicsUtils.jomlToVecmathVector3f(new Vector3f((float)position.x,(float)position.y,(float)position.z)),1.0f); body.setWorldTransform(new electrosphere.linearmath.Transform(bodyTransformMatrix)); } break; diff --git a/src/main/java/electrosphere/entity/state/ParticleTree.java b/src/main/java/electrosphere/entity/state/ParticleTree.java index 00bf5458..443c95b1 100644 --- a/src/main/java/electrosphere/entity/state/ParticleTree.java +++ b/src/main/java/electrosphere/entity/state/ParticleTree.java @@ -3,6 +3,7 @@ package electrosphere.entity.state; import electrosphere.entity.Entity; import electrosphere.entity.EntityUtils; import electrosphere.main.Globals; +import org.joml.Vector3d; import org.joml.Vector3f; /** @@ -47,7 +48,7 @@ public class ParticleTree { } public void simulate(){ - Vector3f parentPosition = EntityUtils.getPosition(parent); + Vector3d parentPosition = EntityUtils.getPosition(parent); parentPosition.add(new Vector3f(destination).mul(velocity)); velocity = velocity - acceleration; if(velocity < 0){ diff --git a/src/main/java/electrosphere/entity/state/movement/MovementTree.java b/src/main/java/electrosphere/entity/state/movement/MovementTree.java index e9f0218b..7002453d 100644 --- a/src/main/java/electrosphere/entity/state/movement/MovementTree.java +++ b/src/main/java/electrosphere/entity/state/movement/MovementTree.java @@ -2,6 +2,7 @@ package electrosphere.entity.state.movement; import electrosphere.collision.dispatch.CollisionObject; import electrosphere.dynamics.RigidBody; +import electrosphere.entity.CameraEntityUtils; import electrosphere.entity.types.creature.CreatureUtils; import electrosphere.entity.Entity; import electrosphere.entity.EntityDataStrings; @@ -20,6 +21,7 @@ import java.util.LinkedList; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import org.joml.Quaternionf; +import org.joml.Vector3d; import org.joml.Vector3f; /* @@ -81,11 +83,12 @@ public class MovementTree { float maxNaturalVelocity = CreatureUtils.getMaxNaturalVelocity(parent); Actor entityActor = EntityUtils.getActor(parent); // Model entityModel = Globals.assetManager.fetchModel(EntityUtils.getEntityModelPath(parent)); - Vector3f position = EntityUtils.getPosition(parent); + Vector3d position = EntityUtils.getPosition(parent); Vector3f movementVector = CreatureUtils.getMovementVector(parent); + float movementYaw = CameraEntityUtils.getCameraYaw(Globals.playerCamera); Quaternionf movementQuaternion = new Quaternionf().rotationTo(new Vector3f(0,0,1), movementVector).normalize(); Quaternionf rotation = EntityUtils.getRotation(parent); - Vector3f newPosition; + Vector3d newPosition; javax.vecmath.Matrix4f bodyTransformMatrix; //parse attached network messages @@ -151,7 +154,7 @@ public class MovementTree { // System.out.println("Impulse force: " + impulseForce); position.add(impulseForce); } - bodyTransformMatrix = new javax.vecmath.Matrix4f(PhysicsUtils.jomlToVecmathQuaternionf(rotation),PhysicsUtils.jomlToVecmathVector3f(position),1.0f); + bodyTransformMatrix = new javax.vecmath.Matrix4f(PhysicsUtils.jomlToVecmathQuaternionf(rotation),PhysicsUtils.jomlToVecmathVector3f(new Vector3f((float)position.x,(float)position.y,(float)position.z)),1.0f); body.setWorldTransform(new electrosphere.linearmath.Transform(bodyTransformMatrix)); //state machine @@ -174,7 +177,7 @@ public class MovementTree { // body.applyCentralForce(PhysicsUtils.jomlToVecmathVector3f(new Vector3f(movementVector.x,0,movementVector.z).normalize().mul(velocity))); EntityUtils.getRotation(parent).set(movementQuaternion); //move the entity - newPosition = new Vector3f(position).add(new Vector3f(0,0,1).rotate(movementQuaternion).mul(velocity)); + newPosition = new Vector3d(position).add(new Vector3d(-Math.cos(movementYaw / 180.0f * Math.PI),0,-Math.sin(movementYaw / 180.0f * Math.PI)).mul(velocity)); //check/update if collision if(!Globals.collisionEngine.checkCanOccupyPosition(Globals.commonWorldData, parent, newPosition)){ newPosition = Globals.collisionEngine.suggestMovementPosition(Globals.commonWorldData, parent, newPosition); @@ -183,7 +186,7 @@ public class MovementTree { position.set(newPosition); rotation.set(movementQuaternion); - bodyTransformMatrix = new javax.vecmath.Matrix4f(PhysicsUtils.jomlToVecmathQuaternionf(rotation),PhysicsUtils.jomlToVecmathVector3f(newPosition),1.0f); + bodyTransformMatrix = new javax.vecmath.Matrix4f(PhysicsUtils.jomlToVecmathQuaternionf(rotation),PhysicsUtils.jomlToVecmathVector3f(new Vector3f((float)newPosition.x,(float)newPosition.y,(float)newPosition.z)),1.0f); body.setWorldTransform(new electrosphere.linearmath.Transform(bodyTransformMatrix)); activateGravityTree(); @@ -207,9 +210,9 @@ public class MovementTree { EntityMessage.constructmoveUpdateMessage( parent.getId(), System.currentTimeMillis(), - newPosition.x, - newPosition.y, - newPosition.z, + (float)newPosition.x, + (float)newPosition.y, + (float)newPosition.z, movementVector.x, movementVector.y, movementVector.z, @@ -224,9 +227,9 @@ public class MovementTree { EntityMessage.constructmoveUpdateMessage( parent.getId(), System.currentTimeMillis(), - newPosition.x, - newPosition.y, - newPosition.z, + (float)newPosition.x, + (float)newPosition.y, + (float)newPosition.z, movementVector.x, movementVector.y, movementVector.z, @@ -249,14 +252,14 @@ public class MovementTree { EntityUtils.getRotation(parent).set(movementQuaternion); //check if can move forward (collision engine) //if can, move forward by entity movement stats - newPosition = new Vector3f(position).add(new Vector3f(0,0,1).rotate(movementQuaternion).mul(velocity)); + newPosition = new Vector3d(position).add(new Vector3d(-Math.cos(movementYaw / 180.0f * Math.PI),0,-Math.sin(movementYaw / 180.0f * Math.PI)).mul(velocity)); if(!Globals.collisionEngine.checkCanOccupyPosition(Globals.commonWorldData, parent, newPosition)){ newPosition = Globals.collisionEngine.suggestMovementPosition(Globals.commonWorldData, parent, newPosition); } position.set(newPosition); rotation.set(movementQuaternion); - bodyTransformMatrix = new javax.vecmath.Matrix4f(PhysicsUtils.jomlToVecmathQuaternionf(rotation),PhysicsUtils.jomlToVecmathVector3f(newPosition),1.0f); + bodyTransformMatrix = new javax.vecmath.Matrix4f(PhysicsUtils.jomlToVecmathQuaternionf(rotation),PhysicsUtils.jomlToVecmathVector3f(new Vector3f((float)newPosition.x,(float)newPosition.y,(float)newPosition.z)),1.0f); body.setWorldTransform(new electrosphere.linearmath.Transform(bodyTransformMatrix)); activateGravityTree(); @@ -280,9 +283,9 @@ public class MovementTree { EntityMessage.constructmoveUpdateMessage( parent.getId(), System.currentTimeMillis(), - newPosition.x, - newPosition.y, - newPosition.z, + (float)newPosition.x, + (float)newPosition.y, + (float)newPosition.z, movementVector.x, movementVector.y, movementVector.z, @@ -297,9 +300,9 @@ public class MovementTree { EntityMessage.constructmoveUpdateMessage( parent.getId(), System.currentTimeMillis(), - newPosition.x, - newPosition.y, - newPosition.z, + (float)newPosition.x, + (float)newPosition.y, + (float)newPosition.z, movementVector.x, movementVector.y, movementVector.z, @@ -327,14 +330,14 @@ public class MovementTree { // body.applyCentralForce(PhysicsUtils.jomlToVecmathVector3f(new Vector3f(movementVector).mul(-1.0f).normalize().mul(velocity))); EntityUtils.getRotation(parent).rotationTo(new Vector3f(0,0,1), movementVector); //move the entity - newPosition = new Vector3f(position).add(new Vector3f(movementVector).mul(velocity)); + newPosition = new Vector3d(position).add(new Vector3d(-Math.cos(movementYaw / 180.0f * Math.PI),0,-Math.sin(movementYaw / 180.0f * Math.PI)).mul(velocity)); if(!Globals.collisionEngine.checkCanOccupyPosition(Globals.commonWorldData, parent, newPosition)){ newPosition = Globals.collisionEngine.suggestMovementPosition(Globals.commonWorldData, parent, newPosition); } position.set(newPosition); rotation.rotationTo(new Vector3f(0,0,1), movementVector); - bodyTransformMatrix = new javax.vecmath.Matrix4f(PhysicsUtils.jomlToVecmathQuaternionf(rotation),PhysicsUtils.jomlToVecmathVector3f(newPosition),1.0f); + bodyTransformMatrix = new javax.vecmath.Matrix4f(PhysicsUtils.jomlToVecmathQuaternionf(rotation),PhysicsUtils.jomlToVecmathVector3f(new Vector3f((float)newPosition.x,(float)newPosition.y,(float)newPosition.z)),1.0f); body.setWorldTransform(new electrosphere.linearmath.Transform(bodyTransformMatrix)); activateGravityTree(); @@ -358,9 +361,9 @@ public class MovementTree { EntityMessage.constructmoveUpdateMessage( parent.getId(), System.currentTimeMillis(), - newPosition.x, - newPosition.y, - newPosition.z, + (float)newPosition.x, + (float)newPosition.y, + (float)newPosition.z, movementVector.x, movementVector.y, movementVector.z, @@ -375,9 +378,9 @@ public class MovementTree { EntityMessage.constructmoveUpdateMessage( parent.getId(), System.currentTimeMillis(), - newPosition.x, - newPosition.y, - newPosition.z, + (float)newPosition.x, + (float)newPosition.y, + (float)newPosition.z, movementVector.x, movementVector.y, movementVector.z, diff --git a/src/main/java/electrosphere/entity/types/attach/AttachUtils.java b/src/main/java/electrosphere/entity/types/attach/AttachUtils.java index d89bf1af..43a45413 100644 --- a/src/main/java/electrosphere/entity/types/attach/AttachUtils.java +++ b/src/main/java/electrosphere/entity/types/attach/AttachUtils.java @@ -8,7 +8,9 @@ import electrosphere.main.Globals; import electrosphere.renderer.Actor; import electrosphere.renderer.Model; import java.util.LinkedList; +import org.joml.Quaterniond; import org.joml.Quaternionf; +import org.joml.Vector3d; import org.joml.Vector3f; /** @@ -40,11 +42,12 @@ public class AttachUtils { if((targetBone = (String)currentEntity.getData(EntityDataStrings.ATTACH_TARGET_BONE))!=null){ Actor parentActor = EntityUtils.getActor(parent); //transform bone space - Vector3f position = new Vector3f(parentActor.getBonePosition(targetBone)); + Vector3d position = new Vector3d(parentActor.getBonePosition(targetBone)); position = position.mul(((Vector3f)EntityUtils.getScale(parent))); - position = position.rotate(((Quaternionf)EntityUtils.getRotation(parent))); + Quaternionf rotation = EntityUtils.getRotation(parent); + position = position.rotate(new Quaterniond(rotation.x,rotation.y,rotation.z,rotation.w)); //transform worldspace - position.add(new Vector3f(EntityUtils.getPosition(parent))); + position.add(new Vector3d(EntityUtils.getPosition(parent))); //set EntityUtils.getPosition(currentEntity).set(position); //set rotation diff --git a/src/main/java/electrosphere/entity/types/collision/CollisionObjUtils.java b/src/main/java/electrosphere/entity/types/collision/CollisionObjUtils.java index d956c95e..eab00f55 100644 --- a/src/main/java/electrosphere/entity/types/collision/CollisionObjUtils.java +++ b/src/main/java/electrosphere/entity/types/collision/CollisionObjUtils.java @@ -10,6 +10,7 @@ import electrosphere.game.collision.PhysicsUtils; import electrosphere.game.collision.collidable.Collidable; import electrosphere.main.Globals; import org.joml.Quaternionf; +import org.joml.Vector3d; import org.joml.Vector3f; /** @@ -32,7 +33,7 @@ public class CollisionObjUtils { Globals.collisionEngine.registerStructurePhysicsEntity(rVal); rVal.putData(EntityDataStrings.COLLISION_ENTITY_TYPE_PLANE, true); - rVal.putData(EntityDataStrings.DATA_STRING_POSITION, position); + rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3d(position.x,position.y,position.z)); rVal.putData(EntityDataStrings.DATA_STRING_ROTATION, rotation); rVal.putData(EntityDataStrings.DATA_STRING_SCALE, scale); rVal.putData(EntityDataStrings.COLLISION_ENTITY_COLLISION_OBJECT, planeObject); @@ -57,7 +58,7 @@ public class CollisionObjUtils { Globals.collisionEngine.registerStructurePhysicsEntity(rVal); rVal.putData(EntityDataStrings.COLLISION_ENTITY_TYPE_CUBE, true); - rVal.putData(EntityDataStrings.DATA_STRING_POSITION, position); + rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3d(position.x,position.y,position.z)); rVal.putData(EntityDataStrings.DATA_STRING_ROTATION, rotation); rVal.putData(EntityDataStrings.DATA_STRING_SCALE, scale); rVal.putData(EntityDataStrings.COLLISION_ENTITY_COLLISION_OBJECT, cubeObject); @@ -81,7 +82,7 @@ public class CollisionObjUtils { Globals.collisionEngine.registerStructurePhysicsEntity(rVal); rVal.putData(EntityDataStrings.COLLISION_ENTITY_TYPE_CYLINDER, true); - rVal.putData(EntityDataStrings.DATA_STRING_POSITION, position); + rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3d(position.x,position.y,position.z)); rVal.putData(EntityDataStrings.DATA_STRING_ROTATION, rotation); rVal.putData(EntityDataStrings.DATA_STRING_SCALE, scale); rVal.putData(EntityDataStrings.COLLISION_ENTITY_COLLISION_OBJECT, cubeObject); diff --git a/src/main/java/electrosphere/entity/types/creature/CreatureUtils.java b/src/main/java/electrosphere/entity/types/creature/CreatureUtils.java index 60e2d635..0057c2af 100644 --- a/src/main/java/electrosphere/entity/types/creature/CreatureUtils.java +++ b/src/main/java/electrosphere/entity/types/creature/CreatureUtils.java @@ -30,6 +30,7 @@ import electrosphere.renderer.ActorUtils; import electrosphere.renderer.Model; import electrosphere.util.ModelLoader; import org.joml.Quaternionf; +import org.joml.Vector3d; import org.joml.Vector3f; /** @@ -143,8 +144,8 @@ public class CreatureUtils { public static void sendEntityToPlayer(Player player, Entity creature){ int id = creature.getId(); String type = CreatureUtils.getType(creature); - Vector3f position = EntityUtils.getPosition(creature); - NetworkMessage message = EntityMessage.constructCreateMessage(id, EntityDataStrings.ENTITY_CATEGORY_CREATURE, type, position.x, position.y, position.z); + Vector3d position = EntityUtils.getPosition(creature); + NetworkMessage message = EntityMessage.constructCreateMessage(id, EntityDataStrings.ENTITY_CATEGORY_CREATURE, type, (float)position.x, (float)position.y, (float)position.z); player.addMessage(message); if(CreatureUtils.hasControllerPlayerId(creature)){ LoggerInterface.loggerNetworking.INFO("Sending controller packets"); diff --git a/src/main/java/electrosphere/entity/types/hitbox/HitboxUtils.java b/src/main/java/electrosphere/entity/types/hitbox/HitboxUtils.java index 432f990b..b73a17d6 100644 --- a/src/main/java/electrosphere/entity/types/hitbox/HitboxUtils.java +++ b/src/main/java/electrosphere/entity/types/hitbox/HitboxUtils.java @@ -11,6 +11,7 @@ import electrosphere.game.server.effects.ParticleEffects; import electrosphere.main.Globals; import org.joml.Matrix4f; import org.joml.Quaternionf; +import org.joml.Vector3d; import org.joml.Vector3f; import org.joml.Vector4f; @@ -30,7 +31,7 @@ public class HitboxUtils { data.setType(EntityDataStrings.COLLISION_ENTITY_DATA_TYPE_HIT); rVal.putData(EntityDataStrings.COLLISION_ENTITY_DATA_PARENT, parent); rVal.putData(EntityDataStrings.HITBOX_DATA, data); - rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3f(0,0,0)); + rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3d(0,0,0)); Globals.hitboxManager.registerHitbox(rVal); return rVal; } @@ -45,7 +46,7 @@ public class HitboxUtils { data.setType(EntityDataStrings.COLLISION_ENTITY_DATA_TYPE_HURT); rVal.putData(EntityDataStrings.COLLISION_ENTITY_DATA_PARENT, parent); rVal.putData(EntityDataStrings.HITBOX_DATA, data); - rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3f(0,0,0)); + rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3d(0,0,0)); Globals.hitboxManager.registerHitbox(rVal); return rVal; } @@ -58,6 +59,7 @@ public class HitboxUtils { Vector3f positionScale = ((Vector3f)EntityUtils.getScale(parent)); Vector3f worldPosition = new Vector3f(); Vector3f bonePosition = EntityUtils.getActor(parent).getBonePosition(boneName); + Vector3d parentPos = EntityUtils.getPosition(parent); worldPosition.set(bonePosition.x,bonePosition.y,bonePosition.z); Quaternionf rotation = new Quaternionf(parentRotation); @@ -66,9 +68,9 @@ public class HitboxUtils { worldPosition = worldPosition.rotate(rotation); - worldPosition.add(EntityUtils.getPosition(parent)); + worldPosition.add(new Vector3f((float)parentPos.x,(float)parentPos.y,(float)parentPos.z)); - ((Vector3f)hitbox.getData(EntityDataStrings.DATA_STRING_POSITION)).set(worldPosition); + ((Vector3d)hitbox.getData(EntityDataStrings.DATA_STRING_POSITION)).set(worldPosition); } public static void collideEntities(Entity generatorHitbox){ @@ -123,7 +125,8 @@ public class HitboxUtils { int currentHp = lifeState.getLifeCurrent(); LifeUtils.getLifeState(hurtboxParent).damage(20); if(currentHp > lifeState.getLifeCurrent()){ - ParticleEffects.spawnSparks(new Vector3f(EntityUtils.getPosition(hurtbox)).add(0,0.1f,0), 20, 40); + Vector3d hurtboxPos = EntityUtils.getPosition(hurtbox); + ParticleEffects.spawnSparks(new Vector3f((float)hurtboxPos.x,(float)hurtboxPos.y,(float)hurtboxPos.z).add(0,0.1f,0), 20, 40); } if(!LifeUtils.getLifeState(hurtboxParent).isIsAlive()){ EntityUtils.getPosition(hurtboxParent).set(Globals.spawnPoint); diff --git a/src/main/java/electrosphere/entity/types/item/ItemUtils.java b/src/main/java/electrosphere/entity/types/item/ItemUtils.java index 2dc0931a..e76451c0 100644 --- a/src/main/java/electrosphere/entity/types/item/ItemUtils.java +++ b/src/main/java/electrosphere/entity/types/item/ItemUtils.java @@ -17,6 +17,7 @@ import electrosphere.renderer.Actor; import electrosphere.renderer.ActorUtils; import electrosphere.renderer.Model; import org.joml.Quaternionf; +import org.joml.Vector3d; import org.joml.Vector3f; /** @@ -59,8 +60,8 @@ public class ItemUtils { public static void sendEntityToPlayer(Player player, Entity item){ int id = item.getId(); String type = ItemUtils.getType(item); - Vector3f position = EntityUtils.getPosition(item); - NetworkMessage message = EntityMessage.constructCreateMessage(id, EntityDataStrings.ENTITY_CATEGORY_ITEM, type, position.x, position.y, position.z); + Vector3d position = EntityUtils.getPosition(item); + NetworkMessage message = EntityMessage.constructCreateMessage(id, EntityDataStrings.ENTITY_CATEGORY_ITEM, type, (float)position.x, (float)position.y, (float)position.z); player.addMessage(message); if(AttachUtils.isAttached(item)){ player.addMessage( diff --git a/src/main/java/electrosphere/entity/types/particle/ParticleUtils.java b/src/main/java/electrosphere/entity/types/particle/ParticleUtils.java index 1f69ba88..dec483bd 100644 --- a/src/main/java/electrosphere/entity/types/particle/ParticleUtils.java +++ b/src/main/java/electrosphere/entity/types/particle/ParticleUtils.java @@ -9,6 +9,7 @@ import electrosphere.main.Globals; import org.joml.AxisAngle4f; import org.joml.Matrix4f; import org.joml.Quaternionf; +import org.joml.Vector3d; import org.joml.Vector3f; /** @@ -33,7 +34,7 @@ public class ParticleUtils { public static void makeParticleBillboardFaceCamera(Entity particle){ Vector3f cameraCenter = CameraEntityUtils.getCameraCenter(Globals.playerCamera); Vector3f cameraEye = new Vector3f(CameraEntityUtils.getCameraEye(Globals.playerCamera)).add(cameraCenter).mul(-1.0f); - Vector3f particlePosition = EntityUtils.getPosition(particle); + Vector3d particlePosition = EntityUtils.getPosition(particle); // Vector3f cameraEye = new Vector3f(CameraEntityUtils.getCameraEye(Globals.playerCamera)).mul(1.0f,-1.0f,-1.0f); // Vector3f directionVector = new Vector3f(cameraCenter).sub(cameraEye); Matrix4f rotationMatrix = new Matrix4f(Globals.viewMatrix).invert(); diff --git a/src/main/java/electrosphere/entity/types/structure/StructureUtils.java b/src/main/java/electrosphere/entity/types/structure/StructureUtils.java index 6d01289f..a42a27bd 100644 --- a/src/main/java/electrosphere/entity/types/structure/StructureUtils.java +++ b/src/main/java/electrosphere/entity/types/structure/StructureUtils.java @@ -13,6 +13,7 @@ import electrosphere.net.parser.net.message.NetworkMessage; import electrosphere.net.server.Player; import org.joml.Matrix4f; import org.joml.Quaternionf; +import org.joml.Vector3d; import org.joml.Vector3f; import org.joml.Vector4f; @@ -60,8 +61,8 @@ public class StructureUtils { public static void sendStructureToPlayer(Player player, Entity structure){ int id = structure.getId(); String type = StructureUtils.getType(structure); - Vector3f position = EntityUtils.getPosition(structure); - NetworkMessage message = EntityMessage.constructCreateMessage(id, EntityDataStrings.ENTITY_CATEGORY_STRUCTURE, type, position.x, position.y, position.z); + Vector3d position = EntityUtils.getPosition(structure); + NetworkMessage message = EntityMessage.constructCreateMessage(id, EntityDataStrings.ENTITY_CATEGORY_STRUCTURE, type, (float)position.x, (float)position.y, (float)position.z); player.addMessage(message); } } diff --git a/src/main/java/electrosphere/game/client/cells/DrawCellManager.java b/src/main/java/electrosphere/game/client/cells/DrawCellManager.java index 4eb7b528..5f68d7dd 100644 --- a/src/main/java/electrosphere/game/client/cells/DrawCellManager.java +++ b/src/main/java/electrosphere/game/client/cells/DrawCellManager.java @@ -8,6 +8,7 @@ import electrosphere.net.parser.net.message.WorldMessage; import electrosphere.renderer.ShaderProgram; import java.util.Arrays; import java.util.HashMap; +import org.joml.Vector3d; import org.joml.Vector3f; /** @@ -527,7 +528,7 @@ public class DrawCellManager { } - public int transformRealSpaceToCellSpace(float input){ + public int transformRealSpaceToCellSpace(double input){ return (int)(input / clientWorldData.getDynamicInterpolationRatio()); } @@ -540,7 +541,7 @@ public class DrawCellManager { } } - public void calculateDeltas(Vector3f oldPosition, Vector3f newPosition){ + public void calculateDeltas(Vector3d oldPosition, Vector3d newPosition){ // if(DRAW_CELL_MANAGER_FLAG_UPDATE_DYNAMIC_TERRAIN){ if(transformRealSpaceToCellSpace(newPosition.x()) < transformRealSpaceToCellSpace(oldPosition.x())){ shiftChunksNegX(); diff --git a/src/main/java/electrosphere/game/client/terrain/manager/ClientTerrainManager.java b/src/main/java/electrosphere/game/client/terrain/manager/ClientTerrainManager.java index f8a19eb0..9cb46bb1 100644 --- a/src/main/java/electrosphere/game/client/terrain/manager/ClientTerrainManager.java +++ b/src/main/java/electrosphere/game/client/terrain/manager/ClientTerrainManager.java @@ -138,7 +138,7 @@ public class ClientTerrainManager { return terrainCache.containsHeightmapAtChunkPoint(x, y); } - public boolean containsHeightmapAtRealPoint(float x, float z){ + public boolean containsHeightmapAtRealPoint(double x, double z){ return terrainCache.containsHeightmapAtChunkPoint(clientWorldData.convertRealToChunkSpace(x), clientWorldData.convertRealToChunkSpace(z)); } @@ -147,13 +147,13 @@ public class ClientTerrainManager { } - public float getHeightAtPosition(float x, float y){ + public double getHeightAtPosition(double x, double y){ //get chunk coordinate space of input x,y int chunkX = (int)Math.floor(x / clientWorldData.getDynamicInterpolationRatio()); int chunkY = (int)Math.floor(y / clientWorldData.getDynamicInterpolationRatio()); //get local coordinate space of input x,y - float localX = x - chunkX * clientWorldData.getDynamicInterpolationRatio(); - float localY = y - chunkY * clientWorldData.getDynamicInterpolationRatio(); + double localX = x - chunkX * clientWorldData.getDynamicInterpolationRatio(); + double localY = y - chunkY * clientWorldData.getDynamicInterpolationRatio(); //get chunk elevation map float[][] chunkElevationMap = getHeightmapAtPoint(chunkX,chunkY); //floored variants of local values @@ -174,7 +174,7 @@ public class ClientTerrainManager { float elevation01 = chunkElevationMap[(int)localX+0][(int)localY+1]; float elevation11 = chunkElevationMap[(int)localX+1][(int)localY+1]; - float rVal = + double rVal = (1-(localX-localXf))*(1-(localY-localYf)) * elevation00 + ( (localX-localXf))*(1-(localY-localYf)) * elevation10 + (1-(localX-localXf))*( (localY-localYf)) * elevation01 + diff --git a/src/main/java/electrosphere/game/client/world/ClientWorldData.java b/src/main/java/electrosphere/game/client/world/ClientWorldData.java index a6db468a..61654174 100644 --- a/src/main/java/electrosphere/game/client/world/ClientWorldData.java +++ b/src/main/java/electrosphere/game/client/world/ClientWorldData.java @@ -75,7 +75,7 @@ public class ClientWorldData { } - public int convertRealToChunkSpace(float real){ + public int convertRealToChunkSpace(double real){ return (int)Math.floor(real / dynamicInterpolationRatio); } diff --git a/src/main/java/electrosphere/game/collision/CollisionEngine.java b/src/main/java/electrosphere/game/collision/CollisionEngine.java index 49b9d58c..80f204ff 100644 --- a/src/main/java/electrosphere/game/collision/CollisionEngine.java +++ b/src/main/java/electrosphere/game/collision/CollisionEngine.java @@ -31,6 +31,7 @@ import electrosphere.game.collision.collidable.Collidable; import static electrosphere.main.Main.deltaTime; import java.util.ArrayList; import java.util.List; +import org.joml.Vector3d; import org.joml.Vector3f; /** @@ -147,7 +148,7 @@ public class CollisionEngine { * @param positionToCheck the position that it wants to move to * @return true if it can occupy that position, false otherwise */ - public boolean checkCanOccupyPosition(CommonWorldData w, Entity e, Vector3f positionToCheck){ + public boolean checkCanOccupyPosition(CommonWorldData w, Entity e, Vector3d positionToCheck){ boolean rVal = true; // // check world bounds @@ -182,15 +183,15 @@ public class CollisionEngine { * @return the position the engine recommends it move to instead (this is * guaranteed to be a valid position) */ - public Vector3f suggestMovementPosition(CommonWorldData w, Entity e, Vector3f positionToCheck){ - Vector3f suggestedPosition = new Vector3f(positionToCheck); + public Vector3d suggestMovementPosition(CommonWorldData w, Entity e, Vector3d positionToCheck){ + Vector3d suggestedPosition = new Vector3d(positionToCheck); // // adjust for minimum height (Terrain) // - float heightMapBias = 0.00001f; - if(w.getElevationAtPoint(positionToCheck) > positionToCheck.y){ - suggestedPosition.y = w.getElevationAtPoint(positionToCheck) + heightMapBias; - } +// float heightMapBias = 0.00001f; +// if(w.getElevationAtPoint(positionToCheck) > positionToCheck.y){ +// suggestedPosition.y = w.getElevationAtPoint(positionToCheck) + heightMapBias; +// } // // adjust for world bounds // @@ -221,11 +222,11 @@ public class CollisionEngine { public boolean collisionSphereCheck(Entity hitbox1, HitboxData hitbox1data, Entity hitbox2, HitboxData hitbox2data){ - Vector3f position1 = EntityUtils.getPosition(hitbox1); - Vector3f position2 = EntityUtils.getPosition(hitbox2); + Vector3d position1 = EntityUtils.getPosition(hitbox1); + Vector3d position2 = EntityUtils.getPosition(hitbox2); float radius1 = hitbox1data.getRadius(); float radius2 = hitbox2data.getRadius(); - float distance = position1.distance(position2); + double distance = position1.distance(position2); if(distance < radius1 + radius2){ return true; } else { @@ -286,8 +287,8 @@ public class CollisionEngine { Check if the entity is being accelerated by gravity */ public boolean gravityCheck(CommonWorldData w, Entity e){ - float worldHeight = w.getElevationAtPoint(EntityUtils.getPosition(e)); - float entityHeight = EntityUtils.getPosition(e).y; + double worldHeight = w.getElevationAtPoint(EntityUtils.getPosition(e)); + double entityHeight = EntityUtils.getPosition(e).y; return entityHeight > worldHeight + 0.1f; } diff --git a/src/main/java/electrosphere/game/collision/CommonWorldData.java b/src/main/java/electrosphere/game/collision/CommonWorldData.java index 56e058f6..bfcc9391 100644 --- a/src/main/java/electrosphere/game/collision/CommonWorldData.java +++ b/src/main/java/electrosphere/game/collision/CommonWorldData.java @@ -4,6 +4,7 @@ import electrosphere.game.client.terrain.manager.ClientTerrainManager; import electrosphere.game.client.world.ClientWorldData; import electrosphere.game.server.terrain.manager.ServerTerrainManager; import electrosphere.game.server.world.ServerWorldData; +import org.joml.Vector3d; import org.joml.Vector3f; public class CommonWorldData { @@ -42,7 +43,7 @@ public class CommonWorldData { * @param position * @return */ - public float getElevationAtPoint(Vector3f position){ + public double getElevationAtPoint(Vector3d position){ if(clientWorldData != null){ if(clientTerrainManager.containsHeightmapAtRealPoint(position.x, position.z)){ return clientTerrainManager.getHeightAtPosition(position.x, position.z); @@ -71,7 +72,7 @@ public class CommonWorldData { } } - public int convertRealToWorld(float real){ + public int convertRealToWorld(double real){ if(clientWorldData != null){ return clientWorldData.convertRealToChunkSpace(real); } else { diff --git a/src/main/java/electrosphere/game/collision/PhysicsUtils.java b/src/main/java/electrosphere/game/collision/PhysicsUtils.java index f38431b9..efa9da84 100644 --- a/src/main/java/electrosphere/game/collision/PhysicsUtils.java +++ b/src/main/java/electrosphere/game/collision/PhysicsUtils.java @@ -20,6 +20,7 @@ import java.nio.ByteOrder; import java.nio.FloatBuffer; import java.nio.IntBuffer; import org.joml.Quaternionf; +import org.joml.Vector3d; import org.joml.Vector3f; /** @@ -43,7 +44,7 @@ public class PhysicsUtils { public static RigidBody attachTerrainRigidBody(Entity terrain, float[][] heightfield){ - Vector3f position = EntityUtils.getPosition(terrain); + Vector3d position = EntityUtils.getPosition(terrain); int arrayLength = heightfield.length; int arrayWidth = heightfield[0].length; @@ -146,7 +147,7 @@ public class PhysicsUtils { // terrainShape.getLocalAabbMax(aabbMax); - DefaultMotionState defaultMotionState = new DefaultMotionState(new Transform(new javax.vecmath.Matrix4f(new javax.vecmath.Quat4f(0,0,0,1),new javax.vecmath.Vector3f(position.x,position.y,position.z),1.0f))); + DefaultMotionState defaultMotionState = new DefaultMotionState(new Transform(new javax.vecmath.Matrix4f(new javax.vecmath.Quat4f(0,0,0,1),new javax.vecmath.Vector3f((float)position.x,(float)position.y,(float)position.z),1.0f))); RigidBodyConstructionInfo terrainRigidBodyCI = new RigidBodyConstructionInfo(0, defaultMotionState, terrainShape); RigidBody terrainRigidBody = new RigidBody(terrainRigidBodyCI); diff --git a/src/main/java/electrosphere/game/server/ai/creature/MindlessAttacker.java b/src/main/java/electrosphere/game/server/ai/creature/MindlessAttacker.java index 9b223236..75c920d4 100644 --- a/src/main/java/electrosphere/game/server/ai/creature/MindlessAttacker.java +++ b/src/main/java/electrosphere/game/server/ai/creature/MindlessAttacker.java @@ -8,6 +8,7 @@ import electrosphere.entity.state.movement.MovementTree; import electrosphere.entity.types.creature.CreatureUtils; import electrosphere.game.server.ai.AI; import electrosphere.main.Globals; +import org.joml.Vector3d; import org.joml.Vector3f; /** @@ -65,10 +66,10 @@ public class MindlessAttacker extends AI{ } void moveToTarget(){ - Vector3f targetPosition = EntityUtils.getPosition(target); - Vector3f charactterPosition = EntityUtils.getPosition(character); - Vector3f moveVector = new Vector3f(targetPosition).sub(charactterPosition).normalize(); - CreatureUtils.setMovementVector(character, moveVector); + Vector3d targetPosition = EntityUtils.getPosition(target); + Vector3d characterPosition = EntityUtils.getPosition(character); + Vector3d moveVector = new Vector3d(targetPosition).sub(characterPosition).normalize(); + CreatureUtils.setMovementVector(character, new Vector3f((float)moveVector.x,(float)moveVector.y,(float)moveVector.z)); MovementTree characterMoveTree = CreatureUtils.getEntityMovementTree(character); if(characterMoveTree.getState()==MovementTree.MovementTreeState.IDLE || characterMoveTree.getState()==MovementTree.MovementTreeState.SLOWDOWN){ characterMoveTree.start(); @@ -77,9 +78,9 @@ public class MindlessAttacker extends AI{ boolean inAttackRange(){ boolean rVal = false; - Vector3f position = EntityUtils.getPosition(character); - Vector3f targetPosition = EntityUtils.getPosition(target); - if(new Vector3f(position).distance(targetPosition) < attackRange){ + Vector3d position = EntityUtils.getPosition(character); + Vector3d targetPosition = EntityUtils.getPosition(target); + if(new Vector3d(position).distance(targetPosition) < attackRange){ rVal = true; } return rVal; @@ -87,9 +88,9 @@ public class MindlessAttacker extends AI{ boolean inAggroRange(){ boolean rVal = false; - Vector3f position = EntityUtils.getPosition(character); - Vector3f targetPosition = EntityUtils.getPosition(target); - if(new Vector3f(position).distance(targetPosition) < aggroRange){ + Vector3d position = EntityUtils.getPosition(character); + Vector3d targetPosition = EntityUtils.getPosition(target); + if(new Vector3d(position).distance(targetPosition) < aggroRange){ rVal = true; } return rVal; @@ -97,10 +98,10 @@ public class MindlessAttacker extends AI{ void searchForTarget(){ - Vector3f position = EntityUtils.getPosition(character); + Vector3d position = EntityUtils.getPosition(character); for(Entity current : Globals.entityManager.getLifeStateEntities()){ if(current != character){ - Vector3f potentialTargetPosition = EntityUtils.getPosition(current); + Vector3d potentialTargetPosition = EntityUtils.getPosition(current); if(position.distance(potentialTargetPosition) < aggroRange){ target = current; break; diff --git a/src/main/java/electrosphere/game/server/structure/virtual/StructurePlacer.java b/src/main/java/electrosphere/game/server/structure/virtual/StructurePlacer.java index 16217029..aede06d5 100644 --- a/src/main/java/electrosphere/game/server/structure/virtual/StructurePlacer.java +++ b/src/main/java/electrosphere/game/server/structure/virtual/StructurePlacer.java @@ -16,21 +16,21 @@ public class StructurePlacer { public static Structure placeStructureAtPoint(float posX, float posY, String type){ Structure rVal = new Structure(posX,posY,type); - float centerHeight = Globals.serverTerrainManager.getHeightAtPosition(posX, posY); + double centerHeight = Globals.serverTerrainManager.getHeightAtPosition(posX, posY); StructureType currentTypeObject = Globals.gameConfigCurrent.getStructureTypeMap().getType(type); float radius = currentTypeObject.getRadius(); for(int x = -(int)radius; x < radius; x++){ for(int y = -(int)radius; y < radius; y++){ int newWorldX = Globals.serverWorldData.convertRealToChunkSpace(posX + x); int newWorldY = Globals.serverWorldData.convertRealToChunkSpace(posY + y); - float newLocationX = Globals.serverWorldData.getRelativeLocation(posX + x, newWorldX); - float newLocationY = Globals.serverWorldData.getRelativeLocation(posY + y, newWorldY); + double newLocationX = Globals.serverWorldData.getRelativeLocation(posX + x, newWorldX); + double newLocationY = Globals.serverWorldData.getRelativeLocation(posY + y, newWorldY); // System.out.println("Set height: " + centerHeight); // System.out.println("Deform in chunk: " + newWorldX + "," + newWorldY); - Globals.serverTerrainManager.deformTerrainAtLocationToValue(newWorldX, newWorldY, (int)(newLocationX), (int)(newLocationY), centerHeight); + Globals.serverTerrainManager.deformTerrainAtLocationToValue(newWorldX, newWorldY, (int)(newLocationX), (int)(newLocationY), (float)centerHeight); } } - StructureUtils.spawnBasicStructure(type, new Vector3f(posX,centerHeight + 2.4f,posY), new Quaternionf()); + StructureUtils.spawnBasicStructure(type, new Vector3f(posX,(float)centerHeight + 2.4f,posY), new Quaternionf()); return rVal; } } diff --git a/src/main/java/electrosphere/game/server/terrain/manager/ServerTerrainManager.java b/src/main/java/electrosphere/game/server/terrain/manager/ServerTerrainManager.java index 144e1c31..e7285314 100644 --- a/src/main/java/electrosphere/game/server/terrain/manager/ServerTerrainManager.java +++ b/src/main/java/electrosphere/game/server/terrain/manager/ServerTerrainManager.java @@ -138,13 +138,13 @@ public class ServerTerrainManager { // } // } - public float getHeightAtPosition(float x, float y){ + public double getHeightAtPosition(double x, double y){ //get chunk coordinate space of input x,y int chunkX = (int)Math.floor(x / dynamicInterpolationRatio); int chunkY = (int)Math.floor(y / dynamicInterpolationRatio); //get local coordinate space of input x,y - float localX = x - chunkX * dynamicInterpolationRatio; - float localY = y - chunkY * dynamicInterpolationRatio; + double localX = x - chunkX * dynamicInterpolationRatio; + double localY = y - chunkY * dynamicInterpolationRatio; //get chunk elevation map float[][] chunkElevationMap = getChunk(chunkX,chunkY).heightMap; //floored variants of local values @@ -165,7 +165,7 @@ public class ServerTerrainManager { float elevation01 = chunkElevationMap[(int)localX+0][(int)localY+1]; float elevation11 = chunkElevationMap[(int)localX+1][(int)localY+1]; - float rVal = + double rVal = (1-(localX-localXf))*(1-(localY-localYf)) * elevation00 + ( (localX-localXf))*(1-(localY-localYf)) * elevation10 + (1-(localX-localXf))*( (localY-localYf)) * elevation01 + diff --git a/src/main/java/electrosphere/game/server/world/ServerWorldData.java b/src/main/java/electrosphere/game/server/world/ServerWorldData.java index 580ac0ae..c16fa89d 100644 --- a/src/main/java/electrosphere/game/server/world/ServerWorldData.java +++ b/src/main/java/electrosphere/game/server/world/ServerWorldData.java @@ -92,11 +92,11 @@ public class ServerWorldData { return randomDampener; } - public int convertRealToChunkSpace(float real){ + public int convertRealToChunkSpace(double real){ return (int)Math.floor(real / dynamicInterpolationRatio); } - public float getRelativeLocation(float real, int world){ + public double getRelativeLocation(double real, int world){ return real - (world * dynamicInterpolationRatio); } diff --git a/src/main/java/electrosphere/game/server/world/datacell/DataCellManager.java b/src/main/java/electrosphere/game/server/world/datacell/DataCellManager.java index ca1b69d7..5742929d 100644 --- a/src/main/java/electrosphere/game/server/world/datacell/DataCellManager.java +++ b/src/main/java/electrosphere/game/server/world/datacell/DataCellManager.java @@ -10,6 +10,7 @@ import electrosphere.net.parser.net.message.NetworkMessage; import electrosphere.net.server.Player; import java.util.LinkedList; import java.util.List; +import org.joml.Vector3d; import org.joml.Vector3f; /** @@ -115,7 +116,7 @@ public class DataCellManager { for(Player player : playerList){ Entity playerEntity = player.getPlayerEntity(); if(playerEntity != null){ - Vector3f position = EntityUtils.getPosition(playerEntity); + Vector3d position = EntityUtils.getPosition(playerEntity); int currentWorldX = Globals.serverWorldData.convertRealToChunkSpace(position.x); int currentWorldY = Globals.serverWorldData.convertRealToChunkSpace(position.z); if(currentWorldX != player.getWorldX() || currentWorldY != player.getWorldY()){ diff --git a/src/main/java/electrosphere/game/server/world/datacell/EnvironmentGenerator.java b/src/main/java/electrosphere/game/server/world/datacell/EnvironmentGenerator.java index ed61c9cc..640b588c 100644 --- a/src/main/java/electrosphere/game/server/world/datacell/EnvironmentGenerator.java +++ b/src/main/java/electrosphere/game/server/world/datacell/EnvironmentGenerator.java @@ -23,9 +23,9 @@ public class EnvironmentGenerator { for(int i = 0; i < targetNum; i++){ Entity newTree = FoliageUtils.spawnBasicFoliage("FallOak1"); entityList.add(newTree); - float posX = worldX * Globals.serverWorldData.getDynamicInterpolationRatio() + (float)(rand.nextFloat() * Globals.serverWorldData.getDynamicInterpolationRatio()); - float posZ = worldY * Globals.serverWorldData.getDynamicInterpolationRatio() + (float)(rand.nextFloat() * Globals.serverWorldData.getDynamicInterpolationRatio()); - float posY = Globals.serverTerrainManager.getHeightAtPosition(posX, posZ); + double posX = worldX * Globals.serverWorldData.getDynamicInterpolationRatio() + (float)(rand.nextFloat() * Globals.serverWorldData.getDynamicInterpolationRatio()); + double posZ = worldY * Globals.serverWorldData.getDynamicInterpolationRatio() + (float)(rand.nextFloat() * Globals.serverWorldData.getDynamicInterpolationRatio()); + double posY = Globals.serverTerrainManager.getHeightAtPosition(posX, posZ); // System.out.println("Spawning tree at: " + posX + "," + posY + "," + posZ); // CollisionObjUtils.positionCharacter(newTree, new Vector3f(posX,posY,posZ)); EntityUtils.getPosition(newTree).set(posX,posY,posZ); diff --git a/src/main/java/electrosphere/main/Main.java b/src/main/java/electrosphere/main/Main.java index d1b41566..0cd96b05 100644 --- a/src/main/java/electrosphere/main/Main.java +++ b/src/main/java/electrosphere/main/Main.java @@ -40,6 +40,7 @@ import java.nio.file.StandardOpenOption; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; +import org.joml.Vector3d; @@ -135,7 +136,8 @@ public class Main { /// Vector3f cameraRotationVector = new Vector3f(); - + double posX = -1; + double posZ = 0; //main loop while (running) { @@ -175,11 +177,11 @@ public class Main { } //cell tracking values - Vector3f oldPlayerCharacterPosition = new Vector3f(); + Vector3d oldPlayerCharacterPosition = new Vector3d(); if(Globals.playerCharacter != null){ - oldPlayerCharacterPosition = new Vector3f(EntityUtils.getPosition(Globals.playerCharacter)); + oldPlayerCharacterPosition = new Vector3d(EntityUtils.getPosition(Globals.playerCharacter)); } - Vector3f newPlayerCharacterPosition = oldPlayerCharacterPosition; + Vector3d newPlayerCharacterPosition = oldPlayerCharacterPosition; //Poll controls @@ -223,8 +225,12 @@ public class Main { updateMouseVariables(); + CameraEntityUtils.setCameraPitch(Globals.playerCamera, pitch); + CameraEntityUtils.setCameraYaw(Globals.playerCamera, yaw); + if(Globals.playerCharacter != null){ - CameraEntityUtils.setCameraCenter(Globals.playerCamera, EntityUtils.getPosition(Globals.playerCharacter)); + Vector3d charPos = EntityUtils.getPosition(Globals.playerCharacter); + CameraEntityUtils.setCameraCenter(Globals.playerCamera, new Vector3f((float)charPos.x,(float)charPos.y,(float)charPos.z)); } float cam_Player_Orbit_Magnitude = 5f; @@ -235,6 +241,20 @@ public class Main { CameraEntityUtils.setCameraEye(Globals.playerCamera, cameraRotationVector); +// if(Globals.playerCharacter != null){ +// Vector3f playerPos = EntityUtils.getPosition(Globals.playerCharacter); +// if(posX == -1 && playerPos.x > 100){ +// posX = playerPos.x; +// posZ = playerPos.z; +// } +// posX = posX - (cameraRotationVector.x * 0.01); +// posZ = posZ - (cameraRotationVector.z * 0.01); +// Vector3f moveVec = new Vector3f(-cameraRotationVector.x,0,-cameraRotationVector.z); +// Quaternionf playerRot = new Quaternionf().rotationTo(new Vector3f(0,0,1), moveVec); +// EntityUtils.getRotation(Globals.playerCharacter).set(playerRot); +// EntityUtils.getPosition(Globals.playerCharacter).set((float)posX,playerPos.y,(float)posZ); +// } + Globals.viewMatrix = CameraEntityUtils.getCameraViewMatrix(Globals.playerCamera); } diff --git a/src/main/java/electrosphere/renderer/Light/LightEntityUtils.java b/src/main/java/electrosphere/renderer/Light/LightEntityUtils.java index fc62a5b1..86d45cf4 100644 --- a/src/main/java/electrosphere/renderer/Light/LightEntityUtils.java +++ b/src/main/java/electrosphere/renderer/Light/LightEntityUtils.java @@ -3,6 +3,7 @@ package electrosphere.renderer.light; import electrosphere.entity.Entity; import electrosphere.entity.EntityDataStrings; import electrosphere.main.Globals; +import org.joml.Vector3d; import org.joml.Vector3f; /** @@ -16,7 +17,7 @@ public class LightEntityUtils { Globals.entityManager.registerEntity(rVal); Globals.entityManager.registerLightEntity(rVal); rVal.putData(EntityDataStrings.DATA_STRING_LIGHT_TYPE, EntityDataStrings.DATA_STRING_LIGHT_TYPE_DIRECTIONAL); - rVal.putData(EntityDataStrings.DATA_STRING_POSITION, position); + rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3d(position.x,position.y,position.z)); rVal.putData(EntityDataStrings.DATA_STRING_LIGHT_AMBIENT, ambient); rVal.putData(EntityDataStrings.DATA_STRING_LIGHT_DIFFUSE, diffuse); rVal.putData(EntityDataStrings.DATA_STRING_LIGHT_SPECULAR, specular); @@ -28,7 +29,7 @@ public class LightEntityUtils { Globals.entityManager.registerEntity(rVal); Globals.entityManager.registerLightEntity(rVal); rVal.putData(EntityDataStrings.DATA_STRING_LIGHT_TYPE, EntityDataStrings.DATA_STRING_LIGHT_TYPE_POINT); - rVal.putData(EntityDataStrings.DATA_STRING_POSITION, position); + rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3d(position.x,position.y,position.z)); rVal.putData(EntityDataStrings.DATA_STRING_LIGHT_AMBIENT, ambient); rVal.putData(EntityDataStrings.DATA_STRING_LIGHT_DIFFUSE, diffuse); rVal.putData(EntityDataStrings.DATA_STRING_LIGHT_SPECULAR, specular); diff --git a/src/main/java/electrosphere/renderer/RenderingEngine.java b/src/main/java/electrosphere/renderer/RenderingEngine.java index c2629dc7..f171a30e 100644 --- a/src/main/java/electrosphere/renderer/RenderingEngine.java +++ b/src/main/java/electrosphere/renderer/RenderingEngine.java @@ -19,6 +19,7 @@ import electrosphere.renderer.texture.Texture; import electrosphere.renderer.ui.Widget; import org.joml.Matrix4f; import org.joml.Quaternionf; +import org.joml.Vector3d; import org.joml.Vector3f; import org.lwjgl.glfw.GLFW; import static org.lwjgl.glfw.GLFW.GLFW_CONTEXT_VERSION_MAJOR; @@ -292,13 +293,15 @@ public class RenderingEngine { Vector3f cameraPos = CameraEntityUtils.getCameraCenter(Globals.playerCamera); modelTransformMatrix = new Matrix4f(); for(Entity currentEntity : Globals.entityManager.getDrawable()){ - Vector3f position = EntityUtils.getPosition(currentEntity); - if((boolean)currentEntity.getData(EntityDataStrings.DATA_STRING_DRAW) && drawPoint(cameraPos,position)){ + Vector3d position = EntityUtils.getPosition(currentEntity); + if((boolean)currentEntity.getData(EntityDataStrings.DATA_STRING_DRAW) && drawPoint(cameraPos,new Vector3f((float)position.x,(float)position.y,(float)position.z))){ //fetch actor Actor currentActor = EntityUtils.getActor(currentEntity); + //calculate camera-modified vector3f + Vector3f cameraModifiedPosition = new Vector3f((float)position.x,(float)position.y,(float)position.z).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera)); //calculate and apply model transform modelTransformMatrix.identity(); - modelTransformMatrix.translate(new Vector3f(EntityUtils.getPosition(currentEntity)).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera))); + modelTransformMatrix.translate(cameraModifiedPosition); modelTransformMatrix.rotate(EntityUtils.getRotation(currentEntity)); modelTransformMatrix.scale(EntityUtils.getScale(currentEntity)); currentActor.applyModelMatrix(modelTransformMatrix); @@ -343,8 +346,8 @@ public class RenderingEngine { Vector3f cameraPos = CameraEntityUtils.getCameraCenter(Globals.playerCamera); modelTransformMatrix = new Matrix4f(); for(Entity currentEntity : Globals.entityManager.getDrawable()){ - Vector3f position = EntityUtils.getPosition(currentEntity); - if((boolean)currentEntity.getData(EntityDataStrings.DATA_STRING_DRAW) && drawPoint(cameraPos,position)){ + Vector3d position = EntityUtils.getPosition(currentEntity); + if((boolean)currentEntity.getData(EntityDataStrings.DATA_STRING_DRAW) && drawPoint(cameraPos,new Vector3f((float)position.x,(float)position.y,(float)position.z))){ //fetch actor Actor currentActor = EntityUtils.getActor(currentEntity); currentActor.incrementAnimationTime(0.001); @@ -353,9 +356,11 @@ public class RenderingEngine { // if(currentActor.getCurrentAnimation() != null){ // currentActor.incrementAnimationTime(deltaTime * 500); // } + //calculate camera-modified vector3f + Vector3f cameraModifiedPosition = new Vector3f((float)position.x,(float)position.y,(float)position.z).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera)); //calculate and apply model transform modelTransformMatrix.identity(); - modelTransformMatrix.translate(new Vector3f(EntityUtils.getPosition(currentEntity)).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera))); + modelTransformMatrix.translate(cameraModifiedPosition); modelTransformMatrix.rotate(EntityUtils.getRotation(currentEntity)); modelTransformMatrix.scale(EntityUtils.getScale(currentEntity)); currentActor.applyModelMatrix(modelTransformMatrix); @@ -384,9 +389,11 @@ public class RenderingEngine { if(data.isActive()){ if(data.getType().equals(EntityDataStrings.COLLISION_ENTITY_DATA_TYPE_HURT)){ if((hitboxModel = Globals.assetManager.fetchModel("Models/unitsphere.fbx")) != null){ - Vector3f position = EntityUtils.getPosition(currentHitbox); + Vector3d position = EntityUtils.getPosition(currentHitbox); + //calculate camera-modified vector3f + Vector3f cameraModifiedPosition = new Vector3f((float)position.x,(float)position.y,(float)position.z).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera)); modelTransformMatrix.identity(); - modelTransformMatrix.translate(new Vector3f(position).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera))); + modelTransformMatrix.translate(cameraModifiedPosition); // modelTransformMatrix.translate(-0.25f, 0.0f, 0.5f); //center sphere modelTransformMatrix.scale(data.getRadius() * 2); hitboxModel.modelMatrix = modelTransformMatrix; @@ -394,9 +401,11 @@ public class RenderingEngine { } } else if(data.getType().equals(EntityDataStrings.COLLISION_ENTITY_DATA_TYPE_HIT)){ if((hitboxModel = Globals.assetManager.fetchModel("Models/unitsphere_1.fbx")) != null){ - Vector3f position = EntityUtils.getPosition(currentHitbox); + Vector3d position = EntityUtils.getPosition(currentHitbox); + //calculate camera-modified vector3f + Vector3f cameraModifiedPosition = new Vector3f((float)position.x,(float)position.y,(float)position.z).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera)); modelTransformMatrix.identity(); - modelTransformMatrix.translate(new Vector3f(position).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera))); + modelTransformMatrix.translate(cameraModifiedPosition); // modelTransformMatrix.translate(-0.25f, 0.0f, 0.5f); //center sphere modelTransformMatrix.scale(data.getRadius() * 2); hitboxModel.modelMatrix = modelTransformMatrix; @@ -405,9 +414,9 @@ public class RenderingEngine { } } else { if((hitboxModel = Globals.assetManager.fetchModel("Models/unitsphere_grey.fbx")) != null){ - Vector3f position = EntityUtils.getPosition(currentHitbox); + Vector3d position = EntityUtils.getPosition(currentHitbox); modelTransformMatrix.identity(); - modelTransformMatrix.translate(new Vector3f(position).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera))); + modelTransformMatrix.translate(new Vector3f((float)position.x,(float)position.y,(float)position.z).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera))); // modelTransformMatrix.translate(-0.25f, 0.0f, 0.5f); //center sphere modelTransformMatrix.scale(data.getRadius() * 2); hitboxModel.modelMatrix = modelTransformMatrix; @@ -426,9 +435,11 @@ public class RenderingEngine { switch(template.getType()){ case "CYLINDER": if((physicsGraphicsModel = Globals.assetManager.fetchModel("Models/unitcylinder.fbx")) != null){ - Vector3f position = EntityUtils.getPosition(physicsEntity); + Vector3d position = EntityUtils.getPosition(physicsEntity); + //calculate camera-modified vector3f + Vector3f cameraModifiedPosition = new Vector3f((float)position.x,(float)position.y,(float)position.z).add(template.getOffsetX(),template.getOffsetY(),template.getOffsetZ()).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera)); modelTransformMatrix.identity(); - modelTransformMatrix.translate(new Vector3f(position).add(template.getOffsetX(),template.getOffsetY(),template.getOffsetZ()).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera))); + modelTransformMatrix.translate(cameraModifiedPosition); // modelTransformMatrix.translate(template.getOffsetX(),template.getOffsetY(),template.getOffsetZ()); //center sphere modelTransformMatrix.scale(template.getDimension1(),template.getDimension2(),template.getDimension3()); physicsGraphicsModel.modelMatrix = modelTransformMatrix; @@ -442,11 +453,13 @@ public class RenderingEngine { if((boolean)physicsEntity.getData(EntityDataStrings.DATA_STRING_DRAW)){ if(physicsEntity.getDataKeys().contains(EntityDataStrings.COLLISION_ENTITY_TYPE_PLANE)){ if((physicsGraphicsModel = Globals.assetManager.fetchModel("Models/unitplane.fbx")) != null){ - Vector3f position = EntityUtils.getPosition(physicsEntity); + Vector3d position = EntityUtils.getPosition(physicsEntity); Vector3f scale = EntityUtils.getScale(physicsEntity); Quaternionf rotation = EntityUtils.getRotation(physicsEntity); + //calculate camera-modified vector3f + Vector3f cameraModifiedPosition = new Vector3f((float)position.x,(float)position.y,(float)position.z).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera)); modelTransformMatrix.identity(); - modelTransformMatrix.translate(new Vector3f(position).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera))); + modelTransformMatrix.translate(cameraModifiedPosition); modelTransformMatrix.rotate(rotation); // modelTransformMatrix.translate(template.getOffsetX(),template.getOffsetY(),template.getOffsetZ()); //center sphere modelTransformMatrix.scale(scale); @@ -455,11 +468,13 @@ public class RenderingEngine { } } else if(physicsEntity.getDataKeys().contains(EntityDataStrings.COLLISION_ENTITY_TYPE_CUBE)){ if((physicsGraphicsModel = Globals.assetManager.fetchModel("Models/unitcube.fbx")) != null){ - Vector3f position = EntityUtils.getPosition(physicsEntity); + Vector3d position = EntityUtils.getPosition(physicsEntity); Vector3f scale = EntityUtils.getScale(physicsEntity); Quaternionf rotation = EntityUtils.getRotation(physicsEntity); + //calculate camera-modified vector3f + Vector3f cameraModifiedPosition = new Vector3f((float)position.x,(float)position.y,(float)position.z).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera)); modelTransformMatrix.identity(); - modelTransformMatrix.translate(new Vector3f(position).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera))); + modelTransformMatrix.translate(cameraModifiedPosition); modelTransformMatrix.rotate(rotation); // modelTransformMatrix.translate(template.getOffsetX(),template.getOffsetY(),template.getOffsetZ()); //center sphere modelTransformMatrix.scale(scale); diff --git a/src/main/java/electrosphere/renderer/light/LightEntityUtils.java b/src/main/java/electrosphere/renderer/light/LightEntityUtils.java index fc62a5b1..86d45cf4 100644 --- a/src/main/java/electrosphere/renderer/light/LightEntityUtils.java +++ b/src/main/java/electrosphere/renderer/light/LightEntityUtils.java @@ -3,6 +3,7 @@ package electrosphere.renderer.light; import electrosphere.entity.Entity; import electrosphere.entity.EntityDataStrings; import electrosphere.main.Globals; +import org.joml.Vector3d; import org.joml.Vector3f; /** @@ -16,7 +17,7 @@ public class LightEntityUtils { Globals.entityManager.registerEntity(rVal); Globals.entityManager.registerLightEntity(rVal); rVal.putData(EntityDataStrings.DATA_STRING_LIGHT_TYPE, EntityDataStrings.DATA_STRING_LIGHT_TYPE_DIRECTIONAL); - rVal.putData(EntityDataStrings.DATA_STRING_POSITION, position); + rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3d(position.x,position.y,position.z)); rVal.putData(EntityDataStrings.DATA_STRING_LIGHT_AMBIENT, ambient); rVal.putData(EntityDataStrings.DATA_STRING_LIGHT_DIFFUSE, diffuse); rVal.putData(EntityDataStrings.DATA_STRING_LIGHT_SPECULAR, specular); @@ -28,7 +29,7 @@ public class LightEntityUtils { Globals.entityManager.registerEntity(rVal); Globals.entityManager.registerLightEntity(rVal); rVal.putData(EntityDataStrings.DATA_STRING_LIGHT_TYPE, EntityDataStrings.DATA_STRING_LIGHT_TYPE_POINT); - rVal.putData(EntityDataStrings.DATA_STRING_POSITION, position); + rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3d(position.x,position.y,position.z)); rVal.putData(EntityDataStrings.DATA_STRING_LIGHT_AMBIENT, ambient); rVal.putData(EntityDataStrings.DATA_STRING_LIGHT_DIFFUSE, diffuse); rVal.putData(EntityDataStrings.DATA_STRING_LIGHT_SPECULAR, specular);