mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-16 16:10:58 +00:00
31d8ce266b
When a position is forced, the actor position in physics subsystem is overriden. The background physics thread is not made aware of this, its result are simply discarded. There is a short window where this doesn't work (in this example, actor is at A and script moves it to B) 1) actor position is set to B. (among others, Actor::mPosition is set to B) 2) physics thread reset Actor::mPosition with stale value (around A) 3) main thread read simulation result, reset Actor::mSkipSimulation flag => actor is at B 4) physics thread fetch latest Actor::mPosition value, which is around A 5) main thread read simulation result, actor is around A To avoid this situation, do not perform 2) until after 3) occurs. This way, at 4) starts the simulation with up-to-date Actor::mPosition |
||
---|---|---|
.. | ||
actor.cpp | ||
actor.hpp | ||
actorconvexcallback.cpp | ||
actorconvexcallback.hpp | ||
closestnotmerayresultcallback.cpp | ||
closestnotmerayresultcallback.hpp | ||
collisiontype.hpp | ||
constants.hpp | ||
contacttestresultcallback.cpp | ||
contacttestresultcallback.hpp | ||
contacttestwrapper.cpp | ||
contacttestwrapper.h | ||
deepestnotmecontacttestresultcallback.cpp | ||
deepestnotmecontacttestresultcallback.hpp | ||
hasspherecollisioncallback.hpp | ||
heightfield.cpp | ||
heightfield.hpp | ||
movementsolver.cpp | ||
movementsolver.hpp | ||
mtphysics.cpp | ||
mtphysics.hpp | ||
object.cpp | ||
object.hpp | ||
physicssystem.cpp | ||
physicssystem.hpp | ||
projectile.cpp | ||
projectile.hpp | ||
projectileconvexcallback.cpp | ||
projectileconvexcallback.hpp | ||
ptrholder.hpp | ||
raycasting.hpp | ||
stepper.cpp | ||
stepper.hpp | ||
trace.cpp | ||
trace.h |