Skip to content

Commit

Permalink
Added kinematic option to Rigidbody
Browse files Browse the repository at this point in the history
* Added kinematic option to Rigidbody (no physical forces affects the
object)
  • Loading branch information
John committed Nov 16, 2018
1 parent 21963ad commit 20ce545
Show file tree
Hide file tree
Showing 7 changed files with 21 additions and 6 deletions.
2 changes: 2 additions & 0 deletions ProjectHistory
Original file line number Diff line number Diff line change
Expand Up @@ -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)



Expand Down
20 changes: 17 additions & 3 deletions src/main/java/com/johnsproject/jpge/dto/Rigidbody.java
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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() {
Expand All @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down
3 changes: 1 addition & 2 deletions src/test/java/com/johnsproject/jpge/ExampleScene.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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++) {
Expand Down
Binary file modified target/JPGE-javadoc.jar
Binary file not shown.
Binary file modified target/JPGE-sources.jar
Binary file not shown.
Binary file modified target/JPGE.jar
Binary file not shown.

0 comments on commit 20ce545

Please sign in to comment.