Class PhysicsCharacter

All Implemented Interfaces:
com.jme3.export.Savable, com.jme3.util.clone.JmeCloneable, Cloneable, Comparable<NativePhysicsObject>

public class PhysicsCharacter extends PhysicsCollisionObject
A collision object for simplified character simulation, based on Bullet's btKinematicCharacterController.
  • Field Details

    • logger2

      public static final Logger logger2
      message logger for this class
  • Constructor Details

    • PhysicsCharacter

      protected PhysicsCharacter()
      No-argument constructor needed by SavableClassUtil.
    • PhysicsCharacter

      public PhysicsCharacter(ConvexShape shape, float stepHeight)
      Instantiate a responsive character with the specified CollisionShape and step height.
      Parameters:
      shape - the desired shape (not null, convex, alias created)
      stepHeight - the maximum amount of vertical movement without jumping or falling (in physics-space units)
  • Method Details

    • getAngularDamping

      public float getAngularDamping()
      Determine this character's angular damping.
      Returns:
      the viscous damping ratio (0→no damping, 1→critically damped)
    • getAngularVelocity

      public com.jme3.math.Vector3f getAngularVelocity(com.jme3.math.Vector3f storeResult)
      Determine this character's angular velocity.
      Parameters:
      storeResult - storage for the result (modified if not null)
      Returns:
      the velocity vector (in radians per second, either storeResult or a new vector, not null)
    • getControllerId

      public long getControllerId()
      Determine the ID of the btKinematicCharacterController. Used internally.
      Returns:
      the unique identifier (not zero)
    • getFallSpeed

      public float getFallSpeed()
      Determine this character's maximum fall speed (terminal velocity).
      Returns:
      the speed (in physics-space units per second)
    • getGravity

      public com.jme3.math.Vector3f getGravity(com.jme3.math.Vector3f storeResult)
      Determine this character's gravitational acceleration.
      Parameters:
      storeResult - storage for the result (modified if not null)
      Returns:
      an acceleration vector (in physics-space units per second squared, direction opposite the "up" vector, either storeResult or a new vector, not null)
    • getJumpSpeed

      public float getJumpSpeed()
      Determine this character's jump speed.
      Returns:
      the speed (in physics-space units per second)
    • getLinearDamping

      public float getLinearDamping()
      Determine this character's linear damping.
      Returns:
      the viscous damping ratio (0→no damping, 1→critically damped)
    • getLinearVelocity

      public com.jme3.math.Vector3f getLinearVelocity(com.jme3.math.Vector3f storeResult)
      Determine the character's linear motion command: the sum of its horizontal (walk) offset plus its vertical (jump) velocity. Note that the horizontal units differ from PhysicsRigidBody.

      Collisions can cause the achieved motion to be less than commanded. To determine the achieved displacement, use getMostRecentDisplacement(com.jme3.math.Vector3f).

      Parameters:
      storeResult - storage for the result (modified if not null)
      Returns:
      a vector (horizontal components in physics-space units per time step, vertical component in physics-space units per second, either storeResult or a new vector, not null)
      See Also:
    • getMaxPenetrationDepth

      public float getMaxPenetrationDepth()
      Determine this character's maximum penetration depth.
      Returns:
      the depth (in physics-space units)
    • getMaxSlope

      public float getMaxSlope()
      Determine this character's maximum slope angle.
      Returns:
      the angle relative to the horizontal (in radians)
    • getMostRecentDisplacement

      public com.jme3.math.Vector3f getMostRecentDisplacement(com.jme3.math.Vector3f storeResult)
      Copy the character's displacement during the most recent simulation step.

      Unlike getLinearVelocity(com.jme3.math.Vector3f), the units are simply physics-space units per time step.

      Parameters:
      storeResult - storage for the result (modified if not null)
      Returns:
      an offset vector (in physics-space coordinates, either storeResult or a new vector, not null)
    • getStepHeight

      public float getStepHeight()
      Determine this character's step height.
      Returns:
      the maximum amount of vertical movement without jumping or falling (in physics-space units)
    • getUpDirection

      public com.jme3.math.Vector3f getUpDirection(com.jme3.math.Vector3f storeResult)
      Determine this character's "up" direction.
      Parameters:
      storeResult - storage for the result (modified if not null)
      Returns:
      a unit vector (in physics-space coordinates, in the direction opposite the gravity vector, either storeResult or a new vector, not null)
    • getWalkDirection

      public com.jme3.math.Vector3f getWalkDirection(com.jme3.math.Vector3f storeResult)
      Determine the character's walk offset: its horizontal motion command.

      Collisions can cause the achieved motion to be less than commanded. To determine the achieved displacement, use getMostRecentDisplacement(com.jme3.math.Vector3f).

      Parameters:
      storeResult - storage for the result (modified if not null)
      Returns:
      an offset vector (either storeResult or a new vector, not null)
    • isUsingGhostSweepTest

      public boolean isUsingGhostSweepTest()
      Test whether the ghost's convex-sweep test is in use.
      Returns:
      true if using the ghost's test, otherwise false
    • jump

      public void jump()
      Jump in the "up" direction.
    • jump

      public void jump(com.jme3.math.Vector3f direction)
      Jump in the specified direction.
      Parameters:
      direction - desired jump direction (not null, unaffected) or (0,0,0) to jump in the "up" direction
    • onGround

      public boolean onGround()
      Test whether this character is on the ground.
      Returns:
      true if on the ground, otherwise false
    • reset

      public void reset(PhysicsSpace space)
      Reset this character, including its velocity.
      Parameters:
      space - (not null)
    • setAngularDamping

      public void setAngularDamping(float damping)
      Alter this character's angular damping.
      Parameters:
      damping - the desired viscous damping ratio (0→no damping, 1→critically damped, default=0)
    • setAngularVelocity

      public void setAngularVelocity(com.jme3.math.Vector3f angularVelocity)
      Alter this character's angular velocity.
      Parameters:
      angularVelocity - the desired angular velocity vector (in radians per second, not null, unaffected)
    • setCollisionShape

      public void setCollisionShape(CollisionShape collisionShape)
      Apply the specified CollisionShape to this character. Note that the character should not be in any PhysicsSpace while changing shape; the character gets rebuilt on the physics side.
      Overrides:
      setCollisionShape in class PhysicsCollisionObject
      Parameters:
      collisionShape - the shape to apply (not null, convex, alias created)
    • setContactResponse

      public void setContactResponse(boolean newState)
      Enable/disable this character's contact response.
      Parameters:
      newState - true to respond to contact forces, false to ignore them (default=true)
    • setFallSpeed

      public void setFallSpeed(float fallSpeed)
      Alter this character's maximum fall speed (terminal velocity).
      Parameters:
      fallSpeed - the desired speed (in physics-space units per second, default=55)
    • setGravity

      public void setGravity(float downwardAcceleration)
      Alter the character's gravitational acceleration without altering its "up" vector.
      Parameters:
      downwardAcceleration - the desired downward acceleration (in physics-space units per second squared, default=29.4)
    • setGravity

      public void setGravity(com.jme3.math.Vector3f gravity)
      Alter this character's gravitational acceleration. This may also alter its "up" vector.
      Parameters:
      gravity - the desired acceleration vector (in physics-space units per second squared, not null, unaffected, default=(0,-29.4,0))
    • setJumpSpeed

      public void setJumpSpeed(float jumpSpeed)
      Alter this character's jump speed.
      Parameters:
      jumpSpeed - the desired speed (in physics-space units per second, default=10)
    • setLinearDamping

      public void setLinearDamping(float damping)
      Alter this character's linear damping.
      Parameters:
      damping - the desired viscous damping ratio (0→no damping, 1→critically damped, default=0)
    • setLinearVelocity

      public void setLinearVelocity(com.jme3.math.Vector3f velocity)
      Command the linear velocity of this character's center. Note that the horizontal units differ from PhysicsRigidBody!

      Collisions can cause the achieved motion to be less than commanded.

      Parameters:
      velocity - the desired velocity vector (horizontal components in physics-space units per time step, vertical component in physics-space units per second, not null, finite)
    • setMaxPenetrationDepth

      public void setMaxPenetrationDepth(float depth)
      Alter this character's maximum penetration depth.
      Parameters:
      depth - the desired depth (in physics-space units, default=0.2)
    • setMaxSlope

      public void setMaxSlope(float slopeRadians)
      Alter this character's maximum slope angle.
      Parameters:
      slopeRadians - the desired angle above to the horizontal plane (in radians, ≥0, ≤Pi/2, default=Pi/4)
    • setPhysicsLocation

      public void setPhysicsLocation(com.jme3.math.Vector3f location)
      Directly alter this character's location. (This is equivalent to warp(com.jme3.math.Vector3f).)
      Parameters:
      location - the desired location (not null, finite, unaffected)
    • setPhysicsLocationDp

      public void setPhysicsLocationDp(com.simsilica.mathd.Vec3d location)
      Directly alter this character's location.
      Parameters:
      location - the desired location (not null, unaffected)
    • setStepHeight

      public void setStepHeight(float height)
      Alter this character's step height.
      Parameters:
      height - the desired maximum amount of vertical movement without jumping or falling (in physics-space units, default=1)
    • setSweepTest

      public void setSweepTest(boolean useGhostSweepTest)
      Alter which convex-sweep test is used.
      Parameters:
      useGhostSweepTest - true to use the ghost's test, false to use the world's test (default=true)
    • setUp

      public void setUp(com.jme3.math.Vector3f direction)
      Alter this character's "up" direction. This may also alter its gravity vector.
      Parameters:
      direction - the desired direction (not null, not zero, unaffected, default=(0,1,0))
    • setWalkDirection

      public void setWalkDirection(com.jme3.math.Vector3f offset)
      Alter this character's walk offset. The offset must be perpendicular to the "up" direction. It will continue to be applied until altered again.
      Parameters:
      offset - the desired location increment for each simulation step (in physics-space coordinates, not null, unaffected, default=(0,0,0))
    • warp

      public void warp(com.jme3.math.Vector3f location)
      Directly alter the location of this character's center.
      Parameters:
      location - the desired physics location (not null, finite, unaffected)
    • cloneFields

      public void cloneFields(com.jme3.util.clone.Cloner cloner, Object original)
      Callback from Cloner to convert this shallow-cloned character into a deep-cloned one, using the specified Cloner and original to resolve copied fields.
      Specified by:
      cloneFields in interface com.jme3.util.clone.JmeCloneable
      Overrides:
      cloneFields in class PhysicsCollisionObject
      Parameters:
      cloner - the Cloner that's cloning this character (not null)
      original - the instance from which this character was shallow-cloned (not null, unaffected)
    • read

      public void read(com.jme3.export.JmeImporter importer) throws IOException
      De-serialize this character from the specified importer, for example when loading from a J3O file.
      Specified by:
      read in interface com.jme3.export.Savable
      Overrides:
      read in class PhysicsCollisionObject
      Parameters:
      importer - (not null)
      Throws:
      IOException - from the importer
    • write

      public void write(com.jme3.export.JmeExporter exporter) throws IOException
      Serialize this character to the specified exporter, for example when saving to a J3O file.
      Specified by:
      write in interface com.jme3.export.Savable
      Overrides:
      write in class PhysicsCollisionObject
      Parameters:
      exporter - (not null)
      Throws:
      IOException - from the exporter