Skip to content

Commit

Permalink
PhysicsSettings (#70)
Browse files Browse the repository at this point in the history
* Expose PhysicsSettings;

* Use static_cast for bool narrowing;
  • Loading branch information
bjornbytes committed Apr 28, 2024
1 parent 829360b commit 1316510
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 0 deletions.
63 changes: 63 additions & 0 deletions src/joltc/joltc.cpp
Expand Up @@ -487,6 +487,69 @@ void JPH_PhysicsSystem_Destroy(JPH_PhysicsSystem* system)
}
}

void JPH_PhysicsSystem_SetPhysicsSettings(JPH_PhysicsSystem* system, JPH_PhysicsSettings* settings)
{
JPH::PhysicsSettings joltSettings;
joltSettings.mMaxInFlightBodyPairs = settings->maxInFlightBodyPairs;
joltSettings.mStepListenersBatchSize = settings->stepListenersBatchSize;
joltSettings.mStepListenerBatchesPerJob = settings->stepListenerBatchesPerJob;
joltSettings.mBaumgarte = settings->baumgarte;
joltSettings.mSpeculativeContactDistance = settings->speculativeContactDistance;
joltSettings.mPenetrationSlop = settings->penetrationSlop;
joltSettings.mLinearCastThreshold = settings->linearCastThreshold;
joltSettings.mLinearCastMaxPenetration = settings->linearCastMaxPenetration;
joltSettings.mManifoldToleranceSq = settings->manifoldToleranceSq;
joltSettings.mMaxPenetrationDistance = settings->maxPenetrationDistance;
joltSettings.mBodyPairCacheMaxDeltaPositionSq = settings->bodyPairCacheMaxDeltaPositionSq;
joltSettings.mBodyPairCacheCosMaxDeltaRotationDiv2 = settings->bodyPairCacheCosMaxDeltaRotationDiv2;
joltSettings.mContactNormalCosMaxDeltaRotation = settings->contactNormalCosMaxDeltaRotation;
joltSettings.mContactPointPreserveLambdaMaxDistSq = settings->contactPointPreserveLambdaMaxDistSq;
joltSettings.mNumVelocitySteps = settings->numVelocitySteps;
joltSettings.mNumPositionSteps = settings->numPositionSteps;
joltSettings.mMinVelocityForRestitution = settings->minVelocityForRestitution;
joltSettings.mTimeBeforeSleep = settings->timeBeforeSleep;
joltSettings.mPointVelocitySleepThreshold = settings->pointVelocitySleepThreshold;
joltSettings.mDeterministicSimulation = static_cast<bool>(settings->deterministicSimulation);
joltSettings.mConstraintWarmStart = static_cast<bool>(settings->constraintWarmStart);
joltSettings.mUseBodyPairContactCache = static_cast<bool>(settings->useBodyPairContactCache);
joltSettings.mUseManifoldReduction = static_cast<bool>(settings->useManifoldReduction);
joltSettings.mUseLargeIslandSplitter = static_cast<bool>(settings->useLargeIslandSplitter);
joltSettings.mAllowSleeping = static_cast<bool>(settings->allowSleeping);
joltSettings.mCheckActiveEdges = static_cast<bool>(settings->checkActiveEdges);
system->physicsSystem->SetPhysicsSettings(joltSettings);
}

