Convert entity position to double from float

This commit is contained in:
austin 2021-08-08 01:14:41 -04:00
parent e39af4a78c
commit 236eb59274
32 changed files with 242 additions and 158 deletions

View File

@ -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);
}

View File

@ -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);

View File

@ -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";
/*

View File

@ -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){

View File

@ -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);

View File

@ -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,

View File

@ -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;

View File

@ -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){

View File

@ -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,

View File

@ -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

View File

@ -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);

View File

@ -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");

View File

@ -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);

View File

@ -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(

View File

@ -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();

View File

@ -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);
}
}

View File

@ -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();

View File

@ -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 +

View File

@ -75,7 +75,7 @@ public class ClientWorldData {
}
public int convertRealToChunkSpace(float real){
public int convertRealToChunkSpace(double real){
return (int)Math.floor(real / dynamicInterpolationRatio);
}

View File

@ -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;
}

View File

@ -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 {

View File

@ -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);

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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 +

View File

@ -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);
}

View File

@ -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()){

View File

@ -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);

View File

@ -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);
}

View File

@ -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);

View File

@ -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);

View File

@ -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);