diff --git a/ProjectHistory b/ProjectHistory index 165e2d1..6df7523 100644 --- a/ProjectHistory +++ b/ProjectHistory @@ -247,6 +247,8 @@ v0.1 - 24/08/2018 * Added sphere collision detection!!! * Added Plane mesh to the resources folder * Refactored and fixed bugs +16/11/2018 +* Added kinematic option to Rigidbody (no physical forces affects the object) diff --git a/src/main/java/com/johnsproject/jpge/dto/Rigidbody.java b/src/main/java/com/johnsproject/jpge/dto/Rigidbody.java index 731c7ee..9ce55d4 100644 --- a/src/main/java/com/johnsproject/jpge/dto/Rigidbody.java +++ b/src/main/java/com/johnsproject/jpge/dto/Rigidbody.java @@ -16,7 +16,8 @@ public class Rigidbody { private int collisionTime = (int)System.currentTimeMillis(); private int collisionType = COLLISION_SPHERE; private int radius = -1; - private boolean useGravity = true; + private boolean gravity = true; + private boolean kinematic = false; private String[] collisionTargets = new String[5]; public Rigidbody() { @@ -70,6 +71,11 @@ public void collisionEnter(String objectName) { if (collisionTargets[i].equals(objectName)) break; if (collisionTargets[i].equals("")) { + if (!isKinematic()) { + velocity[vx] = 0; + velocity[vy] = 0; + velocity[vz] = 0; + } collisionTargets[i] = objectName; break; } @@ -117,12 +123,12 @@ public String[] getCollisionTargets() { } public boolean useGravity() { - return useGravity; + return gravity; } public void useGravity(boolean useGravity) { collisionTime = (int)System.currentTimeMillis(); - this.useGravity = useGravity; + this.gravity = useGravity; } public int getCollisionType() { @@ -140,4 +146,12 @@ public int getColliderRadius() { public void setColliderRadius(int radius) { this.radius = radius; } + + public boolean isKinematic() { + return kinematic; + } + + public void setKinematic(boolean kinematic) { + this.kinematic = kinematic; + } } diff --git a/src/main/java/com/johnsproject/jpge/physics/PhysicsAnimator.java b/src/main/java/com/johnsproject/jpge/physics/PhysicsAnimator.java index 3642536..c9019dc 100644 --- a/src/main/java/com/johnsproject/jpge/physics/PhysicsAnimator.java +++ b/src/main/java/com/johnsproject/jpge/physics/PhysicsAnimator.java @@ -20,7 +20,7 @@ public void animate(Scene scene) { rigidbody.setColliderRadius(getRadius(sceneObject)); PhysicsSettings settings = scene.getPhysicsSettings(); detectCollision(scene, sceneObject); - if (!rigidbody.isColliding()) { + if (!rigidbody.isColliding() && !rigidbody.isKinematic()) { applyGravity(rigidbody, settings.getGravity()); } transform.translate(rigidbody.getVelocity()); diff --git a/src/test/java/com/johnsproject/jpge/ExampleScene.java b/src/test/java/com/johnsproject/jpge/ExampleScene.java index 7208f45..44ce1d4 100644 --- a/src/test/java/com/johnsproject/jpge/ExampleScene.java +++ b/src/test/java/com/johnsproject/jpge/ExampleScene.java @@ -6,7 +6,6 @@ import com.johnsproject.jpge.dto.Camera; import com.johnsproject.jpge.dto.Light; import com.johnsproject.jpge.dto.Mesh; -import com.johnsproject.jpge.dto.Rigidbody; import com.johnsproject.jpge.dto.SceneObject; import com.johnsproject.jpge.dto.Texture; import com.johnsproject.jpge.dto.Transform; @@ -37,7 +36,7 @@ public ExampleScene() { sceneObject2 = new SceneObject("test2", new Transform(new int[] {0, -3000, 0}, new int[] {90, 0, 0}, new int[] {1, 1, 1}), mesh2); // sceneObject.getRigidbody().setCollisionType(Rigidbody.COLLISION_AABB); // sceneObject2.getRigidbody().setCollisionType(Rigidbody.COLLISION_AABB); - sceneObject.getRigidbody().setCollisionType(Rigidbody.COLLISION_TERRAIN); +// sceneObject.getRigidbody().setCollisionType(Rigidbody.COLLISION_TERRAIN); try { Texture t = new Texture(getClass().getResourceAsStream("/JohnsProject.png")); for (int i = 0; i < mesh1.getMaterials().length; i++) { diff --git a/target/JPGE-javadoc.jar b/target/JPGE-javadoc.jar index e807245..db7f67d 100644 Binary files a/target/JPGE-javadoc.jar and b/target/JPGE-javadoc.jar differ diff --git a/target/JPGE-sources.jar b/target/JPGE-sources.jar index 3ca9ce8..92e3ff7 100644 Binary files a/target/JPGE-sources.jar and b/target/JPGE-sources.jar differ diff --git a/target/JPGE.jar b/target/JPGE.jar index 39afbdf..5fa6a59 100644 Binary files a/target/JPGE.jar and b/target/JPGE.jar differ