void JPH_PhysicsSystem_GetPhysicsSettings(JPH_PhysicsSystem* system, JPH_PhysicsSettings* result)
{
auto joltSettings = system->physicsSystem->GetPhysicsSettings();
result->maxInFlightBodyPairs = joltSettings.mMaxInFlightBodyPairs;
result->stepListenersBatchSize = joltSettings.mStepListenersBatchSize;
result->stepListenerBatchesPerJob = joltSettings.mStepListenerBatchesPerJob;
result->baumgarte = joltSettings.mBaumgarte;
result->speculativeContactDistance = joltSettings.mSpeculativeContactDistance;
result->penetrationSlop = joltSettings.mPenetrationSlop;
result->linearCastThreshold = joltSettings.mLinearCastThreshold;
result->linearCastMaxPenetration = joltSettings.mLinearCastMaxPenetration;
result->manifoldToleranceSq = joltSettings.mManifoldToleranceSq;
result->maxPenetrationDistance = joltSettings.mMaxPenetrationDistance;
result->bodyPairCacheMaxDeltaPositionSq = joltSettings.mBodyPairCacheMaxDeltaPositionSq;
result->bodyPairCacheCosMaxDeltaRotationDiv2 = joltSettings.mBodyPairCacheCosMaxDeltaRotationDiv2;
result->contactNormalCosMaxDeltaRotation = joltSettings.mContactNormalCosMaxDeltaRotation;
result->contactPointPreserveLambdaMaxDistSq = joltSettings.mContactPointPreserveLambdaMaxDistSq;
result->numVelocitySteps = joltSettings.mNumVelocitySteps;
result->numPositionSteps = joltSettings.mNumPositionSteps;
result->minVelocityForRestitution = joltSettings.mMinVelocityForRestitution;
result->timeBeforeSleep = joltSettings.mTimeBeforeSleep;
result->pointVelocitySleepThreshold = joltSettings.mPointVelocitySleepThreshold;
result->deterministicSimulation = joltSettings.mDeterministicSimulation;
result->constraintWarmStart = joltSettings.mConstraintWarmStart;
result->useBodyPairContactCache = joltSettings.mUseBodyPairContactCache;
result->useManifoldReduction = joltSettings.mUseManifoldReduction;
result->useLargeIslandSplitter = joltSettings.mUseLargeIslandSplitter;
result->allowSleeping = joltSettings.mAllowSleeping;
result->checkActiveEdges = joltSettings.mCheckActiveEdges;
}

void JPH_PhysicsSystem_OptimizeBroadPhase(JPH_PhysicsSystem* system)
{
JPH_ASSERT(system);
Expand Down
32 changes: 32 additions & 0 deletions src/joltc/joltc.h
Expand Up @@ -549,9 +549,41 @@ typedef struct JPH_PhysicsSystemSettings {
JPH_ObjectVsBroadPhaseLayerFilter* objectVsBroadPhaseLayerFilter;
} JPH_PhysicsSystemSettings;

typedef struct JPH_PhysicsSettings {
int maxInFlightBodyPairs;
int stepListenersBatchSize;
int stepListenerBatchesPerJob;
float baumgarte;
float speculativeContactDistance;
float penetrationSlop;
float linearCastThreshold;
float linearCastMaxPenetration;
float manifoldToleranceSq;
float maxPenetrationDistance;
float bodyPairCacheMaxDeltaPositionSq;
float bodyPairCacheCosMaxDeltaRotationDiv2;
float contactNormalCosMaxDeltaRotation;
float contactPointPreserveLambdaMaxDistSq;
uint32_t numVelocitySteps;
uint32_t numPositionSteps;
float minVelocityForRestitution;
float timeBeforeSleep;
float pointVelocitySleepThreshold;
JPH_Bool32 deterministicSimulation;
JPH_Bool32 constraintWarmStart;
JPH_Bool32 useBodyPairContactCache;
JPH_Bool32 useManifoldReduction;
JPH_Bool32 useLargeIslandSplitter;
JPH_Bool32 allowSleeping;
JPH_Bool32 checkActiveEdges;
} JPH_PhysicsSettings;

JPH_CAPI JPH_PhysicsSystem* JPH_PhysicsSystem_Create(const JPH_PhysicsSystemSettings* settings);
JPH_CAPI void JPH_PhysicsSystem_Destroy(JPH_PhysicsSystem* system);

JPH_CAPI void JPH_PhysicsSystem_SetPhysicsSettings(JPH_PhysicsSystem* system, JPH_PhysicsSettings* settings);
JPH_CAPI void JPH_PhysicsSystem_GetPhysicsSettings(JPH_PhysicsSystem* system, JPH_PhysicsSettings* result);

JPH_CAPI void JPH_PhysicsSystem_OptimizeBroadPhase(JPH_PhysicsSystem* system);
JPH_CAPI JPH_PhysicsUpdateError JPH_PhysicsSystem_Step(JPH_PhysicsSystem* system, float deltaTime, int collisionSteps);

Expand Down

0 comments on commit 1316510

Please sign in to comment.