Physics2D/PhysWorld2D: Add invStepCount argument to pre/post steps callbacks
This commit is contained in:
parent
d1a969288f
commit
95f137816a
|
|
@ -94,6 +94,7 @@ Nazara Engine:
|
||||||
- ⚠️ Stream::ReadLine will now returns empty lines if present in the file
|
- ⚠️ Stream::ReadLine will now returns empty lines if present in the file
|
||||||
- Fixed cubemaps seams with OpenGL
|
- Fixed cubemaps seams with OpenGL
|
||||||
- HandledObject movement constructor/assignement operator are now marked noexcept
|
- HandledObject movement constructor/assignement operator are now marked noexcept
|
||||||
|
- ⚠️ PhysWorld2D callbacks OnPhysWorld2DPreStep and OnPhysWorld2DPostStep now takes a invStepCount depending on the number of step taken this update, fixing force application and other
|
||||||
|
|
||||||
Nazara Development Kit:
|
Nazara Development Kit:
|
||||||
- Added ImageWidget (#139)
|
- Added ImageWidget (#139)
|
||||||
|
|
|
||||||
|
|
@ -123,8 +123,8 @@ namespace Nz
|
||||||
float fraction;
|
float fraction;
|
||||||
};
|
};
|
||||||
|
|
||||||
NazaraSignal(OnPhysWorld2DPreStep, const PhysWorld2D* /*physWorld*/);
|
NazaraSignal(OnPhysWorld2DPreStep, const PhysWorld2D* /*physWorld*/, float /*invStepCount*/);
|
||||||
NazaraSignal(OnPhysWorld2DPostStep, const PhysWorld2D* /*physWorld*/);
|
NazaraSignal(OnPhysWorld2DPostStep, const PhysWorld2D* /*physWorld*/, float /*invStepCount*/);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void InitCallbacks(cpCollisionHandler* handler, const Callback& callbacks);
|
void InitCallbacks(cpCollisionHandler* handler, const Callback& callbacks);
|
||||||
|
|
|
||||||
|
|
@ -311,14 +311,15 @@ namespace Nz
|
||||||
{
|
{
|
||||||
m_timestepAccumulator += timestep;
|
m_timestepAccumulator += timestep;
|
||||||
|
|
||||||
std::size_t stepCount = 0;
|
std::size_t stepCount = std::min(static_cast<std::size_t>(m_timestepAccumulator / m_stepSize), m_maxStepCount);
|
||||||
while (m_timestepAccumulator >= m_stepSize && stepCount < m_maxStepCount)
|
float invStepCount = 1.f / stepCount;
|
||||||
|
for (std::size_t i = 0; i < stepCount; ++i)
|
||||||
{
|
{
|
||||||
OnPhysWorld2DPreStep(this);
|
OnPhysWorld2DPreStep(this, invStepCount);
|
||||||
|
|
||||||
cpSpaceStep(m_handle, m_stepSize);
|
cpSpaceStep(m_handle, m_stepSize);
|
||||||
|
|
||||||
OnPhysWorld2DPostStep(this);
|
OnPhysWorld2DPostStep(this, invStepCount);
|
||||||
if (!m_rigidPostSteps.empty())
|
if (!m_rigidPostSteps.empty())
|
||||||
{
|
{
|
||||||
for (const auto& pair : m_rigidPostSteps)
|
for (const auto& pair : m_rigidPostSteps)
|
||||||
|
|
@ -331,7 +332,6 @@ namespace Nz
|
||||||
}
|
}
|
||||||
|
|
||||||
m_timestepAccumulator -= m_stepSize;
|
m_timestepAccumulator -= m_stepSize;
|
||||||
stepCount++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue