Class RigidBodyControl

All Implemented Interfaces:
PhysicsControl, Savable, Control, JmeCloneable, Cloneable

public class RigidBodyControl extends PhysicsRigidBody implements PhysicsControl, JmeCloneable
A physics control to link a PhysicsRigidBody to a spatial.

This class is shared between JBullet and Native Bullet.

  • Field Details

    • spatial

      protected Spatial spatial
      spatial to which this control is added, or null if none
    • enabled

      protected boolean enabled
      true→control is enabled, false→control is disabled
    • added

      protected boolean added
      true→body is added to the physics space, false→not added
    • space

      protected PhysicsSpace space
      space to which the body is (or would be) added
    • kinematicSpatial

      protected boolean kinematicSpatial
      true→body is kinematic, false→body is static or dynamic
  • Constructor Details

    • RigidBodyControl

      protected RigidBodyControl()
      No-argument constructor needed by SavableClassUtil. Do not invoke directly!
    • RigidBodyControl

      public RigidBodyControl(float mass)
      When using this constructor, the CollisionShape for the RigidBody is generated automatically when the control is added to a spatial.
      Parameters:
      mass - When not 0, a HullCollisionShape is generated, otherwise a MeshCollisionShape is used. For geometries with box or sphere meshes the proper box or sphere collision shape is used.
    • RigidBodyControl

      public RigidBodyControl(CollisionShape shape)
      Instantiate an enabled control with mass=1 and the specified collision shape.
      Parameters:
      shape - the desired shape (not null, alias created)
    • RigidBodyControl

      public RigidBodyControl(CollisionShape shape, float mass)
      Instantiate an enabled control with the specified collision shape and mass.
      Parameters:
      shape - the desired shape (not null, alias created)
      mass - the desired mass (≥0)
  • Method Details

    • cloneForSpatial

      public Control cloneForSpatial(Spatial spatial)
      Clone this control for a different spatial. No longer used as of JME 3.1.
      Specified by:
      cloneForSpatial in interface Control
      Parameters:
      spatial - the spatial for the clone to control (or null)
      Returns:
      a new control (not null)
    • jmeClone

      public Object jmeClone()
      Create a shallow clone for the JME cloner.
      Specified by:
      jmeClone in interface JmeCloneable
      Returns:
      a new control (not null)
    • cloneFields

      public void cloneFields(Cloner cloner, Object original)
      Callback from Cloner to convert this shallow-cloned control into a deep-cloned one, using the specified cloner and original to resolve copied fields.
      Specified by:
      cloneFields in interface JmeCloneable
      Parameters:
      cloner - the cloner that's cloning this control (not null)
      original - the control from which this control was shallow-cloned (unused)
    • setSpatial

      public void setSpatial(Spatial spatial)
      Alter which spatial is controlled. Invoked when the control is added to or removed from a spatial. Should be invoked only by a subclass or from Spatial. Do not invoke directly from user code.
      Specified by:
      setSpatial in interface Control
      Parameters:
      spatial - the spatial to control (or null)
    • getSpatial

      public Spatial getSpatial()
      Returns:
      returns the spatial the control is added to, or null if the control is not attached to a spatial yet.
    • createCollisionShape

      protected void createCollisionShape()
      Set the collision shape based on the controlled spatial and its descendents.
    • setEnabled

      public void setEnabled(boolean enabled)
      Enable or disable this control.

      When the control is disabled, the body is removed from physics space. When the control is enabled again, the body is moved to the current location of the spatial and then added to the physics space.

      Specified by:
      setEnabled in interface PhysicsControl
      Parameters:
      enabled - true→enable the control, false→disable it
    • isEnabled

      public boolean isEnabled()
      Test whether this control is enabled.
      Specified by:
      isEnabled in interface PhysicsControl
      Returns:
      true if enabled, otherwise false
    • isKinematicSpatial

      public boolean isKinematicSpatial()
      Test whether this control is in kinematic mode.
      Returns:
      true if the spatial location and rotation are applied to the rigid body, otherwise false
    • setKinematicSpatial

      public void setKinematicSpatial(boolean kinematicSpatial)
      Enable or disable kinematic mode. In kinematic mode, the spatial's location and rotation will be applied to the rigid body.
      Parameters:
      kinematicSpatial - true→kinematic, false→dynamic or static
    • isApplyPhysicsLocal

      public boolean isApplyPhysicsLocal()
      Test whether physics-space coordinates should match the spatial's local coordinates.
      Returns:
      true if matching local coordinates, false if matching world coordinates
    • setApplyPhysicsLocal

      public void setApplyPhysicsLocal(boolean applyPhysicsLocal)
      Alter whether physics-space coordinates should match the spatial's local coordinates.
      Parameters:
      applyPhysicsLocal - true→match local coordinates, false→match world coordinates (default=false)
    • update

      public void update(float tpf)
      Update this control. Invoked once per frame, during the logical-state update, provided the control is added to a scene.
      Specified by:
      update in interface Control
      Parameters:
      tpf - the time interval between frames (in seconds, ≥0)
    • render

      public void render(RenderManager rm, ViewPort vp)
      Render this control. Invoked once per view port per frame, provided the control is added to a scene. Should be invoked only by a subclass or by the RenderManager.
      Specified by:
      render in interface Control
      Parameters:
      rm - the render manager (not null)
      vp - the view port to render (not null)
    • setPhysicsSpace

      public void setPhysicsSpace(PhysicsSpace newSpace)
      If enabled, add this control's body to the specified physics space. In not enabled, alter where the body would be added. The body is removed from any other space it's currently in.
      Specified by:
      setPhysicsSpace in interface PhysicsControl
      Parameters:
      newSpace - where to add, or null to simply remove
    • getPhysicsSpace

      public PhysicsSpace getPhysicsSpace()
      Access the physics space to which the body is (or would be) added.
      Specified by:
      getPhysicsSpace in interface PhysicsControl
      Returns:
      the pre-existing space, or null for none
    • write

      public void write(JmeExporter ex) throws IOException
      Serialize this control, for example when saving to a J3O file.
      Specified by:
      write in interface Savable
      Overrides:
      write in class PhysicsRigidBody
      Parameters:
      ex - exporter (not null)
      Throws:
      IOException - from exporter
    • read

      public void read(JmeImporter im) throws IOException
      De-serialize this control, for example when loading from a J3O file.
      Specified by:
      read in interface Savable
      Overrides:
      read in class PhysicsRigidBody
      Parameters:
      im - importer (not null)
      Throws:
      IOException - from importer