Class DacLinks

All Implemented Interfaces:
PhysicsControl, PhysicsTickListener, com.jme3.export.Savable, com.jme3.scene.control.Control, com.jme3.util.clone.JmeCloneable, Cloneable
Direct Known Subclasses:
DynamicAnimControl

public class DacLinks extends DacConfiguration implements PhysicsTickListener
Access a DynamicAnimControl at the PhysicsLink level once it's been added to a Spatial.
  • Field Details

    • logger3

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

    • DacLinks

      protected DacLinks()
      Instantiate an enabled control without any linked bones or attachments (torso only).
  • Method Details

    • findArmatureJoint

      public com.jme3.anim.Joint findArmatureJoint(String jointName)
      Access the named armature joint.

      Allowed only when the Control IS added to a Spatial.

      Parameters:
      jointName - the name of the armature joint to access
      Returns:
      the pre-existing instance, or null if not found
    • findAttachmentLink

      public AttachmentLink findAttachmentLink(String boneName)
      Access the AttachmentLink for the named bone. Returns null if the bone is not associated with an attachment, or if the control is not added to a Spatial.
      Parameters:
      boneName - the name of the bone (not null, not empty)
      Returns:
      the pre-existing link, or null if not found
    • findBone

      public com.jme3.animation.Bone findBone(String boneName)
      Access the named Bone.

      Allowed only when the Control IS added to a Spatial.

      Parameters:
      boneName - the name of the skeleton bone to access
      Returns:
      the pre-existing instance, or null if not found
    • findBoneLink

      public BoneLink findBoneLink(String boneName)
      Access the BoneLink for the named bone. Returns null if bone is not linked, or if the control is not added to a Spatial.
      Parameters:
      boneName - the name of the bone (not null, not empty)
      Returns:
      the pre-existing BoneLink, or null if not found
    • findLink

      public PhysicsLink findLink(String linkName)
      Access the named link. Returns null if the name is invalid, or if the control is not added to a Spatial.
      Parameters:
      linkName - the name of the link (not null, not empty)
      Returns:
      the pre-existing link, or null if not found
    • getArmature

      public com.jme3.anim.Armature getArmature()
      Access the Armature. Returns null if the Control is not added to a Spatial.
      Returns:
      the pre-existing Armature, or null
    • getSkeleton

      public com.jme3.animation.Skeleton getSkeleton()
      Access the Skeleton. Returns null if the Control is not added to a Spatial.
      Returns:
      the pre-existing Skeleton, or null
    • getTorsoLink

      public TorsoLink getTorsoLink()
      Access the TorsoLink. Returns null if the control is not added to a Spatial.
      Returns:
      the pre-existing TorsoLink, or null
    • getTransformer

      public com.jme3.scene.Spatial getTransformer()
      Access the Spatial with the mesh-coordinate transform. Returns null if the control is not added to a Spatial.
      Returns:
      the pre-existing spatial, or null
    • isReady

      public boolean isReady()
      Test whether this control is ready for dynamic mode.
      Returns:
      true if ready, otherwise false
    • listLinks

      public <T extends PhysicsLink> List<T> listLinks(Class<T> linkType)
      Enumerate physics links of the specified type managed by this control.
      Type Parameters:
      T - subclass of PhysicsLink
      Parameters:
      linkType - the subclass of PhysicsLink to search for (not null)
      Returns:
      a new array of links (not null, not empty)
    • listRigidBodies

      public PhysicsRigidBody[] listRigidBodies()
      Enumerate all rigid bodies managed by this control.

      Allowed only when the control IS added to a Spatial.

      Returns:
      a new array of pre-existing rigid bodies (not null, not empty)
    • rebuild

      public void rebuild()
      Rebuild the ragdoll. This is useful if you applied scale to the model after it was initialized.

      Allowed only when the control IS added to a Spatial.

    • setMass

      public void setMass(PhysicsLink link, float mass)
      Alter the mass of the specified link.
      Parameters:
      link - the link to modify (not null)
      mass - the desired mass (>0)
    • verifyReadyForDynamicMode

      public void verifyReadyForDynamicMode(String desiredAction)
      Verify that this control is ready for dynamic mode, which implies that it is added to a Spatial, added to a PhysicsSpace, and the physics has been stepped.
      Parameters:
      desiredAction - (not null, not empty)
    • getBoneLinks

      protected List<BoneLink> getBoneLinks()
      Access the list of bone links in a pre-order, depth-first traversal of the link hierarchy.
      Returns:
      the pre-existing list (not null)
    • listAttachmentLinks

      protected Collection<AttachmentLink> listAttachmentLinks()
      Enumerate attachment links.
      Returns:
      a collection view of values in the internal map (not null)
    • verifyAddedToSpatial

      protected void verifyAddedToSpatial(String desiredAction)
      Verify that this control is added to a Spatial.
      Parameters:
      desiredAction - (not null, not empty)
    • addPhysics

      protected void addPhysics()
      Add all managed physics objects to the PhysicsSpace.
      Specified by:
      addPhysics in class AbstractPhysicsControl
    • attachmentMass

      public float attachmentMass(String boneName)
      Read the mass of the attachment associated with the named bone.
      Overrides:
      attachmentMass in class DacConfiguration
      Parameters:
      boneName - the name of the associated bone (not null, not empty)
      Returns:
      the mass (in physics units, >0) or NaN if undetermined
    • cloneFields

      public void cloneFields(com.jme3.util.clone.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 com.jme3.util.clone.JmeCloneable
      Overrides:
      cloneFields in class DacConfiguration
      Parameters:
      cloner - the Cloner that's cloning this Control (not null, modified)
      original - the instance from which this Control was shallow-cloned (not null, unaffected)
    • createSpatialData

      protected void createSpatialData(com.jme3.scene.Spatial spatial)
      Create spatial-dependent data. Invoked each time the Control is added to a Spatial. Also invoked by rebuild().
      Specified by:
      createSpatialData in class AbstractPhysicsControl
      Parameters:
      spatial - the controlled spatial (not null)
    • mass

      public float mass(String boneName)
      Return the mass of the named bone/torso.
      Overrides:
      mass in class DacConfiguration
      Parameters:
      boneName - the name of the bone/torso (not null)
      Returns:
      the mass (>0) or NaN if undetermined
    • read

      public void read(com.jme3.export.JmeImporter importer) throws IOException
      De-serialize this Control 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 DacConfiguration
      Parameters:
      importer - (not null)
      Throws:
      IOException - from the importer
    • removePhysics

      protected void removePhysics()
      Remove all managed physics objects from the PhysicsSpace.
      Specified by:
      removePhysics in class AbstractPhysicsControl
    • removeSpatialData

      protected void removeSpatialData(com.jme3.scene.Spatial spatial)
      Remove spatial-dependent data. Invoked each time this control is rebuilt or removed from a Spatial.
      Specified by:
      removeSpatialData in class AbstractPhysicsControl
      Parameters:
      spatial - the Spatial to which this Control was added (unused)
    • setAttachmentConfig

      public void setAttachmentConfig(String boneName, LinkConfig config)
      Alter the configuration of the attachment associated with the named bone.
      Overrides:
      setAttachmentConfig in class DacConfiguration
      Parameters:
      boneName - the name of the associated bone (not null, not empty)
      config - the desired configuration (not null)
    • setAttachmentMass

      public void setAttachmentMass(String boneName, float mass)
      Alter the mass of the attachment associated with the named bone.
      Overrides:
      setAttachmentMass in class DacConfiguration
      Parameters:
      boneName - the name of the associated bone (not null, not empty)
      mass - the desired mass (>0)
    • setDamping

      public void setDamping(float dampingRatio)
      Alter the viscous damping ratio for all rigid bodies, including new ones.
      Overrides:
      setDamping in class DacConfiguration
      Parameters:
      dampingRatio - the desired damping ratio (non-negative, 0→no damping, 1→critically damped, default=0.6)
    • setGravity

      public void setGravity(com.jme3.math.Vector3f gravity)
      Alter this control's gravitational acceleration for Ragdoll mode.
      Overrides:
      setGravity in class DacConfiguration
      Parameters:
      gravity - the desired acceleration vector (in physics-space coordinates, not null, unaffected, default=(0,-9.8,0))
    • setJointLimits

      public void setJointLimits(String boneName, RangeOfMotion rom)
      Alter the range of motion of the joint connecting the named BoneLink to its parent in the link hierarchy.
      Overrides:
      setJointLimits in class DacConfiguration
      Parameters:
      boneName - the name of the BoneLink (not null, not empty)
      rom - the desired range of motion (not null)
    • setMainBoneName

      public void setMainBoneName(String boneName)
      Specify the main bone.
      Overrides:
      setMainBoneName in class DacConfiguration
      Parameters:
      boneName - the name of the desired bone, or null to determine the main bone heuristically when the control is added to a spatial
    • setMass

      public void setMass(String boneName, float mass)
      Alter the mass of the named bone/torso.
      Overrides:
      setMass in class DacConfiguration
      Parameters:
      boneName - the name of the bone, or torsoName (not null)
      mass - the desired mass (>0)
    • setPhysicsLocation

      protected void setPhysicsLocation(com.jme3.math.Vector3f vec)
      Translate the torso to the specified location.
      Specified by:
      setPhysicsLocation in class AbstractPhysicsControl
      Parameters:
      vec - desired location (not null, finite, unaffected)
    • setPhysicsRotation

      protected void setPhysicsRotation(com.jme3.math.Quaternion quat)
      Rotate the torso to the specified orientation.
      Specified by:
      setPhysicsRotation in class AbstractPhysicsControl
      Parameters:
      quat - desired orientation (not null, not zero, unaffected)
    • totalMass

      public float totalMass()
      Return the ragdoll's total mass, including attachments.
      Overrides:
      totalMass in class DacConfiguration
      Returns:
      the total mass (>0) or NaN if undetermined
    • 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. Do not invoke directly from user code.
      Specified by:
      update in interface com.jme3.scene.control.Control
      Parameters:
      tpf - the time interval between frames (in seconds, ≥0)
    • write

      public void write(com.jme3.export.JmeExporter exporter) throws IOException
      Serialize this Control 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 DacConfiguration
      Parameters:
      exporter - (not null)
      Throws:
      IOException - from the exporter
    • physicsTick

      public void physicsTick(PhysicsSpace space, float timeStep)
      Callback from Bullet, invoked just after the physics has been stepped. Used to re-activate any deactivated rigid bodies.
      Specified by:
      physicsTick in interface PhysicsTickListener
      Parameters:
      space - the space that was just stepped (not null)
      timeStep - the duration of the simulation step (in seconds, ≥0)
    • prePhysicsTick

      public void prePhysicsTick(PhysicsSpace space, float timeStep)
      Callback from Bullet, invoked just before the physics is stepped. A good time to clear/apply forces.
      Specified by:
      prePhysicsTick in interface PhysicsTickListener
      Parameters:
      space - the space that is about to be stepped (not null)
      timeStep - the duration of the simulation step (in seconds, ≥0)