1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-26 15:39:51 +00:00

Merge branch 'falldamage' into 'master'

Restore fall damage

See merge request OpenMW/openmw!345
This commit is contained in:
AnyOldName3 2020-10-16 19:54:00 +00:00
commit de7bafcbbd

View File

@ -515,26 +515,27 @@ namespace MWPhysics
mPreStepBarrier->wait(); mPreStepBarrier->wait();
int job = 0; int job = 0;
while ((job = mNextJob.fetch_add(1, std::memory_order_relaxed)) < mNumJobs) while (mRemainingSteps && (job = mNextJob.fetch_add(1, std::memory_order_relaxed)) < mNumJobs)
{ {
MaybeSharedLock<std::shared_timed_mutex> lockColWorld(mCollisionWorldMutex, mThreadSafeBullet); MaybeSharedLock<std::shared_timed_mutex> lockColWorld(mCollisionWorldMutex, mThreadSafeBullet);
if(const auto actor = mActorsFrameData[job].mActor.lock()) if(const auto actor = mActorsFrameData[job].mActor.lock())
{ MovementSolver::move(mActorsFrameData[job], mPhysicsDt, mCollisionWorld.get(), *mWorldFrameData);
if (mRemainingSteps)
MovementSolver::move(mActorsFrameData[job], mPhysicsDt, mCollisionWorld.get(), *mWorldFrameData);
else
{
auto& actorData = mActorsFrameData[job];
handleFall(actorData, mAdvanceSimulation);
mMovementResults[actorData.mPtr] = interpolateMovements(actorData, mTimeAccum, mPhysicsDt);
}
}
} }
mPostStepBarrier->wait(); mPostStepBarrier->wait();
if (!mRemainingSteps) if (!mRemainingSteps)
{ {
while ((job = mNextJob.fetch_add(1, std::memory_order_relaxed)) < mNumJobs)
{
if(const auto actor = mActorsFrameData[job].mActor.lock())
{
auto& actorData = mActorsFrameData[job];
handleFall(actorData, mAdvanceSimulation);
mMovementResults[actorData.mPtr] = interpolateMovements(actorData, mTimeAccum, mPhysicsDt);
}
}
if (mLOSCacheExpiry >= 0) if (mLOSCacheExpiry >= 0)
refreshLOSCache(); refreshLOSCache();
mPostSimBarrier->wait(); mPostSimBarrier->wait();