implement setContactResponse(boolean) for PhysicsCharacter (issue #964) (#971)

accellbaker
Stephen Gold 6 years ago committed by GitHub
parent cde3c39c4f
commit d8acd30a27
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      jme3-bullet/src/common/java/com/jme3/bullet/control/CharacterControl.java
  2. 18
      jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsCharacter.java
  3. 8
      jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsRigidBody.java
  4. 23
      jme3-jbullet/src/main/java/com/jme3/bullet/objects/PhysicsCharacter.java

@ -102,6 +102,7 @@ public class CharacterControl extends PhysicsCharacter implements PhysicsControl
control.setCcdSweptSphereRadius(getCcdSweptSphereRadius());
control.setCollideWithGroups(getCollideWithGroups());
control.setCollisionGroup(getCollisionGroup());
control.setContactResponse(isContactResponse());
control.setFallSpeed(getFallSpeed());
control.setGravity(getGravity());
control.setJumpSpeed(getJumpSpeed());

@ -31,6 +31,7 @@
*/
package com.jme3.bullet.objects;
import com.jme3.bullet.collision.CollisionFlag;
import com.jme3.bullet.collision.PhysicsCollisionObject;
import com.jme3.bullet.collision.shapes.CollisionShape;
import com.jme3.export.InputCapsule;
@ -50,7 +51,6 @@ import java.util.logging.Logger;
* @author normenhansen
*/
public class PhysicsCharacter extends PhysicsCollisionObject {
/**
* Unique identifier of btKinematicCharacterController (as opposed to its
* collision object, which is a ghost). Constructors are responsible for
@ -456,6 +456,22 @@ public class PhysicsCharacter extends PhysicsCollisionObject {
private native float getMaxSlope(long characterId);
/**
* Enable/disable this character's contact response.
*
* @param responsive true to respond to contacts, false to ignore them
* (default=true)
*/
public void setContactResponse(boolean responsive) {
int flags = getCollisionFlags(objectId);
if (responsive) {
flags &= ~CollisionFlag.NO_CONTACT_RESPONSE;
} else {
flags |= CollisionFlag.NO_CONTACT_RESPONSE;
}
setCollisionFlags(objectId, flags);
}
/**
* Test whether this character is on the ground.
*

@ -57,12 +57,6 @@ import java.util.logging.Logger;
* @author normenhansen
*/
public class PhysicsRigidBody extends PhysicsCollisionObject {
/**
* copy of the contact response state: true→responds to contacts,
* false→doesn't respond (default=true)
*/
private boolean contactResponseState = true;
/**
* motion state
*/
@ -390,8 +384,6 @@ public class PhysicsRigidBody extends PhysicsCollisionObject {
flags |= CollisionFlag.NO_CONTACT_RESPONSE;
}
setCollisionFlags(objectId, flags);
contactResponseState = responsive;
}
/**

@ -1,5 +1,5 @@
/*
* Copyright (c) 2009-2012 jMonkeyEngine
* Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -169,6 +169,26 @@ public class PhysicsCharacter extends PhysicsCollisionObject {
return character.getMaxSlope();
}
/**
* Enable/disable this body's contact response.
*
* @param newState true to respond to contacts (default=true)
*/
public void setContactResponse(boolean newState) {
if (!newState) {
throw new UnsupportedOperationException("Not implemented.");
}
}
/**
* Test whether this body responds to contacts.
*
* @return true if responsive, otherwise false
*/
public boolean isContactResponse() {
return true;
}
public boolean onGround() {
return character.onGround();
}
@ -279,6 +299,7 @@ public class PhysicsCharacter extends PhysicsCollisionObject {
buildObject();
character = new KinematicCharacterController(gObject, (ConvexShape) collisionShape.getCShape(), stepHeight);
setGravity(capsule.readFloat("gravity", 9.8f * 3));
setContactResponse(capsule.readBoolean("contactResponse", true));
setMaxSlope(capsule.readFloat("maxSlope", 1.0f));
setFallSpeed(capsule.readFloat("fallSpeed", 55.0f));
setJumpSpeed(capsule.readFloat("jumpSpeed", 10.0f));

Loading…
Cancel
Save