dbody entity key refactor
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
This commit is contained in:
parent
3082dde1b1
commit
5fce9bc292
@ -11,6 +11,7 @@ import org.joml.Vector3i;
|
||||
import electrosphere.client.terrain.cache.ChunkData;
|
||||
import electrosphere.client.terrain.cells.DrawCell.DrawCellFace;
|
||||
import electrosphere.client.terrain.manager.ClientTerrainManager;
|
||||
import electrosphere.collision.PhysicsEntityUtils;
|
||||
import electrosphere.engine.Globals;
|
||||
import electrosphere.entity.EntityUtils;
|
||||
import electrosphere.net.parser.net.message.TerrainMessage;
|
||||
@ -76,7 +77,7 @@ public class DrawCellManager {
|
||||
|
||||
//the real-space radius for which we will construct draw cells inside of
|
||||
//ie, we check if the draw cell's entity would be inside this radius. If it would, create the draw cell, otherwise don't
|
||||
double drawFullModelRadius = 50;
|
||||
double drawFullModelRadius = 70;
|
||||
|
||||
//the radius we'll draw LODed chunks for
|
||||
double drawLODRadius = drawFullModelRadius + ServerTerrainChunk.CHUNK_DIMENSION * (2*2 + 4*4 + 8*8 + 16*16);
|
||||
@ -501,7 +502,7 @@ public class DrawCellManager {
|
||||
return false;
|
||||
}
|
||||
DrawCell cell = this.keyCellMap.get(key);
|
||||
return cell.modelEntity != null;
|
||||
return cell.modelEntity != null && PhysicsEntityUtils.getDBody(cell.modelEntity) != null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -623,8 +623,8 @@ public class CollisionEngine {
|
||||
*/
|
||||
public void destroyPhysics(Entity e){
|
||||
//make uncollidable
|
||||
if(e.containsKey(EntityDataStrings.PHYSICS_COLLISION_BODY)){
|
||||
DBody rigidBody = (DBody)e.getData(EntityDataStrings.PHYSICS_COLLISION_BODY);
|
||||
if(PhysicsEntityUtils.containsDBody(e)){
|
||||
DBody rigidBody = PhysicsEntityUtils.getDBody(e);
|
||||
deregisterCollisionObject(rigidBody,PhysicsEntityUtils.getCollidable(e));
|
||||
e.removeData(EntityDataStrings.PHYSICS_COLLISION_BODY);
|
||||
deregisterPhysicsObject(rigidBody);
|
||||
|
||||
@ -50,7 +50,7 @@ public class PhysicsEntityUtils {
|
||||
);
|
||||
collidable = new Collidable(rVal, Collidable.TYPE_CREATURE, true);
|
||||
ClientCollidableTree tree = new ClientCollidableTree(rVal,collidable,rigidBody);
|
||||
rVal.putData(EntityDataStrings.PHYSICS_COLLISION_BODY, rigidBody);
|
||||
PhysicsEntityUtils.setDBody(rVal,rigidBody);
|
||||
Matrix4d offsetTransform = new Matrix4d().translationRotate(
|
||||
physicsTemplate.getOffsetX(), physicsTemplate.getOffsetY(), physicsTemplate.getOffsetZ(), //translate
|
||||
physicsTemplate.getRotX(), physicsTemplate.getRotY(), physicsTemplate.getRotZ(), physicsTemplate.getRotW() //rotate
|
||||
@ -76,7 +76,7 @@ public class PhysicsEntityUtils {
|
||||
);
|
||||
collidable = new Collidable(rVal, Collidable.TYPE_CREATURE, true);
|
||||
ClientCollidableTree tree = new ClientCollidableTree(rVal,collidable,rigidBody);
|
||||
rVal.putData(EntityDataStrings.PHYSICS_COLLISION_BODY, rigidBody);
|
||||
PhysicsEntityUtils.setDBody(rVal,rigidBody);
|
||||
Matrix4d offsetTransform = new Matrix4d().translationRotateScale(
|
||||
physicsTemplate.getOffsetX(), physicsTemplate.getOffsetY(), physicsTemplate.getOffsetZ(), //translate
|
||||
physicsTemplate.getRotX(), physicsTemplate.getRotY(), physicsTemplate.getRotZ(), physicsTemplate.getRotW(), //rotate
|
||||
@ -128,7 +128,7 @@ public class PhysicsEntityUtils {
|
||||
);
|
||||
collidable = new Collidable(rVal, Collidable.TYPE_CREATURE, true);
|
||||
ServerCollidableTree tree = new ServerCollidableTree(rVal,collidable,rigidBody);
|
||||
rVal.putData(EntityDataStrings.PHYSICS_COLLISION_BODY, rigidBody);
|
||||
PhysicsEntityUtils.setDBody(rVal,rigidBody);
|
||||
Matrix4d offsetTransform = new Matrix4d().translationRotateScale(
|
||||
physicsTemplate.getOffsetX(), physicsTemplate.getOffsetY(), physicsTemplate.getOffsetZ(), //translate
|
||||
physicsTemplate.getRotX(), physicsTemplate.getRotY(), physicsTemplate.getRotZ(), physicsTemplate.getRotW(), //rotate
|
||||
@ -151,7 +151,7 @@ public class PhysicsEntityUtils {
|
||||
rigidBody = CollisionBodyCreation.createCubeBody(realm.getCollisionEngine(),new Vector3d(physicsTemplate.getDimension1(),physicsTemplate.getDimension2(),physicsTemplate.getDimension3()),Collidable.TYPE_CREATURE_BIT);
|
||||
collidable = new Collidable(rVal, Collidable.TYPE_CREATURE, true);
|
||||
ServerCollidableTree tree = new ServerCollidableTree(rVal,collidable,rigidBody);
|
||||
rVal.putData(EntityDataStrings.PHYSICS_COLLISION_BODY, rigidBody);
|
||||
PhysicsEntityUtils.setDBody(rVal,rigidBody);
|
||||
Matrix4d offsetTransform = new Matrix4d().translationRotateScale(
|
||||
physicsTemplate.getOffsetX(), physicsTemplate.getOffsetY(), physicsTemplate.getOffsetZ(), //translate
|
||||
physicsTemplate.getRotX(), physicsTemplate.getRotY(), physicsTemplate.getRotZ(), physicsTemplate.getRotW(), //rotate
|
||||
@ -248,7 +248,7 @@ public class PhysicsEntityUtils {
|
||||
DBody body = collisionEngine.createDBody(triMesh);
|
||||
|
||||
Globals.clientSceneWrapper.getCollisionEngine().registerCollisionObject(body, new Collidable(terrain,Collidable.TYPE_TERRAIN, false));
|
||||
terrain.putData(EntityDataStrings.PHYSICS_COLLISION_BODY, body);
|
||||
PhysicsEntityUtils.setDBody(terrain,body);
|
||||
|
||||
return body;
|
||||
}
|
||||
@ -267,7 +267,7 @@ public class PhysicsEntityUtils {
|
||||
|
||||
|
||||
Globals.clientSceneWrapper.getCollisionEngine().registerCollisionObject(terrainBody, new Collidable(terrain,Collidable.TYPE_TERRAIN, false));
|
||||
terrain.putData(EntityDataStrings.PHYSICS_COLLISION_BODY, terrainBody);
|
||||
PhysicsEntityUtils.setDBody(terrain,terrainBody);
|
||||
|
||||
return terrainBody;
|
||||
}
|
||||
@ -286,7 +286,7 @@ public class PhysicsEntityUtils {
|
||||
CollisionBodyCreation.setGravityMode(terrainRealm.getCollisionEngine(), terrainBody, false);
|
||||
|
||||
terrainRealm.getCollisionEngine().registerCollisionObject(terrainBody, new Collidable(terrain,Collidable.TYPE_TERRAIN, false));
|
||||
terrain.putData(EntityDataStrings.PHYSICS_COLLISION_BODY, terrainBody);
|
||||
PhysicsEntityUtils.setDBody(terrain,terrainBody);
|
||||
|
||||
return terrainBody;
|
||||
}
|
||||
@ -300,6 +300,24 @@ public class PhysicsEntityUtils {
|
||||
return (Matrix4d) entity.getData(EntityDataStrings.PHYSICS_COLLISION_BODY_TRANSFORM);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the entity contains a dbody
|
||||
* @param entity the entity
|
||||
* @return true if contains, false otherwise
|
||||
*/
|
||||
public static boolean containsDBody(Entity entity){
|
||||
return entity.containsKey(EntityDataStrings.PHYSICS_COLLISION_BODY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the dbody on the entity
|
||||
* @param entity The entity
|
||||
* @param body The body
|
||||
*/
|
||||
public static void setDBody(Entity entity, DBody body){
|
||||
entity.putData(EntityDataStrings.PHYSICS_COLLISION_BODY, body);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the DBody attached to an entity
|
||||
* @param entity the entity
|
||||
|
||||
@ -6,6 +6,7 @@ import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import electrosphere.collision.PhysicsEntityUtils;
|
||||
import electrosphere.engine.Globals;
|
||||
import electrosphere.entity.Entity;
|
||||
import electrosphere.entity.EntityCreationUtils;
|
||||
@ -151,7 +152,7 @@ public class ClientEquipState implements BehaviorTree {
|
||||
);
|
||||
}
|
||||
//make uncollidable
|
||||
if(toEquip.containsKey(EntityDataStrings.PHYSICS_COLLISION_BODY) && toEquip.containsKey(EntityDataStrings.PHYSICS_COLLIDABLE)){
|
||||
if(PhysicsEntityUtils.containsDBody(toEquip) && toEquip.containsKey(EntityDataStrings.PHYSICS_COLLIDABLE)){
|
||||
Globals.clientSceneWrapper.getCollisionEngine().destroyPhysics(toEquip);
|
||||
}
|
||||
//hide toEquip actor
|
||||
@ -190,7 +191,7 @@ public class ClientEquipState implements BehaviorTree {
|
||||
AttachUtils.getEquipPointRotationOffset(point.getOffsetRotationFirstPerson())
|
||||
);
|
||||
}
|
||||
if(toEquip.containsKey(EntityDataStrings.PHYSICS_COLLISION_BODY) && toEquip.containsKey(EntityDataStrings.PHYSICS_COLLIDABLE)){
|
||||
if(PhysicsEntityUtils.containsDBody(toEquip) && toEquip.containsKey(EntityDataStrings.PHYSICS_COLLIDABLE)){
|
||||
Globals.clientSceneWrapper.getCollisionEngine().destroyPhysics(toEquip);
|
||||
}
|
||||
Globals.clientSceneWrapper.getScene().removeEntityFromTag(toEquip, EntityTags.TARGETABLE);
|
||||
|
||||
@ -10,6 +10,7 @@ import java.util.Map;
|
||||
|
||||
import org.joml.Vector3d;
|
||||
|
||||
import electrosphere.collision.PhysicsEntityUtils;
|
||||
import electrosphere.engine.Globals;
|
||||
import electrosphere.entity.Entity;
|
||||
import electrosphere.entity.EntityDataStrings;
|
||||
@ -125,7 +126,7 @@ public class ServerEquipState implements BehaviorTree {
|
||||
AttachUtils.getEquipPointRotationOffset(point.getOffsetRotationThirdPerson())
|
||||
);
|
||||
//make uncollidable
|
||||
if(inWorldItem.containsKey(EntityDataStrings.PHYSICS_COLLISION_BODY) && inWorldItem.containsKey(EntityDataStrings.PHYSICS_COLLIDABLE)){
|
||||
if(PhysicsEntityUtils.containsDBody(inWorldItem) && inWorldItem.containsKey(EntityDataStrings.PHYSICS_COLLIDABLE)){
|
||||
Realm inWorldRealm = Globals.realmManager.getEntityRealm(inWorldItem);
|
||||
inWorldRealm.getCollisionEngine().destroyPhysics(inWorldItem);
|
||||
}
|
||||
@ -146,7 +147,7 @@ public class ServerEquipState implements BehaviorTree {
|
||||
AttachUtils.getEquipPointVectorOffset(point.getOffsetVectorThirdPerson()),
|
||||
AttachUtils.getEquipPointRotationOffset(point.getOffsetRotationThirdPerson())
|
||||
);
|
||||
if(inWorldItem.containsKey(EntityDataStrings.PHYSICS_COLLISION_BODY) && inWorldItem.containsKey(EntityDataStrings.PHYSICS_COLLIDABLE)){
|
||||
if(PhysicsEntityUtils.containsDBody(inWorldItem) && inWorldItem.containsKey(EntityDataStrings.PHYSICS_COLLIDABLE)){
|
||||
Realm inWorldRealm = Globals.realmManager.getEntityRealm(inWorldItem);
|
||||
inWorldRealm.getCollisionEngine().destroyPhysics(inWorldItem);
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import org.ode4j.ode.DBody;
|
||||
|
||||
import electrosphere.collision.CollisionBodyCreation;
|
||||
import electrosphere.collision.CollisionEngine;
|
||||
import electrosphere.collision.PhysicsEntityUtils;
|
||||
import electrosphere.collision.PhysicsUtils;
|
||||
import electrosphere.collision.collidable.Collidable;
|
||||
import electrosphere.engine.Globals;
|
||||
@ -237,7 +238,7 @@ public class CollisionObjUtils {
|
||||
Collidable collidable = new Collidable(entity, collidableType, true);
|
||||
Globals.clientSceneWrapper.getCollisionEngine().registerCollisionObject(collisionObject, collidable);
|
||||
|
||||
entity.putData(EntityDataStrings.PHYSICS_COLLISION_BODY, collisionObject);
|
||||
PhysicsEntityUtils.setDBody(entity, collisionObject);
|
||||
|
||||
//update world transform of collision object
|
||||
clientPositionCharacter(entity,position,rotation);
|
||||
@ -261,7 +262,7 @@ public class CollisionObjUtils {
|
||||
Realm realm = Globals.realmManager.getEntityRealm(entity);
|
||||
realm.getCollisionEngine().registerCollisionObject(collisionObject, collidable);
|
||||
|
||||
entity.putData(EntityDataStrings.PHYSICS_COLLISION_BODY, collisionObject);
|
||||
PhysicsEntityUtils.setDBody(entity, collisionObject);
|
||||
|
||||
//update world transform of collision object
|
||||
serverPositionCharacter(entity,position);
|
||||
@ -271,14 +272,10 @@ public class CollisionObjUtils {
|
||||
entity.putData(EntityDataStrings.PHYSICS_MASS, mass);
|
||||
}
|
||||
|
||||
public static DBody getCollisionBody(Entity e){
|
||||
return (DBody)e.getData(EntityDataStrings.PHYSICS_COLLISION_BODY);
|
||||
}
|
||||
|
||||
public static void serverPositionCharacter(Entity e, Vector3d position){
|
||||
EntityUtils.getPosition(e).set(position);
|
||||
Quaterniond rotation = EntityUtils.getRotation(e);
|
||||
DBody body = getCollisionBody(e);
|
||||
DBody body = PhysicsEntityUtils.getDBody(e);
|
||||
CollisionEngine collisionEngine = Globals.realmManager.getEntityRealm(e).getCollisionEngine();
|
||||
if(body != null){
|
||||
PhysicsUtils.setRigidBodyTransform(collisionEngine, position, rotation, body);
|
||||
@ -287,7 +284,7 @@ public class CollisionObjUtils {
|
||||
|
||||
public static void clientPositionCharacter(Entity e, Vector3d position, Quaterniond rotation){
|
||||
EntityUtils.getPosition(e).set(position);
|
||||
DBody body = getCollisionBody(e);
|
||||
DBody body = PhysicsEntityUtils.getDBody(e);
|
||||
if(body != null){
|
||||
PhysicsUtils.setRigidBodyTransform(Globals.clientSceneWrapper.getCollisionEngine(), position, rotation, body);
|
||||
}
|
||||
|
||||
@ -239,7 +239,7 @@ public class CreatureUtils {
|
||||
} break;
|
||||
case "GRAVITY":
|
||||
Collidable collidable = (Collidable)rVal.getData(EntityDataStrings.PHYSICS_COLLIDABLE);
|
||||
DBody collisionObject = (DBody)rVal.getData(EntityDataStrings.PHYSICS_COLLISION_BODY);
|
||||
DBody collisionObject = PhysicsEntityUtils.getDBody(rVal);
|
||||
ClientGravityTree.attachTree(rVal, collidable, collisionObject, 30);
|
||||
rVal.putData(EntityDataStrings.GRAVITY_ENTITY, true);
|
||||
break;
|
||||
@ -527,7 +527,7 @@ public class CreatureUtils {
|
||||
} break;
|
||||
case "GRAVITY": {
|
||||
Collidable collidable = (Collidable)rVal.getData(EntityDataStrings.PHYSICS_COLLIDABLE);
|
||||
DBody collisionObject = (DBody)rVal.getData(EntityDataStrings.PHYSICS_COLLISION_BODY);
|
||||
DBody collisionObject = PhysicsEntityUtils.getDBody(rVal);
|
||||
ServerGravityTree.attachTree(rVal, collidable, collisionObject, 30);
|
||||
rVal.putData(EntityDataStrings.GRAVITY_ENTITY, true);
|
||||
} break;
|
||||
|
||||
@ -68,7 +68,7 @@ public class ItemUtils {
|
||||
switch(token){
|
||||
case "GRAVITY":
|
||||
Collidable collidable = (Collidable)rVal.getData(EntityDataStrings.PHYSICS_COLLIDABLE);
|
||||
DBody collisionObject = (DBody)rVal.getData(EntityDataStrings.PHYSICS_COLLISION_BODY);
|
||||
DBody collisionObject = PhysicsEntityUtils.getDBody(rVal);
|
||||
ClientGravityTree.attachTree(rVal, collidable, collisionObject, 30);
|
||||
rVal.putData(EntityDataStrings.GRAVITY_ENTITY, true);
|
||||
break;
|
||||
@ -147,7 +147,7 @@ public class ItemUtils {
|
||||
switch(token){
|
||||
case "GRAVITY":
|
||||
Collidable collidable = (Collidable)rVal.getData(EntityDataStrings.PHYSICS_COLLIDABLE);
|
||||
DBody collisionObject = (DBody)rVal.getData(EntityDataStrings.PHYSICS_COLLISION_BODY);
|
||||
DBody collisionObject = PhysicsEntityUtils.getDBody(rVal);
|
||||
ServerGravityTree.attachTree(rVal, collidable, collisionObject, 30);
|
||||
rVal.putData(EntityDataStrings.GRAVITY_ENTITY, true);
|
||||
break;
|
||||
@ -449,7 +449,7 @@ public class ItemUtils {
|
||||
public static void clientDestroyInWorldItem(Entity item){
|
||||
if(isItem(item)){
|
||||
//destroy physics
|
||||
if(item.containsKey(EntityDataStrings.PHYSICS_COLLISION_BODY) && item.containsKey(EntityDataStrings.PHYSICS_COLLIDABLE)){
|
||||
if(PhysicsEntityUtils.containsDBody(item) && item.containsKey(EntityDataStrings.PHYSICS_COLLIDABLE)){
|
||||
//destroy physics
|
||||
//this deregisters from all four & unhooks rigid bodies from the physics runtime
|
||||
Globals.clientSceneWrapper.getCollisionEngine().destroyPhysics(item);
|
||||
|
||||
@ -86,7 +86,7 @@ public class ObjectUtils {
|
||||
switch(token){
|
||||
case "GRAVITY":
|
||||
Collidable collidable = (Collidable)rVal.getData(EntityDataStrings.PHYSICS_COLLIDABLE);
|
||||
DBody collisionObject = (DBody)rVal.getData(EntityDataStrings.PHYSICS_COLLISION_BODY);
|
||||
DBody collisionObject = PhysicsEntityUtils.getDBody(rVal);
|
||||
ClientGravityTree.attachTree(rVal, collidable, collisionObject, 30);
|
||||
rVal.putData(EntityDataStrings.GRAVITY_ENTITY, true);
|
||||
break;
|
||||
@ -173,7 +173,7 @@ public class ObjectUtils {
|
||||
switch(token){
|
||||
case "GRAVITY":
|
||||
Collidable collidable = (Collidable)rVal.getData(EntityDataStrings.PHYSICS_COLLIDABLE);
|
||||
DBody collisionObject = (DBody)rVal.getData(EntityDataStrings.PHYSICS_COLLISION_BODY);
|
||||
DBody collisionObject = PhysicsEntityUtils.getDBody(rVal);
|
||||
ServerGravityTree.attachTree(rVal, collidable, collisionObject, 30);
|
||||
rVal.putData(EntityDataStrings.GRAVITY_ENTITY, true);
|
||||
break;
|
||||
|
||||
@ -17,6 +17,7 @@ import org.joml.Vector4f;
|
||||
import org.ode4j.ode.DBody;
|
||||
|
||||
import electrosphere.collision.CollisionBodyCreation;
|
||||
import electrosphere.collision.PhysicsEntityUtils;
|
||||
import electrosphere.collision.collidable.Collidable;
|
||||
import electrosphere.engine.Globals;
|
||||
import electrosphere.entity.Entity;
|
||||
@ -119,7 +120,7 @@ public class ProceduralTree {
|
||||
CollisionBodyCreation.setOffsetPosition(Globals.clientSceneWrapper.getCollisionEngine(), rigidBody, new Vector3d(0,treeModel.getPhysicsBody().getOffsetY(),0));
|
||||
CollisionBodyCreation.setKinematic(Globals.clientSceneWrapper.getCollisionEngine(), rigidBody);
|
||||
Collidable collidable = new Collidable(trunkChild, Collidable.TYPE_FOLIAGE_STATIC, true);
|
||||
trunkChild.putData(EntityDataStrings.PHYSICS_COLLISION_BODY, rigidBody);
|
||||
PhysicsEntityUtils.setDBody(trunkChild, rigidBody);
|
||||
Matrix4d offsetTransform = new Matrix4d().translationRotateScale(
|
||||
0,treeModel.getPhysicsBody().getOffsetY(),0, //translate
|
||||
0,0,0,1, //rotate
|
||||
@ -385,7 +386,7 @@ public class ProceduralTree {
|
||||
CollisionBodyCreation.setOffsetPosition(realm.getCollisionEngine(), rigidBody, new Vector3d(0,treeModel.getPhysicsBody().getOffsetY(),0));
|
||||
CollisionBodyCreation.setKinematic(realm.getCollisionEngine(), rigidBody);
|
||||
Collidable collidable = new Collidable(trunkChild, Collidable.TYPE_FOLIAGE_STATIC, true);
|
||||
trunkChild.putData(EntityDataStrings.PHYSICS_COLLISION_BODY, rigidBody);
|
||||
PhysicsEntityUtils.setDBody(trunkChild, rigidBody);
|
||||
Matrix4d offsetTransform = new Matrix4d().translationRotateScale(
|
||||
0,treeModel.getPhysicsBody().getOffsetY(),0, //translate
|
||||
0,0,0,1, //rotate
|
||||
|
||||
Loading…
Reference in New Issue
Block a user