Class PhysicsLink

java.lang.Object
com.jme3.bullet.animation.PhysicsLink
All Implemented Interfaces:
com.jme3.export.Savable, com.jme3.util.clone.JmeCloneable, Cloneable
Direct Known Subclasses:
BoneLink, TorsoLink

public abstract class PhysicsLink extends Object implements com.jme3.util.clone.JmeCloneable, com.jme3.export.Savable
The abstract base class used by DynamicAnimControl to link pieces of a JME model to their corresponding collision objects in a ragdoll. Subclasses include BoneLink and TorsoLink. The links in each DynamicAnimControl form a hierarchy with the TorsoLink at its root.

This class is shared between JBullet and Native Bullet.

Author:
Stephen Gold sgold@sonic.net Based on KinematicRagdollControl by Normen Hansen and Rémy Bouquet (Nehon).
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final Logger
    message logger for this class
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    No-argument constructor needed by SavableClassUtil.
  • Method Summary

    Modifier and Type
    Method
    Description
    protected void
    blendToKinematicMode(float blendInterval)
    Begin blending this link to a purely kinematic mode.
    Read the name of the corresponding bone.
    void
    cloneFields(com.jme3.util.clone.Cloner cloner, Object original)
    Callback from Cloner to convert this shallow-cloned link into a deep-cloned one, using the specified cloner and original to resolve copied fields.
    int
    Count this link's immediate children in the link hierarchy.
    protected abstract void
    Update this link in Dynamic mode, setting the linked bone's transform based on the transform of the rigid body.
    final com.jme3.anim.Joint
    Access the corresponding bone.
    Access the control that manages this link.
    Access the joint between this link's rigid body and that of its parent.
    Access this link's parent/manager in the link hierarchy.
    Access the linked rigid body.
    boolean
    Test whether the link is in kinematic mode.
    Create a shallow clone for the JME cloner.
    protected void
    kinematicUpdate(float tpf)
    Update this link in blended Kinematic mode.
    float
    Read the kinematic weight of this link.
    Enumerate this link's immediate children in the link hierarchy.
    protected com.jme3.math.Vector3f
    localOffset(com.jme3.math.Vector3f storeResult)
    Copy the local offset of this link.
    abstract String
    Unambiguously identify this link by name, within its DynamicAnimControl.
    com.jme3.math.Transform
    physicsTransform(com.jme3.math.Transform storeResult)
    Calculate a physics transform for the rigid body (to match the skeleton bone).
    void
    read(com.jme3.export.JmeImporter im)
    De-serialize this link, for example when loading from a J3O file.
    void
    setDynamic(com.jme3.math.Vector3f uniformAcceleration)
    Immediately put this link into dynamic mode.
    protected final void
    Assign a physics joint to this link, or cancel the assigned joint.
    protected final void
    Assign a parent/manager for this link.
    protected void
    Alter the rigid body for this link.
    void
    write(com.jme3.export.JmeExporter ex)
    Serialize this link, for example when saving to a J3O file.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • logger

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

    • PhysicsLink

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

    • boneName

      public String boneName()
      Read the name of the corresponding bone.
      Returns:
      the bone name (not null)
    • countChildren

      public int countChildren()
      Count this link's immediate children in the link hierarchy.
      Returns:
      the count (≥0)
    • getBone

      public final com.jme3.anim.Joint getBone()
      Access the corresponding bone.
      Returns:
      the pre-existing instance (not null)
    • getControl

      public DacLinks getControl()
      Access the control that manages this link.
      Returns:
      the pre-existing instance (not null)
    • getJoint

      public PhysicsJoint getJoint()
      Access the joint between this link's rigid body and that of its parent.
      Returns:
      the pre-existing instance, or null for the torso
    • getParent

      public PhysicsLink getParent()
      Access this link's parent/manager in the link hierarchy.
      Returns:
      the link, or null if none
    • getRigidBody

      public PhysicsRigidBody getRigidBody()
      Access the linked rigid body.
      Returns:
      the pre-existing instance (not null)
    • isKinematic

      public boolean isKinematic()
      Test whether the link is in kinematic mode.
      Returns:
      true if kinematic, or false if purely dynamic
    • kinematicWeight

      public float kinematicWeight()
      Read the kinematic weight of this link.
      Returns:
      0 if purely dynamic, 1 if purely kinematic
    • listChildren

      public PhysicsLink[] listChildren()
      Enumerate this link's immediate children in the link hierarchy.
      Returns:
      a new array (not null)
    • name

      public abstract String name()
      Unambiguously identify this link by name, within its DynamicAnimControl.
      Returns:
      a text string (not null, not empty)
    • physicsTransform

      public com.jme3.math.Transform physicsTransform(com.jme3.math.Transform storeResult)
      Calculate a physics transform for the rigid body (to match the skeleton bone).
      Parameters:
      storeResult - storage for the result (modified if not null)
      Returns:
      the calculated transform (in physics-space coordinates, either storeResult or a new transform, not null)
    • setDynamic

      public void setDynamic(com.jme3.math.Vector3f uniformAcceleration)
      Immediately put this link into dynamic mode. The control must be "ready".
      Parameters:
      uniformAcceleration - the uniform acceleration vector to apply (in physics-space coordinates, not null, unaffected)
    • blendToKinematicMode

      protected void blendToKinematicMode(float blendInterval)
      Begin blending this link to a purely kinematic mode.
      Parameters:
      blendInterval - the duration of the blend interval (in seconds, ≥0)
    • dynamicUpdate

      protected abstract void dynamicUpdate()
      Update this link in Dynamic mode, setting the linked bone's transform based on the transform of the rigid body.
    • kinematicUpdate

      protected void kinematicUpdate(float tpf)
      Update this link in blended Kinematic mode.
      Parameters:
      tpf - the time interval between frames (in seconds, ≥0)
    • localOffset

      protected com.jme3.math.Vector3f localOffset(com.jme3.math.Vector3f storeResult)
      Copy the local offset of this link.
      Parameters:
      storeResult - storage for the result (modified if not null)
      Returns:
      the offset (in bone local coordinates, either storeResult or a new vector, not null)
    • setJoint

      protected final void setJoint(PhysicsJoint joint)
      Assign a physics joint to this link, or cancel the assigned joint.
      Parameters:
      joint - (may be null, alias created)
    • setParent

      protected final void setParent(PhysicsLink parent)
      Assign a parent/manager for this link.
      Parameters:
      parent - (not null, alias created)
    • setRigidBody

      protected void setRigidBody(PhysicsRigidBody body)
      Alter the rigid body for this link.
      Parameters:
      body - the desired rigid body (not null, alias created)
    • cloneFields

      public void cloneFields(com.jme3.util.clone.Cloner cloner, Object original)
      Callback from Cloner to convert this shallow-cloned link 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
      Parameters:
      cloner - the cloner that's cloning this link (not null)
      original - the instance from which this link was shallow-cloned (unused)
    • jmeClone

      public PhysicsLink jmeClone()
      Create a shallow clone for the JME cloner.
      Specified by:
      jmeClone in interface com.jme3.util.clone.JmeCloneable
      Returns:
      a new instance
    • read

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

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