Class BaseCollisionCollection
java.lang.Object
org.web3d.vrml.renderer.common.nodes.AbstractNode
org.web3d.vrml.renderer.common.nodes.rigidphysics.BaseCollisionCollection
- All Implemented Interfaces:
VRMLNode
,FrameStateListener
,VRMLChildNodeType
,VRMLNBodyGroupNodeType
,VRMLNodeType
,VRMLWorldRootChildNodeType
- Direct Known Subclasses:
NRCollisionCollection
,OGLCollisionCollection
public abstract class BaseCollisionCollection
extends AbstractNode
implements VRMLNBodyGroupNodeType, VRMLChildNodeType
Implementation of the Collidable node.
The base class provides most of the basic functionality, including interacting with the ODE portions. However, for returning the scene graph object appropriate for the renderer will require the derived class to take care of it.
The X3D definition of CollisionCollection is:
CollisionCollection : X3DChildNode { SFBool [in,out] autoSendContacts TRUE MFNode [in,out] collidables NULL [X3DNBodyCollisionSpaceNode, X3DNBodyCollidableNode] SFBool [in,out] enabled TRUE SFNode [in,out] metadata NULL [X3DMetadataObject] }
- Version:
- $Revision: 1.13 $
- Author:
- Justin Couch
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final String
Message for when the node in setValue() is not a primitiveprotected static final String
Message for when the node in setValue() is not a primitiveprotected static final int
The field index for appliedParametersprotected static final int
The field index for bounceprotected static final int
The field index for bounceSpeedprotected static final int
The field index for collidablesprotected static final int
The field index for enabledprotected static final int
The field index for frictionCoefficientsprotected static final int
The field index for slipCoefficientsprotected static final int
The field index for softnessConstantForceMixprotected static final int
The field index for softnessErrorCorrectionprotected static final int
The field index for surfaceSpeedSeparate param map to map the strings to our local internal constants.protected static final int
Last index used by this base nodeprotected static final String
Message when a negative bounce value is givenprotected static final String
Message when a negative bounce speed is givenprotected static final String
Message when a negative force mix value is givenprotected static final String
Message when a negative error correction value is givenprotected int
The number of valid parameters to applyMapping of parameter field names to the ODE constantsprotected String[]
The value of the appliedParameters fieldprotected float
The value of the bounce fieldprotected float
The value of the bounceSpeed fieldprotected boolean
The value of the enabled fieldprotected float[]
The value of the frictionCoefficients fieldprotected float[]
The value of the slipCoefficients fieldprotected float
The value of the softnessConstantForceMix fieldprotected float
The value of the softnessErrorCorrection fieldprotected float[]
The value of the surfaceSpeed fieldFields inherited from class org.web3d.vrml.renderer.common.nodes.AbstractNode
errorReporter, FIELD_METADATA, fieldLocalData, hasChanged, inSetup, isDEF, isStatic, LAST_NODE_INDEX, layerIds, nodeName, pMetadata, refCounts, removedLayerIds, stateManager, STATIC_SCENE_GRAPH, vfMetadata, vrmlMajorVersion, vrmlMinorVersion
-
Constructor Summary
ConstructorsConstructorDescriptionConstruct a new default CollisionCollection node object.Construct a new instance of this node based on the details from the given node. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
addCollidable
(VRMLNodeType node) Add a single child node to the list of available children.void
Apply the contacts right now.protected void
Clear the child node list of all children in the VRML node.void
delete()
This node is about to be deleted due to a change in loaded world.void
Tell the group to evaluate its contents now.org.odejava.collision.BulkContact
Fetch the most recent set of contacts that have been evaluated for this space.getFieldDeclaration
(int index) Get the declaration of the field at the given index.int
getFieldIndex
(String fieldName) Get the index of the given field name.getFieldValue
(int index) Get the value of a field.int[]
Get the list of indices that correspond to fields that contain nodes ie MFNode and SFNode).int
Get the number of fields.int
Get the primary type of this node.boolean
Is this group enabled for use right now?int
Fetch the number of contacts that were generated during the last evaluation.void
sendRoute
(double time, int srcIndex, VRMLNodeType destNode, int destIndex) Send a routed value from this node to the given destination node.void
setOwningWorld
(org.odejava.World wld) Set the owning world for this collision space.void
Notification that the construction phase of this node has finished.void
setValue
(int index, boolean value) Set the value of the field at the given index as a single boolean.void
setValue
(int index, float value) Set the value of the field at the given index as a single float.void
setValue
(int index, float[] value, int numValid) Set the value of the field at the given index as an array of floats.void
Set the value of the field at the given index as an array of strings.void
setValue
(int index, VRMLNodeType child) Set the value of the field at the given index as a node.void
setValue
(int index, VRMLNodeType[] children, int numValid) Set the value of the field at the given index as an array of nodes.Methods inherited from class org.web3d.vrml.renderer.common.nodes.AbstractNode
addNodeListener, allEventsComplete, checkNodeType, checkSecondaryType, checkSecondaryType, clearRemovedLayerIds, fireFieldChanged, getLayerIds, getMetadataObject, getRefCount, getRemovedLayerIds, getSecondaryType, getUserData, getVRMLNodeName, hasFieldChanged, isDEF, isSetupFinished, notifyExternProtoLoaded, removeNodeListener, setDEF, setErrorReporter, setFrameStateManager, setMetadataObject, setUserData, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setVersion, throwInitOnlyWriteException, throwInputOnlyWriteException, throwInvalidNodeException, throwInvalidProtoException, throwOutputOnlyWriteException, updateRefCount, updateRefs
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.web3d.vrml.nodes.FrameStateListener
allEventsComplete
Methods inherited from interface org.web3d.vrml.lang.VRMLNode
getSecondaryType, getUserData, getVRMLNodeName, isDEF, setErrorReporter, setUserData, setVersion
Methods inherited from interface org.web3d.vrml.nodes.VRMLNodeType
addNodeListener, clearRemovedLayerIds, getLayerIds, getMetadataObject, getRefCount, getRemovedLayerIds, hasFieldChanged, isSetupFinished, notifyExternProtoLoaded, removeNodeListener, setDEF, setFrameStateManager, setMetadataObject, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, updateRefCount
-
Field Details
-
FIELD_COLLIDABLES
protected static final int FIELD_COLLIDABLESThe field index for collidables- See Also:
-
FIELD_ENABLED
protected static final int FIELD_ENABLEDThe field index for enabled- See Also:
-
FIELD_BOUNCE
protected static final int FIELD_BOUNCEThe field index for bounce- See Also:
-
FIELD_BOUNCE_SPEED
protected static final int FIELD_BOUNCE_SPEEDThe field index for bounceSpeed- See Also:
-
FIELD_FRICTION_COEFFICIENTS
protected static final int FIELD_FRICTION_COEFFICIENTSThe field index for frictionCoefficients- See Also:
-
FIELD_SLIP_COEFFICIENTS
protected static final int FIELD_SLIP_COEFFICIENTSThe field index for slipCoefficients- See Also:
-
FIELD_SURFACE_SPEED
protected static final int FIELD_SURFACE_SPEEDThe field index for surfaceSpeed- See Also:
-
FIELD_APPLIED_PARAMETERS
protected static final int FIELD_APPLIED_PARAMETERSThe field index for appliedParameters- See Also:
-
FIELD_SOFTNESS_CFM
protected static final int FIELD_SOFTNESS_CFMThe field index for softnessConstantForceMix- See Also:
-
FIELD_SOFTNESS_ERP
protected static final int FIELD_SOFTNESS_ERPThe field index for softnessErrorCorrection- See Also:
-
LAST_COLLECTION_INDEX
protected static final int LAST_COLLECTION_INDEXLast index used by this base node- See Also:
-
COLLIDABLE_PROTO_MSG
Message for when the node in setValue() is not a primitive- See Also:
-
COLLIDABLE_NODE_MSG
Message for when the node in setValue() is not a primitive- See Also:
-
NEG_BOUNCE_MSG
Message when a negative bounce value is given- See Also:
-
NEG_BOUNCE_SPEED_MSG
Message when a negative bounce speed is given- See Also:
-
NEG_ERP_MSG
Message when a negative error correction value is given- See Also:
-
NEG_CFM_MSG
Message when a negative force mix value is given- See Also:
-
parameterIdMap
-
internalParamIdMap
Separate param map to map the strings to our local internal constants. The values in OdeConstants are not really constants at all - they're automatically generated each time the application starts up. GRRrrrr. Means we can't use them in switch statements. :( -
vfEnabled
protected boolean vfEnabledThe value of the enabled field -
vfBounce
protected float vfBounceThe value of the bounce field -
vfBounceSpeed
protected float vfBounceSpeedThe value of the bounceSpeed field -
vfFrictionCoefficients
protected float[] vfFrictionCoefficientsThe value of the frictionCoefficients field -
vfSlipCoefficients
protected float[] vfSlipCoefficientsThe value of the slipCoefficients field -
vfSurfaceSpeed
protected float[] vfSurfaceSpeedThe value of the surfaceSpeed field -
vfAppliedParameters
The value of the appliedParameters field -
numAppliedParameters
protected int numAppliedParametersThe number of valid parameters to apply -
vfSoftnessErrorCorrection
protected float vfSoftnessErrorCorrectionThe value of the softnessErrorCorrection field -
vfSoftnessConstantForceMix
protected float vfSoftnessConstantForceMixThe value of the softnessConstantForceMix field
-
-
Constructor Details
-
BaseCollisionCollection
public BaseCollisionCollection()Construct a new default CollisionCollection node object. -
BaseCollisionCollection
Construct a new instance of this node based on the details from the given node. If the node is not the same type, an exception will be thrown.- Parameters:
node
- The node to copy- Throws:
IllegalArgumentException
- The node is not the same type
-
-
Method Details
-
setOwningWorld
public void setOwningWorld(org.odejava.World wld) Set the owning world for this collision space. This is a hack to get around a bad assumption made by ODE - that there is only ever one world current at time. This is the owner world of this collsion system.- Specified by:
setOwningWorld
in interfaceVRMLNBodyGroupNodeType
- Parameters:
wld
- The world instance we're using.
-
delete
public void delete()This node is about to be deleted due to a change in loaded world. Clear up the ODE resources in use.- Specified by:
delete
in interfaceVRMLNBodyGroupNodeType
-
evaluateCollisions
public void evaluateCollisions()Tell the group to evaluate its contents now. This will generate contacts as needed.- Specified by:
evaluateCollisions
in interfaceVRMLNBodyGroupNodeType
-
numContacts
public int numContacts()Fetch the number of contacts that were generated during the last evaluation. Needed so that we can iterate through the BulkContact object returned fromgetContacts()
.- Specified by:
numContacts
in interfaceVRMLNBodyGroupNodeType
- Returns:
- A non-negative size indicator
-
getContacts
public org.odejava.collision.BulkContact getContacts()Fetch the most recent set of contacts that have been evaluated for this space. The bulk object can be used to step through all the available contacts that were generated.- Specified by:
getContacts
in interfaceVRMLNBodyGroupNodeType
- Returns:
- The set of bulk contacts generated
-
applyContacts
public void applyContacts()Apply the contacts right now. All processing is complete, so it's fine to continue the evaluation from before.- Specified by:
applyContacts
in interfaceVRMLNBodyGroupNodeType
-
isEnabled
public boolean isEnabled()Is this group enabled for use right now?- Specified by:
isEnabled
in interfaceVRMLNBodyGroupNodeType
- Returns:
- true if this is enabled
-
setupFinished
public void setupFinished()Notification that the construction phase of this node has finished. If the node would like to do any internal processing, such as setting up geometry, then go for it now.- Specified by:
setupFinished
in interfaceVRMLNodeType
- Overrides:
setupFinished
in classAbstractNode
-
getFieldIndex
Get the index of the given field name. If the name does not exist for this node then return a value of -1.- Specified by:
getFieldIndex
in interfaceVRMLNode
- Parameters:
fieldName
- The name of the field we want the index from- Returns:
- The index of the field name or -1
-
getNodeFieldIndices
public int[] getNodeFieldIndices()Get the list of indices that correspond to fields that contain nodes ie MFNode and SFNode). Used for blind scene graph traversal without needing to spend time querying for all fields etc. If a node does not have any fields that contain nodes, this shall return null. The field list covers all field types, regardless of whether they are readable or not at the VRML-level.- Specified by:
getNodeFieldIndices
in interfaceVRMLNode
- Returns:
- The list of field indices that correspond to SF/MFnode fields or null if none
-
getPrimaryType
public int getPrimaryType()Get the primary type of this node. Replaces the instanceof mechanism for use in switch statements.- Specified by:
getPrimaryType
in interfaceVRMLNode
- Returns:
- The primary type
-
getFieldDeclaration
Get the declaration of the field at the given index. This allows for reverse lookup if needed. If the field does not exist, this will give a value of null.- Specified by:
getFieldDeclaration
in interfaceVRMLNode
- Parameters:
index
- The index of the field to get information- Returns:
- A shape of this field's information
-
getNumFields
public int getNumFields()Get the number of fields.- Specified by:
getNumFields
in interfaceVRMLNode
- Returns:
- The number of fields.
-
getFieldValue
Get the value of a field. If the field is a primitive type, it will return a class representing the value. For arrays or nodes it will return the instance directly.- Specified by:
getFieldValue
in interfaceVRMLNodeType
- Overrides:
getFieldValue
in classAbstractNode
- Parameters:
index
- The index of the field to change.- Returns:
- The class representing the field value
- Throws:
InvalidFieldException
- The field index is not known
-
sendRoute
Send a routed value from this node to the given destination node. The route should use the appropriate setValue() method of the destination node. It should not attempt to cast the node up to a higher level. Routing should also follow the standard rules for the loop breaking and other appropriate rules for the specification.- Specified by:
sendRoute
in interfaceVRMLNodeType
- Overrides:
sendRoute
in classAbstractNode
- Parameters:
time
- The time that this route occurred (not necessarily epoch time. Should be treated as a relative value only)srcIndex
- The index of the field in this node that the value should be sent fromdestNode
- The node reference that we will be sending the value todestIndex
- The index of the field in the destination node that the value should be sent to.
-
setValue
public void setValue(int index, boolean value) throws InvalidFieldValueException, InvalidFieldException Set the value of the field at the given index as a single boolean. This would be used to set SFBool field types.- Specified by:
setValue
in interfaceVRMLNodeType
- Overrides:
setValue
in classAbstractNode
- Parameters:
index
- The index of destination field to setvalue
- The new value to use for the node- Throws:
InvalidFieldException
- The field index is not knowInvalidFieldValueException
- The value provided is not in range or not appropriate for this field
-
setValue
public void setValue(int index, float value) throws InvalidFieldValueException, InvalidFieldException Set the value of the field at the given index as a single float. This would be used to set SFFloat field types.- Specified by:
setValue
in interfaceVRMLNodeType
- Overrides:
setValue
in classAbstractNode
- Parameters:
index
- The index of destination field to setvalue
- The new value to use for the node- Throws:
InvalidFieldException
- The field index is not knowInvalidFieldValueException
- The value provided is not in range or not appropriate for this field
-
setValue
public void setValue(int index, float[] value, int numValid) throws InvalidFieldValueException, InvalidFieldException Set the value of the field at the given index as an array of floats. This would be used to set MFFloat, SFVec3f etc field types.- Specified by:
setValue
in interfaceVRMLNodeType
- Overrides:
setValue
in classAbstractNode
- Parameters:
index
- The index of destination field to setvalue
- The new value to use for the nodenumValid
- The number of valid items to use from the array- Throws:
InvalidFieldException
- The field index is not knowInvalidFieldValueException
- The value provided is not in range or not appropriate for this field
-
setValue
public void setValue(int index, String[] value, int numValid) throws InvalidFieldValueException, InvalidFieldException Set the value of the field at the given index as an array of strings. This would be used to set MFString field types.- Specified by:
setValue
in interfaceVRMLNodeType
- Overrides:
setValue
in classAbstractNode
- Parameters:
index
- The index of destination field to setvalue
- The new value to use for the nodenumValid
- The number of valid items to use from the array- Throws:
InvalidFieldException
- The field index is not knowInvalidFieldValueException
- The value provided is not in range or not appropriate for this field
-
setValue
public void setValue(int index, VRMLNodeType child) throws InvalidFieldException, InvalidFieldValueException Set the value of the field at the given index as a node. This would be used to set SFNode field types.- Specified by:
setValue
in interfaceVRMLNodeType
- Overrides:
setValue
in classAbstractNode
- Parameters:
index
- The index of destination field to setchild
- The new value to use for the node- Throws:
InvalidFieldValueException
- The node does not match the required type.InvalidFieldException
- The field index is not known
-
setValue
public void setValue(int index, VRMLNodeType[] children, int numValid) throws InvalidFieldException, InvalidFieldValueException, InvalidFieldAccessException Set the value of the field at the given index as an array of nodes. This would be used to set MFNode field types.- Specified by:
setValue
in interfaceVRMLNodeType
- Overrides:
setValue
in classAbstractNode
- Parameters:
index
- The index of destination field to setchildren
- The new value to use for the nodenumValid
- The number of valid values to copy from the array- Throws:
InvalidFieldException
- The field index is not knownInvalidFieldValueException
- The value provided is out of range for the field type.InvalidFieldAccessException
- The call is attempting to write to a field that does not permit writing now
-
clearCollidables
protected void clearCollidables()Clear the child node list of all children in the VRML node. Override to provide.renderer-specific behaviour, but remember to also call this implementation too. -
addCollidable
Add a single child node to the list of available children. Override to provide.renderer-specific behaviour, but remember to also call this implementation too.- Parameters:
node
- The node to add- Throws:
InvalidFieldValueException
- This is a bindable node shared
-