From 6e0d660dd51154c8d7923f11c63220cace5838a7 Mon Sep 17 00:00:00 2001 From: elsid Date: Sun, 3 Apr 2022 17:38:33 +0000 Subject: [PATCH] Check whether model is empty before trying to insert object --- apps/openmw/mwclass/activator.cpp | 3 +-- apps/openmw/mwclass/actor.cpp | 9 +++------ apps/openmw/mwclass/container.cpp | 3 +-- apps/openmw/mwclass/door.cpp | 3 +-- apps/openmw/mwclass/light.cpp | 2 +- apps/openmw/mwclass/static.cpp | 3 +-- apps/openmw/mwworld/scene.cpp | 13 +++++++++---- 7 files changed, 17 insertions(+), 19 deletions(-) diff --git a/apps/openmw/mwclass/activator.cpp b/apps/openmw/mwclass/activator.cpp index 0b4edf4e1a..b1660559e6 100644 --- a/apps/openmw/mwclass/activator.cpp +++ b/apps/openmw/mwclass/activator.cpp @@ -45,8 +45,7 @@ namespace MWClass void Activator::insertObjectPhysics(const MWWorld::Ptr& ptr, const std::string& model, const osg::Quat& rotation, MWPhysics::PhysicsSystem& physics) const { - if(!model.empty()) - physics.addObject(ptr, model, rotation, MWPhysics::CollisionType_World); + physics.addObject(ptr, model, rotation, MWPhysics::CollisionType_World); } std::string Activator::getModel(const MWWorld::ConstPtr &ptr) const diff --git a/apps/openmw/mwclass/actor.cpp b/apps/openmw/mwclass/actor.cpp index 9b5e10e1c7..8b291c5882 100644 --- a/apps/openmw/mwclass/actor.cpp +++ b/apps/openmw/mwclass/actor.cpp @@ -24,12 +24,9 @@ namespace MWClass void Actor::insertObject(const MWWorld::Ptr& ptr, const std::string& model, const osg::Quat& rotation, MWPhysics::PhysicsSystem& physics) const { - if (!model.empty()) - { - physics.addActor(ptr, model); - if (getCreatureStats(ptr).isDead() && getCreatureStats(ptr).isDeathAnimationFinished()) - MWBase::Environment::get().getWorld()->enableActorCollision(ptr, false); - } + physics.addActor(ptr, model); + if (getCreatureStats(ptr).isDead() && getCreatureStats(ptr).isDeathAnimationFinished()) + MWBase::Environment::get().getWorld()->enableActorCollision(ptr, false); } bool Actor::useAnim() const diff --git a/apps/openmw/mwclass/container.cpp b/apps/openmw/mwclass/container.cpp index e319cdf410..b98ba43df4 100644 --- a/apps/openmw/mwclass/container.cpp +++ b/apps/openmw/mwclass/container.cpp @@ -111,8 +111,7 @@ namespace MWClass void Container::insertObjectPhysics(const MWWorld::Ptr& ptr, const std::string& model, const osg::Quat& rotation, MWPhysics::PhysicsSystem& physics) const { - if(!model.empty()) - physics.addObject(ptr, model, rotation, MWPhysics::CollisionType_World); + physics.addObject(ptr, model, rotation, MWPhysics::CollisionType_World); } std::string Container::getModel(const MWWorld::ConstPtr &ptr) const diff --git a/apps/openmw/mwclass/door.cpp b/apps/openmw/mwclass/door.cpp index 81a45f3a30..da8eb193d5 100644 --- a/apps/openmw/mwclass/door.cpp +++ b/apps/openmw/mwclass/door.cpp @@ -72,8 +72,7 @@ namespace MWClass void Door::insertObjectPhysics(const MWWorld::Ptr& ptr, const std::string& model, const osg::Quat& rotation, MWPhysics::PhysicsSystem& physics) const { - if(!model.empty()) - physics.addObject(ptr, model, rotation, MWPhysics::CollisionType_Door); + physics.addObject(ptr, model, rotation, MWPhysics::CollisionType_Door); } bool Door::isDoor() const diff --git a/apps/openmw/mwclass/light.cpp b/apps/openmw/mwclass/light.cpp index 26f41d30f7..070b769b83 100644 --- a/apps/openmw/mwclass/light.cpp +++ b/apps/openmw/mwclass/light.cpp @@ -50,7 +50,7 @@ namespace MWClass void Light::insertObjectPhysics(const MWWorld::Ptr& ptr, const std::string& model, const osg::Quat& rotation, MWPhysics::PhysicsSystem& physics) const { // TODO: add option somewhere to enable collision for placeable objects - if (!model.empty() && (ptr.get()->mBase->mData.mFlags & ESM::Light::Carry) == 0) + if ((ptr.get()->mBase->mData.mFlags & ESM::Light::Carry) == 0) physics.addObject(ptr, model, rotation, MWPhysics::CollisionType_World); } diff --git a/apps/openmw/mwclass/static.cpp b/apps/openmw/mwclass/static.cpp index 0b77a5630d..1fa445e428 100644 --- a/apps/openmw/mwclass/static.cpp +++ b/apps/openmw/mwclass/static.cpp @@ -30,8 +30,7 @@ namespace MWClass void Static::insertObjectPhysics(const MWWorld::Ptr& ptr, const std::string& model, const osg::Quat& rotation, MWPhysics::PhysicsSystem& physics) const { - if(!model.empty()) - physics.addObject(ptr, model, rotation, MWPhysics::CollisionType_World); + physics.addObject(ptr, model, rotation, MWPhysics::CollisionType_World); } std::string Static::getModel(const MWWorld::ConstPtr &ptr) const diff --git a/apps/openmw/mwworld/scene.cpp b/apps/openmw/mwworld/scene.cpp index 07a613db4a..f24316045b 100644 --- a/apps/openmw/mwworld/scene.cpp +++ b/apps/openmw/mwworld/scene.cpp @@ -125,7 +125,8 @@ namespace // Restore effect particles MWBase::Environment::get().getWorld()->applyLoopingParticles(ptr); - ptr.getClass().insertObject (ptr, model, rotation, physics); + if (!model.empty()) + ptr.getClass().insertObject(ptr, model, rotation, physics); MWBase::Environment::get().getLuaManager()->objectAddedToScene(ptr); } @@ -584,10 +585,14 @@ namespace MWWorld if(ptr.mRef->mData.mPhysicsPostponed) { ptr.mRef->mData.mPhysicsPostponed = false; - if(ptr.mRef->mData.isEnabled() && ptr.mRef->mData.getCount() > 0) { + if (ptr.mRef->mData.isEnabled() && ptr.mRef->mData.getCount() > 0) + { std::string model = getModel(ptr, MWBase::Environment::get().getResourceSystem()->getVFS()); - const auto rotation = makeNodeRotation(ptr, RotationOrder::direct); - ptr.getClass().insertObjectPhysics(ptr, model, rotation, *mPhysics); + if (!model.empty()) + { + const auto rotation = makeNodeRotation(ptr, RotationOrder::direct); + ptr.getClass().insertObjectPhysics(ptr, model, rotation, *mPhysics); + } } } return true;