InitWorldSpaceParticles fix

pull/638/head
scrawl 10 years ago
parent 987918ca15
commit 7f9f9a32d2

@ -107,12 +107,13 @@ void CreatureWeaponAnimation::updatePart(PartHolderPtr& scene, int slot)
bonename = "Shield Bone";
osg::ref_ptr<osg::Node> node = mResourceSystem->getSceneManager()->createInstance(item.getClass().getModel(item));
SceneUtil::attach(node, mObjectRoot, bonename, bonename);
osg::ref_ptr<osg::Node> attached = SceneUtil::attach(node, mObjectRoot, bonename, bonename);
mResourceSystem->getSceneManager()->notifyAttached(attached);
scene.reset(new PartHolder(node));
scene.reset(new PartHolder(attached));
if (!item.getClass().getEnchantment(item).empty())
addGlow(node, getEnchantmentColor(item));
addGlow(attached, getEnchantmentColor(item));
// Crossbows start out with a bolt attached
// FIXME: code duplicated from NpcAnimation
@ -137,7 +138,7 @@ void CreatureWeaponAnimation::updatePart(PartHolderPtr& scene, int slot)
source.reset(new NullAnimationTime);
SceneUtil::AssignControllerSourcesVisitor assignVisitor(source);
node->accept(assignVisitor);
attached->accept(assignVisitor);
}
void CreatureWeaponAnimation::attachArrow()

@ -49,6 +49,7 @@ void EffectManager::addEffect(const std::string &model, const std::string& textu
overrideTexture(textureOverride, mResourceSystem, node);
mParentNode->addChild(trans);
mResourceSystem->getSceneManager()->notifyAttached(node);
mEffects[trans] = effect;
}

@ -628,6 +628,7 @@ PartHolderPtr NpcAnimation::insertBoundedPart(const std::string& model, const st
{
osg::ref_ptr<osg::Node> instance = mResourceSystem->getSceneManager()->createInstance(model);
osg::ref_ptr<osg::Node> attached = SceneUtil::attach(instance, mObjectRoot, bonefilter, bonename);
mResourceSystem->getSceneManager()->notifyAttached(attached);
if (enchantedGlow)
addGlow(attached, *glowColor);

@ -52,7 +52,10 @@ namespace
void transformInitialParticles(osgParticle::ParticleSystem* partsys, osg::Node* node)
{
osg::Matrix worldMat = node->getWorldMatrices()[0];
osg::MatrixList mats = node->getWorldMatrices();
if (mats.empty())
return;
osg::Matrix worldMat = mats[0];
worldMat.orthoNormalize(worldMat); // scale is already applied on the particle node
for (int i=0; i<partsys->numParticles(); ++i)
{
@ -140,8 +143,7 @@ namespace Resource
void SceneManager::attachTo(osg::Node *instance, osg::Group *parentNode) const
{
parentNode->addChild(instance);
InitWorldSpaceParticlesVisitor visitor;
instance->accept(visitor);
notifyAttached(instance);
}
void SceneManager::releaseGLObjects(osg::State *state)
@ -157,6 +159,12 @@ namespace Resource
mIncrementalCompileOperation = ico;
}
void SceneManager::notifyAttached(osg::Node *node) const
{
InitWorldSpaceParticlesVisitor visitor;
node->accept(visitor);
}
const VFS::Manager* SceneManager::getVFS() const
{
return mVFS;

@ -64,6 +64,9 @@ namespace Resource
/// Set up an IncrementalCompileOperation for background compiling of loaded scenes.
void setIncrementalCompileOperation(osgUtil::IncrementalCompileOperation* ico);
/// @note If you used SceneManager::attachTo, this was called automatically.
void notifyAttached(osg::Node* node) const;
const VFS::Manager* getVFS() const;
Resource::TextureManager* getTextureManager();

Loading…
Cancel
Save