From f81c3bcd6d3d7777fe1b281d3ab6cee9f2984042 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 11 Jun 2015 16:40:26 +0200 Subject: [PATCH] Fix for broken InitWorldSpaceParticles on projectile effects --- apps/openmw/mwworld/projectilemanager.cpp | 20 +++++++------------- apps/openmw/mwworld/projectilemanager.hpp | 2 +- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/apps/openmw/mwworld/projectilemanager.cpp b/apps/openmw/mwworld/projectilemanager.cpp index 84d86fba7..d0a5de5b2 100644 --- a/apps/openmw/mwworld/projectilemanager.cpp +++ b/apps/openmw/mwworld/projectilemanager.cpp @@ -40,10 +40,12 @@ namespace MWWorld } - void ProjectileManager::createModel(State &state, const std::string &model) + void ProjectileManager::createModel(State &state, const std::string &model, const osg::Vec3f& pos, const osg::Quat& orient) { state.mNode = new osg::PositionAttitudeTransform; state.mNode->setNodeMask(MWRender::Mask_Effect); + state.mNode->setPosition(pos); + state.mNode->setAttitude(orient); mParent->addChild(state.mNode); mResourceSystem->getSceneManager()->createInstance(model, state.mNode); @@ -105,9 +107,7 @@ namespace MWWorld MWWorld::ManualRef ref(MWBase::Environment::get().getWorld()->getStore(), model); MWWorld::Ptr ptr = ref.getPtr(); - createModel(state, ptr.getClass().getModel(ptr)); - state.mNode->setPosition(pos); - state.mNode->setAttitude(orient); + createModel(state, ptr.getClass().getModel(ptr), pos, orient); MWBase::SoundManager *sndMgr = MWBase::Environment::get().getSoundManager(); state.mSound = sndMgr->playManualSound3D(pos, sound, 1.0f, 1.0f, MWBase::SoundManager::Play_TypeSfx, MWBase::SoundManager::Play_Loop); @@ -127,9 +127,7 @@ namespace MWWorld MWWorld::ManualRef ref(MWBase::Environment::get().getWorld()->getStore(), projectile.getCellRef().getRefId()); MWWorld::Ptr ptr = ref.getPtr(); - createModel(state, ptr.getClass().getModel(ptr)); - state.mNode->setPosition(pos); - state.mNode->setAttitude(orient); + createModel(state, ptr.getClass().getModel(ptr), pos, orient); mProjectiles.push_back(state); } @@ -342,9 +340,7 @@ namespace MWWorld return true; } - createModel(state, model); - state.mNode->setPosition(osg::Vec3f(esm.mPosition)); - state.mNode->setAttitude(osg::Quat(esm.mOrientation)); + createModel(state, model, osg::Vec3f(esm.mPosition), osg::Quat(esm.mOrientation)); mProjectiles.push_back(state); return true; @@ -375,9 +371,7 @@ namespace MWWorld return true; } - createModel(state, model); - state.mNode->setPosition(osg::Vec3f(esm.mPosition)); - state.mNode->setAttitude(osg::Quat(esm.mOrientation)); + createModel(state, model, osg::Vec3f(esm.mPosition), osg::Quat(esm.mOrientation)); MWBase::SoundManager *sndMgr = MWBase::Environment::get().getSoundManager(); state.mSound = sndMgr->playManualSound3D(esm.mPosition, esm.mSound, 1.0f, 1.0f, diff --git a/apps/openmw/mwworld/projectilemanager.hpp b/apps/openmw/mwworld/projectilemanager.hpp index f42bc040f..68e408149 100644 --- a/apps/openmw/mwworld/projectilemanager.hpp +++ b/apps/openmw/mwworld/projectilemanager.hpp @@ -116,7 +116,7 @@ namespace MWWorld void moveProjectiles(float dt); void moveMagicBolts(float dt); - void createModel (State& state, const std::string& model); + void createModel (State& state, const std::string& model, const osg::Vec3f& pos, const osg::Quat& orient); void update (State& state, float duration); };