1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-01-19 21:23:52 +00:00

Make particle system cloning map names more sensible

This commit is contained in:
Capostrophic 2020-04-29 12:25:52 +03:00
parent f516178ec9
commit 6b874e397b
2 changed files with 15 additions and 15 deletions

View file

@ -47,7 +47,7 @@ namespace SceneUtil
if (const osgParticle::ParticleSystemUpdater* updater = dynamic_cast<const osgParticle::ParticleSystemUpdater*>(node))
{
osgParticle::ParticleSystemUpdater* cloned = new osgParticle::ParticleSystemUpdater(*updater, osg::CopyOp::SHALLOW_COPY);
mMap2[cloned] = updater->getParticleSystem(0);
mUpdaterToOldPs[cloned] = updater->getParticleSystem(0);
return cloned;
}
return osg::CopyOp::operator()(node);
@ -69,16 +69,16 @@ namespace SceneUtil
osgParticle::ParticleProcessor* CopyOp::operator() (const osgParticle::ParticleProcessor* processor) const
{
osgParticle::ParticleProcessor* cloned = osg::clone(processor, osg::CopyOp::DEEP_COPY_CALLBACKS);
for (std::map<const osgParticle::ParticleSystem*, osgParticle::ParticleSystem*>::const_iterator it = mMap3.begin(); it != mMap3.end(); ++it)
for (const auto& oldPsNewPsPair : mOldPsToNewPs)
{
if (processor->getParticleSystem() == it->first)
if (processor->getParticleSystem() == oldPsNewPsPair.first)
{
cloned->setParticleSystem(it->second);
cloned->setParticleSystem(oldPsNewPsPair.second);
return cloned;
}
}
mMap[cloned] = processor->getParticleSystem();
mProcessorToOldPs[cloned] = processor->getParticleSystem();
return cloned;
}
@ -86,24 +86,24 @@ namespace SceneUtil
{
osgParticle::ParticleSystem* cloned = osg::clone(partsys, *this);
for (std::map<osgParticle::ParticleProcessor*, const osgParticle::ParticleSystem*>::const_iterator it = mMap.begin(); it != mMap.end(); ++it)
for (const auto& processorPsPair : mProcessorToOldPs)
{
if (it->second == partsys)
if (processorPsPair.second == partsys)
{
it->first->setParticleSystem(cloned);
processorPsPair.first->setParticleSystem(cloned);
}
}
for (std::map<osgParticle::ParticleSystemUpdater*, const osgParticle::ParticleSystem*>::const_iterator it = mMap2.begin(); it != mMap2.end(); ++it)
for (const auto& updaterPsPair : mUpdaterToOldPs)
{
if (it->second == partsys)
if (updaterPsPair.second == partsys)
{
osgParticle::ParticleSystemUpdater* updater = it->first;
osgParticle::ParticleSystemUpdater* updater = updaterPsPair.first;
updater->removeParticleSystem(updater->getParticleSystem(0));
updater->addParticleSystem(cloned);
}
}
// In rare situations a particle processor may be placed after the particle system in the scene graph.
mMap3[partsys] = cloned;
mOldPsToNewPs[partsys] = cloned;
return cloned;
}

View file

@ -37,9 +37,9 @@ namespace SceneUtil
private:
// maps new pointers to their old pointers
// a little messy, but I think this should be the most efficient way
mutable std::map<osgParticle::ParticleProcessor*, const osgParticle::ParticleSystem*> mMap;
mutable std::map<osgParticle::ParticleSystemUpdater*, const osgParticle::ParticleSystem*> mMap2;
mutable std::map<const osgParticle::ParticleSystem*, osgParticle::ParticleSystem*> mMap3;
mutable std::map<osgParticle::ParticleProcessor*, const osgParticle::ParticleSystem*> mProcessorToOldPs;
mutable std::map<osgParticle::ParticleSystemUpdater*, const osgParticle::ParticleSystem*> mUpdaterToOldPs;
mutable std::map<const osgParticle::ParticleSystem*, osgParticle::ParticleSystem*> mOldPsToNewPs;
};
}