Jolt Physics
A multi core friendly Game Physics Engine
Loading...
Searching...
No Matches
CalculateSolverSteps.h
Go to the documentation of this file.
1// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2// SPDX-FileCopyrightText: 2023 Jorrit Rouwe
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
8
10
13class CalculateSolverSteps
14{
15public:
17 JPH_INLINE explicit CalculateSolverSteps(const PhysicsSettings &inSettings) : mSettings(inSettings) { }
18
20 template <class Type>
21 JPH_INLINE void operator () (const Type *inObject)
22 {
23 uint num_velocity_steps = inObject->GetNumVelocityStepsOverride();
24 mNumVelocitySteps = max(mNumVelocitySteps, num_velocity_steps);
25 mApplyDefaultVelocity |= num_velocity_steps == 0;
26
27 uint num_position_steps = inObject->GetNumPositionStepsOverride();
28 mNumPositionSteps = max(mNumPositionSteps, num_position_steps);
29 mApplyDefaultPosition |= num_position_steps == 0;
30 }
31
33 JPH_INLINE void Finalize()
34 {
35 // If we have a default velocity/position step count, take the max of the default and the overrides
36 if (mApplyDefaultVelocity)
37 mNumVelocitySteps = max(mNumVelocitySteps, mSettings.mNumVelocitySteps);
38 if (mApplyDefaultPosition)
39 mNumPositionSteps = max(mNumPositionSteps, mSettings.mNumPositionSteps);
40 }
41
43 JPH_INLINE uint GetNumPositionSteps() const { return mNumPositionSteps; }
44 JPH_INLINE uint GetNumVelocitySteps() const { return mNumVelocitySteps; }
45
46private:
47 const PhysicsSettings & mSettings;
48
49 uint mNumVelocitySteps = 0;
50 uint mNumPositionSteps = 0;
51
52 bool mApplyDefaultVelocity = false;
53 bool mApplyDefaultPosition = false;
54};
56
59class DummyCalculateSolverSteps
60{
61public:
62 template <class Type>
63 JPH_INLINE void operator () (const Type *) const
64 {
65 /* Nothing to do */
66 }
67};
69
unsigned int uint
Definition Core.h:492
#define JPH_NAMESPACE_END
Definition Core.h:419
#define JPH_NAMESPACE_BEGIN
Definition Core.h:413
Definition PhysicsSettings.h:28