1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-21 09:39:56 +00:00

Merge branch 'misc_cleanup' into 'master'

Small cleanup

See merge request OpenMW/openmw!482
This commit is contained in:
Alexei Dobrohotov 2020-12-20 19:10:06 +00:00
commit ce36dd8a52
6 changed files with 29 additions and 28 deletions

View File

@ -2,11 +2,6 @@
#include <BulletCollision/CollisionDispatch/btCollisionObject.h> #include <BulletCollision/CollisionDispatch/btCollisionObject.h>
#include <components/misc/convert.hpp>
#include "../mwbase/world.hpp"
#include "../mwbase/environment.hpp"
#include "collisiontype.hpp" #include "collisiontype.hpp"
#include "projectile.hpp" #include "projectile.hpp"

View File

@ -41,15 +41,21 @@ namespace MWPhysics
btCollisionWorld::ClosestRayResultCallback::addSingleResult(rayResult, normalInWorldSpace); btCollisionWorld::ClosestRayResultCallback::addSingleResult(rayResult, normalInWorldSpace);
if (mProjectile) if (mProjectile)
{ {
auto* holder = static_cast<PtrHolder*>(rayResult.m_collisionObject->getUserPointer()); switch (rayResult.m_collisionObject->getBroadphaseHandle()->m_collisionFilterGroup)
if (auto* target = dynamic_cast<Actor*>(holder))
{ {
mProjectile->hit(target->getPtr(), m_hitPointWorld, m_hitNormalWorld); case CollisionType_Actor:
} {
else if (auto* target = dynamic_cast<Projectile*>(holder)) auto* target = static_cast<Actor*>(rayResult.m_collisionObject->getUserPointer());
{ mProjectile->hit(target->getPtr(), m_hitPointWorld, m_hitNormalWorld);
target->hit(mProjectile->getPtr(), m_hitPointWorld, m_hitNormalWorld); break;
mProjectile->hit(target->getPtr(), m_hitPointWorld, m_hitNormalWorld); }
case CollisionType_Projectile:
{
auto* target = static_cast<Projectile*>(rayResult.m_collisionObject->getUserPointer());
target->hit(mProjectile->getPtr(), m_hitPointWorld, m_hitNormalWorld);
mProjectile->hit(target->getPtr(), m_hitPointWorld, m_hitNormalWorld);
break;
}
} }
} }

View File

@ -236,16 +236,7 @@ namespace MWPhysics
mMovedActors.emplace_back(data.mActorRaw->getPtr()); mMovedActors.emplace_back(data.mActorRaw->getPtr());
} }
} }
updateStats(frameStart, frameNumber, stats);
if (mFrameNumber == frameNumber - 1)
{
stats.setAttribute(mFrameNumber, "physicsworker_time_begin", mTimer->delta_s(mFrameStart, mTimeBegin));
stats.setAttribute(mFrameNumber, "physicsworker_time_taken", mTimer->delta_s(mTimeBegin, mTimeEnd));
stats.setAttribute(mFrameNumber, "physicsworker_time_end", mTimer->delta_s(mFrameStart, mTimeEnd));
}
mFrameStart = frameStart;
mTimeBegin = mTimer->tick();
mFrameNumber = frameNumber;
} }
// init // init
@ -529,4 +520,17 @@ namespace MWPhysics
actorData.mActorRaw->setStandingOnPtr(actorData.mStandingOn); actorData.mActorRaw->setStandingOnPtr(actorData.mStandingOn);
} }
} }
void PhysicsTaskScheduler::updateStats(osg::Timer_t frameStart, unsigned int frameNumber, osg::Stats& stats)
{
if (mFrameNumber == frameNumber - 1)
{
stats.setAttribute(mFrameNumber, "physicsworker_time_begin", mTimer->delta_s(mFrameStart, mTimeBegin));
stats.setAttribute(mFrameNumber, "physicsworker_time_taken", mTimer->delta_s(mTimeBegin, mTimeEnd));
stats.setAttribute(mFrameNumber, "physicsworker_time_end", mTimer->delta_s(mFrameStart, mTimeEnd));
}
mFrameStart = frameStart;
mTimeBegin = mTimer->tick();
mFrameNumber = frameNumber;
}
} }

View File

@ -57,6 +57,7 @@ namespace MWPhysics
void refreshLOSCache(); void refreshLOSCache();
void updateAabbs(); void updateAabbs();
void updatePtrAabb(const std::weak_ptr<PtrHolder>& ptr); void updatePtrAabb(const std::weak_ptr<PtrHolder>& ptr);
void updateStats(osg::Timer_t frameStart, unsigned int frameNumber, osg::Stats& stats);
std::unique_ptr<WorldFrameData> mWorldFrameData; std::unique_ptr<WorldFrameData> mWorldFrameData;
std::vector<ActorFrameData> mActorsFrameData; std::vector<ActorFrameData> mActorsFrameData;

View File

@ -694,8 +694,6 @@ namespace MWPhysics
if (found != mActors.end()) if (found != mActors.end())
{ {
bool cmode = found->second->getCollisionMode(); bool cmode = found->second->getCollisionMode();
if (cmode)
resetPosition(found->first);
cmode = !cmode; cmode = !cmode;
found->second->enableCollisionMode(cmode); found->second->enableCollisionMode(cmode);
// NB: Collision body isn't disabled for vanilla TCL compatibility // NB: Collision body isn't disabled for vanilla TCL compatibility

View File

@ -5,9 +5,6 @@
#include <BulletCollision/CollisionDispatch/btCollisionWorld.h> #include <BulletCollision/CollisionDispatch/btCollisionWorld.h>
#include <BulletCollision/CollisionShapes/btConvexShape.h> #include <BulletCollision/CollisionShapes/btConvexShape.h>
#include "../mwbase/world.hpp"
#include "../mwbase/environment.hpp"
#include "collisiontype.hpp" #include "collisiontype.hpp"
#include "actor.hpp" #include "actor.hpp"
#include "closestnotmeconvexresultcallback.hpp" #include "closestnotmeconvexresultcallback.hpp"