Jolt Physics
A multi core friendly Game Physics Engine
|
Settings for constructing a rigid body. More...
#include <BodyCreationSettings.h>
Public Types | |
using | GroupFilterToIDMap = UnorderedMap<const GroupFilter *, uint32> |
using | IDToGroupFilterMap = Array<RefConst<GroupFilter>> |
using | ShapeToIDMap = Shape::ShapeToIDMap |
using | IDToShapeMap = Shape::IDToShapeMap |
using | MaterialToIDMap = Shape::MaterialToIDMap |
using | IDToMaterialMap = Shape::IDToMaterialMap |
using | BCSResult = Result<BodyCreationSettings> |
Public Member Functions | |
BodyCreationSettings ()=default | |
Constructor. | |
BodyCreationSettings (const ShapeSettings *inShape, RVec3Arg inPosition, QuatArg inRotation, EMotionType inMotionType, ObjectLayer inObjectLayer) | |
BodyCreationSettings (const Shape *inShape, RVec3Arg inPosition, QuatArg inRotation, EMotionType inMotionType, ObjectLayer inObjectLayer) | |
const ShapeSettings * | GetShapeSettings () const |
Access to the shape settings object. This contains serializable (non-runtime optimized) information about the Shape. | |
void | SetShapeSettings (const ShapeSettings *inShape) |
Shape::ShapeResult | ConvertShapeSettings () |
Convert ShapeSettings object into a Shape object. This will free the ShapeSettings object and make the object ready for runtime. Serialization is no longer possible after this. | |
const Shape * | GetShape () const |
Access to the run-time shape object. Will convert from ShapeSettings object if needed. | |
void | SetShape (const Shape *inShape) |
bool | HasMassProperties () const |
Check if the mass properties of this body will be calculated (only relevant for kinematic or dynamic objects that need a MotionProperties object) | |
MassProperties | GetMassProperties () const |
Calculate (or return when overridden) the mass and inertia for this body. | |
void | SaveBinaryState (StreamOut &inStream) const |
Saves the state of this object in binary form to inStream. Doesn't store the shape nor the group filter. | |
void | RestoreBinaryState (StreamIn &inStream) |
Restore the state of this object from inStream. Doesn't restore the shape nor the group filter. | |
void | SaveWithChildren (StreamOut &inStream, ShapeToIDMap *ioShapeMap, MaterialToIDMap *ioMaterialMap, GroupFilterToIDMap *ioGroupFilterMap) const |
Static Public Member Functions | |
static BCSResult | sRestoreWithChildren (StreamIn &inStream, IDToShapeMap &ioShapeMap, IDToMaterialMap &ioMaterialMap, IDToGroupFilterMap &ioGroupFilterMap) |
Restore a shape, all its children and materials. Pass in an empty map in ioShapeMap / ioMaterialMap / ioGroupFilterMap or reuse the same map while reading multiple shapes from the same stream in order to restore duplicates. | |
Public Attributes | |
RVec3 | mPosition = RVec3::sZero() |
Position of the body (not of the center of mass) | |
Quat | mRotation = Quat::sIdentity() |
Rotation of the body. | |
Vec3 | mLinearVelocity = Vec3::sZero() |
World space linear velocity of the center of mass (m/s) | |
Vec3 | mAngularVelocity = Vec3::sZero() |
World space angular velocity (rad/s) | |
uint64 | mUserData = 0 |
User data value (can be used by application) | |
Collision settings | |
ObjectLayer | mObjectLayer = 0 |
The collision layer this body belongs to (determines if two objects can collide) | |
CollisionGroup | mCollisionGroup |
The collision group this body belongs to (determines if two objects can collide) | |
Simulation properties | |
EMotionType | mMotionType = EMotionType::Dynamic |
Motion type, determines if the object is static, dynamic or kinematic. | |
bool | mAllowDynamicOrKinematic = false |
When this body is created as static, this setting tells the system to create a MotionProperties object so that the object can be switched to kinematic or dynamic. | |
bool | mIsSensor = false |
If this body is a sensor. A sensor will receive collision callbacks, but will not cause any collision responses and can be used as a trigger volume. See description at Body::SetIsSensor. | |
bool | mUseManifoldReduction = true |
If this body should use manifold reduction (see description at Body::SetUseManifoldReduction) | |
EMotionQuality | mMotionQuality = EMotionQuality::Discrete |
Motion quality, or how well it detects collisions when it has a high velocity. | |
bool | mAllowSleeping = true |
If this body can go to sleep or not. | |
float | mFriction = 0.2f |
Friction of the body (dimensionless number, usually between 0 and 1, 0 = no friction, 1 = friction force equals force that presses the two bodies together) | |
float | mRestitution = 0.0f |
Restitution of body (dimensionless number, usually between 0 and 1, 0 = completely inelastic collision response, 1 = completely elastic collision response) | |
float | mLinearDamping = 0.05f |
Linear damping: dv/dt = -c * v. c must be between 0 and 1 but is usually close to 0. | |
float | mAngularDamping = 0.05f |
Angular damping: dw/dt = -c * w. c must be between 0 and 1 but is usually close to 0. | |
float | mMaxLinearVelocity = 500.0f |
Maximum linear velocity that this body can reach (m/s) | |
float | mMaxAngularVelocity = 0.25f * JPH_PI * 60.0f |
Maximum angular velocity that this body can reach (rad/s) | |
float | mGravityFactor = 1.0f |
Value to multiply gravity with for this body. | |
Mass properties of the body (by default calculated by the shape) | |
EOverrideMassProperties | mOverrideMassProperties = EOverrideMassProperties::CalculateMassAndInertia |
Determines how mMassPropertiesOverride will be used. | |
float | mInertiaMultiplier = 1.0f |
When calculating the inertia (not when it is provided) the calculated inertia will be multiplied by this value. | |
MassProperties | mMassPropertiesOverride |
Contains replacement mass settings which override the automatically calculated values. | |
Settings for constructing a rigid body.
using BodyCreationSettings::GroupFilterToIDMap = UnorderedMap<const GroupFilter *, uint32> |
|
default |
Constructor.
|
inline |
|
inline |
Shape::ShapeResult BodyCreationSettings::ConvertShapeSettings | ( | ) |
Convert ShapeSettings object into a Shape object. This will free the ShapeSettings object and make the object ready for runtime. Serialization is no longer possible after this.
MassProperties BodyCreationSettings::GetMassProperties | ( | ) | const |
Calculate (or return when overridden) the mass and inertia for this body.
const Shape * BodyCreationSettings::GetShape | ( | ) | const |
Access to the run-time shape object. Will convert from ShapeSettings object if needed.
|
inline |
Access to the shape settings object. This contains serializable (non-runtime optimized) information about the Shape.
|
inline |
Check if the mass properties of this body will be calculated (only relevant for kinematic or dynamic objects that need a MotionProperties object)
void BodyCreationSettings::RestoreBinaryState | ( | StreamIn & | inStream | ) |
Restore the state of this object from inStream. Doesn't restore the shape nor the group filter.
void BodyCreationSettings::SaveBinaryState | ( | StreamOut & | inStream | ) | const |
Saves the state of this object in binary form to inStream. Doesn't store the shape nor the group filter.
void BodyCreationSettings::SaveWithChildren | ( | StreamOut & | inStream, |
ShapeToIDMap * | ioShapeMap, | ||
MaterialToIDMap * | ioMaterialMap, | ||
GroupFilterToIDMap * | ioGroupFilterMap ) const |
Save this body creation settings, its shape and gropu filter. Pass in an empty map in ioShapeMap / ioMaterialMap / ioGroupFilterMap or reuse the same map while saving multiple shapes to the same stream in order to avoid writing duplicates. Pass nullptr to ioShapeMap and ioMaterial map to skip saving shapes Pass nullptr to ioGroupFilterMap to skip saving group filters
|
inline |
|
inline |
|
static |
Restore a shape, all its children and materials. Pass in an empty map in ioShapeMap / ioMaterialMap / ioGroupFilterMap or reuse the same map while reading multiple shapes from the same stream in order to restore duplicates.
bool BodyCreationSettings::mAllowDynamicOrKinematic = false |
When this body is created as static, this setting tells the system to create a MotionProperties object so that the object can be switched to kinematic or dynamic.
bool BodyCreationSettings::mAllowSleeping = true |
If this body can go to sleep or not.
float BodyCreationSettings::mAngularDamping = 0.05f |
Angular damping: dw/dt = -c * w. c must be between 0 and 1 but is usually close to 0.
Vec3 BodyCreationSettings::mAngularVelocity = Vec3::sZero() |
World space angular velocity (rad/s)
CollisionGroup BodyCreationSettings::mCollisionGroup |
The collision group this body belongs to (determines if two objects can collide)
float BodyCreationSettings::mFriction = 0.2f |
Friction of the body (dimensionless number, usually between 0 and 1, 0 = no friction, 1 = friction force equals force that presses the two bodies together)
float BodyCreationSettings::mGravityFactor = 1.0f |
Value to multiply gravity with for this body.
float BodyCreationSettings::mInertiaMultiplier = 1.0f |
When calculating the inertia (not when it is provided) the calculated inertia will be multiplied by this value.
bool BodyCreationSettings::mIsSensor = false |
If this body is a sensor. A sensor will receive collision callbacks, but will not cause any collision responses and can be used as a trigger volume. See description at Body::SetIsSensor.
float BodyCreationSettings::mLinearDamping = 0.05f |
Linear damping: dv/dt = -c * v. c must be between 0 and 1 but is usually close to 0.
Vec3 BodyCreationSettings::mLinearVelocity = Vec3::sZero() |
World space linear velocity of the center of mass (m/s)
MassProperties BodyCreationSettings::mMassPropertiesOverride |
Contains replacement mass settings which override the automatically calculated values.
float BodyCreationSettings::mMaxAngularVelocity = 0.25f * JPH_PI * 60.0f |
Maximum angular velocity that this body can reach (rad/s)
float BodyCreationSettings::mMaxLinearVelocity = 500.0f |
Maximum linear velocity that this body can reach (m/s)
EMotionQuality BodyCreationSettings::mMotionQuality = EMotionQuality::Discrete |
Motion quality, or how well it detects collisions when it has a high velocity.
EMotionType BodyCreationSettings::mMotionType = EMotionType::Dynamic |
Motion type, determines if the object is static, dynamic or kinematic.
ObjectLayer BodyCreationSettings::mObjectLayer = 0 |
The collision layer this body belongs to (determines if two objects can collide)
EOverrideMassProperties BodyCreationSettings::mOverrideMassProperties = EOverrideMassProperties::CalculateMassAndInertia |
Determines how mMassPropertiesOverride will be used.
RVec3 BodyCreationSettings::mPosition = RVec3::sZero() |
Position of the body (not of the center of mass)
float BodyCreationSettings::mRestitution = 0.0f |
Restitution of body (dimensionless number, usually between 0 and 1, 0 = completely inelastic collision response, 1 = completely elastic collision response)
Quat BodyCreationSettings::mRotation = Quat::sIdentity() |
Rotation of the body.
bool BodyCreationSettings::mUseManifoldReduction = true |
If this body should use manifold reduction (see description at Body::SetUseManifoldReduction)
uint64 BodyCreationSettings::mUserData = 0 |
User data value (can be used by application)