diff options
Diffstat (limited to 'src/particle.cpp')
-rw-r--r-- | src/particle.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/particle.cpp b/src/particle.cpp index f147a9f2..4d6882be 100644 --- a/src/particle.cpp +++ b/src/particle.cpp @@ -24,6 +24,7 @@ #include "animationparticle.h" #include "configuration.h" +#include "resources/dye.h" #include "imageparticle.h" #include "log.h" #include "map.h" @@ -280,7 +281,12 @@ Particle *Particle::addEffect(const std::string &particleEffectFile, { Particle *newParticle = NULL; - XML::Document doc(particleEffectFile); + std::string::size_type pos = particleEffectFile.find('|'); + std::string dyePalettes; + if (pos != std::string::npos) + dyePalettes = particleEffectFile.substr(pos + 1); + + XML::Document doc(particleEffectFile.substr(0, pos)); xmlNodePtr rootNode = doc.rootNode(); if (!rootNode || !xmlStrEqual(rootNode->name, BAD_CAST "effect")) @@ -304,18 +310,20 @@ Particle *Particle::addEffect(const std::string &particleEffectFile, // Animation if ((node = XML::findFirstChildByName(effectChildNode, "animation"))) { - newParticle = new AnimationParticle(mMap, node); + newParticle = new AnimationParticle(mMap, node, dyePalettes); } // Rotational else if ((node = XML::findFirstChildByName(effectChildNode, "rotation"))) { - newParticle = new RotationalParticle(mMap, node); + newParticle = new RotationalParticle(mMap, node, dyePalettes); } // Image else if ((node = XML::findFirstChildByName(effectChildNode, "image"))) { - Image *img= resman->getImage((const char*) - node->xmlChildrenNode->content); + std::string imageSrc = (const char*)node->xmlChildrenNode->content; + if (!imageSrc.empty() && !dyePalettes.empty()) + Dye::instantiate(imageSrc, dyePalettes); + Image *img= resman->getImage(imageSrc); newParticle = new ImageParticle(mMap, img); } @@ -346,7 +354,7 @@ Particle *Particle::addEffect(const std::string &particleEffectFile, { ParticleEmitter *newEmitter; newEmitter = new ParticleEmitter(emitterNode, newParticle, mMap, - rotation); + rotation, dyePalettes); newParticle->addEmitter(newEmitter); } else if (xmlStrEqual(emitterNode->name, BAD_CAST "deatheffect")) |