Docs + fixes

This commit is contained in:
austin 2023-11-05 14:00:39 -05:00
parent b4426c413b
commit e43ce32d70
7 changed files with 23 additions and 12 deletions

View File

@ -73,8 +73,8 @@
"physicsCutoff": 3, "physicsCutoff": 3,
"physicsBody": { "physicsBody": {
"type" : "CYLINDER", "type" : "CYLINDER",
"dimension1" : 3, "dimension1" : 1,
"dimension2" : 1, "dimension2" : 3,
"dimension3" : 1, "dimension3" : 1,
"offsetX" : 0, "offsetX" : 0,
"offsetY" : 1.5, "offsetY" : 1.5,

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

View File

@ -12,6 +12,8 @@ The big case for this engine is the main physics system. The goal is to provide
![](/docs/src/images/CollisionEngineEntityFlow.png)

View File

@ -8,6 +8,7 @@ import org.lwjgl.assimp.AIFace;
import org.lwjgl.assimp.AIMesh; import org.lwjgl.assimp.AIMesh;
import org.lwjgl.assimp.AIScene; import org.lwjgl.assimp.AIScene;
import org.lwjgl.assimp.AIVector3D; import org.lwjgl.assimp.AIVector3D;
import org.ode4j.math.DMatrix3;
import org.ode4j.ode.DBody; import org.ode4j.ode.DBody;
import org.ode4j.ode.DBox; import org.ode4j.ode.DBox;
import org.ode4j.ode.DCylinder; import org.ode4j.ode.DCylinder;
@ -21,6 +22,13 @@ import electrosphere.entity.types.terrain.TerrainChunkData;
*/ */
public class CollisionBodyCreation { public class CollisionBodyCreation {
//Matrix for correcting initial axis of eg cylinders or capsules
static final DMatrix3 AXIS_CORRECTION_MATRIX = new DMatrix3(
1.0000000, 0.0000000, 0.0000000,
0.0000000, 0.0000000, -1.0000000,
0.0000000, 1.0000000, 0.0000000
);
//The width of a plane rigid body //The width of a plane rigid body
@ -56,7 +64,9 @@ public class CollisionBodyCreation {
*/ */
public static DBody createCylinderBody(CollisionEngine collisionEngine, double radius, double length){ public static DBody createCylinderBody(CollisionEngine collisionEngine, double radius, double length){
DCylinder geom = collisionEngine.createCylinderGeom(radius,length); DCylinder geom = collisionEngine.createCylinderGeom(radius,length);
return collisionEngine.createDBody(geom); DBody returnBody = collisionEngine.createDBody(geom);
geom.setOffsetRotation(AXIS_CORRECTION_MATRIX);
return returnBody;
} }
/** /**

View File

@ -11,8 +11,7 @@ import org.joml.Vector3f;
/** /**
* * Stores the type of the collidable object as well as the impulses currently applied to it
* @author satellite
*/ */
public class Collidable { public class Collidable {

View File

@ -229,11 +229,11 @@ public class GroundMovementTree implements BehaviorTree {
// System.out.println(EntityUtils.getEntityPosition(parent)); // System.out.println(EntityUtils.getEntityPosition(parent));
// System.out.println(message.getpositionX() + " " + message.getpositionY() + " " + message.getpositionZ()); // System.out.println(message.getpositionX() + " " + message.getpositionY() + " " + message.getpositionZ());
//this should only fire on the client, we don't want the server snap updating due to client position reporting //this should only fire on the client, we don't want the server snap updating due to client position reporting
if(position.distance(message.getpositionX(),message.getpositionY(),message.getpositionZ()) > STATE_DIFFERENCE_HARD_UPDATE_THRESHOLD){ // if(position.distance(message.getpositionX(),message.getpositionY(),message.getpositionZ()) > STATE_DIFFERENCE_HARD_UPDATE_THRESHOLD){
EntityUtils.getPosition(parent).set(message.getpositionX(),message.getpositionY(),message.getpositionZ()); // EntityUtils.getPosition(parent).set(message.getpositionX(),message.getpositionY(),message.getpositionZ());
} else if(position.distance(message.getpositionX(),message.getpositionY(),message.getpositionZ()) > STATE_DIFFERENCE_SOFT_UPDATE_THRESHOLD){ // } else if(position.distance(message.getpositionX(),message.getpositionY(),message.getpositionZ()) > STATE_DIFFERENCE_SOFT_UPDATE_THRESHOLD){
EntityUtils.getPosition(parent).add(new Vector3d(message.getpositionX(),message.getpositionY(),message.getpositionZ()).mul(SOFT_UPDATE_MULTIPLIER)); // EntityUtils.getPosition(parent).add(new Vector3d(message.getpositionX(),message.getpositionY(),message.getpositionZ()).mul(SOFT_UPDATE_MULTIPLIER));
} // }
//we want to always update the server facing vector with where the client says they're facing //we want to always update the server facing vector with where the client says they're facing
EntityUtils.getRotation(parent).set(message.getrotationX(),message.getrotationY(),message.getrotationZ(),message.getrotationW()); EntityUtils.getRotation(parent).set(message.getrotationX(),message.getrotationY(),message.getrotationZ(),message.getrotationW());
// CreatureUtils.setFacingVector(parent, new Vector3d(message.getrotationX(),message.getrotationY(),message.getrotationZ())); // CreatureUtils.setFacingVector(parent, new Vector3d(message.getrotationX(),message.getrotationY(),message.getrotationZ()));

View File

@ -930,7 +930,7 @@ public class RenderingEngine {
Model physicsGraphicsModel; Model physicsGraphicsModel;
for(Collidable collidable : Globals.clientSceneWrapper.getCollisionEngine().getCollidables()){ for(Collidable collidable : Globals.clientSceneWrapper.getCollisionEngine().getCollidables()){
Entity physicsEntity = collidable.getParent(); Entity physicsEntity = collidable.getParent();
if((boolean)physicsEntity.getData(EntityDataStrings.DATA_STRING_DRAW)){ if((boolean)physicsEntity.getData(EntityDataStrings.DATA_STRING_DRAW) && physicsEntity.getData(EntityDataStrings.PHYSICS_MODEL_TEMPLATE) != null){
CollidableTemplate template = (CollidableTemplate)physicsEntity.getData(EntityDataStrings.PHYSICS_MODEL_TEMPLATE); CollidableTemplate template = (CollidableTemplate)physicsEntity.getData(EntityDataStrings.PHYSICS_MODEL_TEMPLATE);
switch(template.getType()){ switch(template.getType()){
case "CYLINDER": case "CYLINDER":
@ -942,7 +942,7 @@ public class RenderingEngine {
modelTransformMatrix.translate(cameraModifiedPosition); modelTransformMatrix.translate(cameraModifiedPosition);
modelTransformMatrix.rotate(EntityUtils.getRotation(physicsEntity)); modelTransformMatrix.rotate(EntityUtils.getRotation(physicsEntity));
// modelTransformMatrix.translate(template.getOffsetX(),template.getOffsetY(),template.getOffsetZ()); //center sphere // modelTransformMatrix.translate(template.getOffsetX(),template.getOffsetY(),template.getOffsetZ()); //center sphere
modelTransformMatrix.scale(template.getDimension1() * 0.5,template.getDimension2() * 0.5,template.getDimension3() * 0.5); modelTransformMatrix.scale(template.getDimension1(),template.getDimension2(),template.getDimension3());
physicsGraphicsModel.modelMatrix = modelTransformMatrix; physicsGraphicsModel.modelMatrix = modelTransformMatrix;
physicsGraphicsModel.draw(renderPipelineState); physicsGraphicsModel.draw(renderPipelineState);
} }