diff options
author | Andrei Karas <akaras@inbox.ru> | 2013-04-16 17:37:16 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2013-04-16 17:37:16 +0300 |
commit | 037ab342be37dafbbe97df3235c35721664e808f (patch) | |
tree | d276f0885dc0074424d0cd0af030e78065c0a6c3 | |
parent | 88030a157a1f7a44368946324fb01642d8d3f83f (diff) | |
download | manaplus-037ab342be37dafbbe97df3235c35721664e808f.tar.gz manaplus-037ab342be37dafbbe97df3235c35721664e808f.tar.bz2 manaplus-037ab342be37dafbbe97df3235c35721664e808f.tar.xz manaplus-037ab342be37dafbbe97df3235c35721664e808f.zip |
improve spritedef class.
-rw-r--r-- | src/resources/spritedef.cpp | 34 | ||||
-rw-r--r-- | src/resources/spritedef.h | 6 |
2 files changed, 23 insertions, 17 deletions
diff --git a/src/resources/spritedef.cpp b/src/resources/spritedef.cpp index 8420c806d..a0d2362b7 100644 --- a/src/resources/spritedef.cpp +++ b/src/resources/spritedef.cpp @@ -48,9 +48,12 @@ Action *SpriteDef::getAction(const std::string &action, if (i == mActions.end() || !(*i).second) return nullptr; - const ActionMap::const_iterator it = ((*i).second)->find(action); + const ActionMap *const actMap = (*i).second; + if (!actMap) + return nullptr; + const ActionMap::const_iterator it = actMap->find(action); - if (it == ((*i).second)->end()) + if (it == actMap->end()) { logger->log("Warning: no action \"%s\" defined!", action.c_str()); return nullptr; @@ -74,7 +77,7 @@ unsigned SpriteDef::findNumber(const unsigned num) const } SpriteDef *SpriteDef::load(const std::string &animationFile, - const int variant, bool prot) + const int variant, const bool prot) { const size_t pos = animationFile.find('|'); std::string palettes; @@ -88,7 +91,7 @@ SpriteDef *SpriteDef::load(const std::string &animationFile, { logger->log("Error, failed to parse %s", animationFile.c_str()); - std::string errorFile = paths.getStringValue("sprites").append( + const std::string errorFile = paths.getStringValue("sprites").append( paths.getStringValue("spriteErrorFile")); if (animationFile != errorFile) return load(errorFile, 0, prot); @@ -125,7 +128,8 @@ void SpriteDef::fixDeadAction() } } -void SpriteDef::substituteAction(std::string complete, std::string with) +void SpriteDef::substituteAction(const std::string &complete, + const std::string &with) { FOR_EACH (ActionsConstIter, it, mActions) { @@ -277,15 +281,12 @@ void SpriteDef::loadAnimation(const XmlNodePtr animationNode, { const int delay = XML::getIntProperty( frameNode, "delay", 0, 0, 100000); - int offsetX = XML::getProperty(frameNode, "offsetX", 0) + - imageSet->getOffsetX(); - int offsetY = XML::getProperty(frameNode, "offsetY", 0) + - imageSet->getOffsetY(); + const int offsetX = XML::getProperty(frameNode, "offsetX", 0) + + imageSet->getOffsetX() - imageSet->getHeight() + 32; + const int offsetY = XML::getProperty(frameNode, "offsetY", 0) + + imageSet->getOffsetY() - imageSet->getWidth() / 2 + 16; const int rand = XML::getIntProperty(frameNode, "rand", 100, 0, 100); - offsetY -= imageSet->getHeight() - 32; - offsetX -= imageSet->getWidth() / 2 - 16; - if (xmlNameEqual(frameNode, "frame")) { const int index = XML::getProperty(frameNode, "index", -1); @@ -334,7 +335,7 @@ void SpriteDef::loadAnimation(const XmlNodePtr animationNode, splitToStringVector(vals, value, ','); FOR_EACH (StringVectCIter, it, vals) { - std::string str = *it; + const std::string str = *it; const size_t idx = str.find("-"); if (str == "p") { @@ -375,13 +376,13 @@ void SpriteDef::loadAnimation(const XmlNodePtr animationNode, } else if (xmlNameEqual(frameNode, "label")) { - std::string name = XML::getProperty(frameNode, "name", ""); + const std::string name = XML::getProperty(frameNode, "name", ""); if (!name.empty()) animation->addLabel(name); } else if (xmlNameEqual(frameNode, "goto")) { - std::string name = XML::getProperty(frameNode, "label", ""); + const std::string name = XML::getProperty(frameNode, "label", ""); if (!name.empty()) animation->addGoto(name, rand); } @@ -484,6 +485,9 @@ bool SpriteDef::addSequence(const int start, const int end, const int delay, ImageSet *const imageSet, Animation *const animation) const { + if (!imageSet || !animation) + return true; + if (start < 0 || end < 0) { logger->log1("No valid value for 'start' or 'end'"); diff --git a/src/resources/spritedef.h b/src/resources/spritedef.h index 02090e809..08cb0d2b9 100644 --- a/src/resources/spritedef.h +++ b/src/resources/spritedef.h @@ -118,7 +118,8 @@ class SpriteDef final : public Resource * Loads a sprite definition file. */ static SpriteDef *load(const std::string &file, - const int variant, bool prot) A_WARN_UNUSED; + const int variant, + const bool prot) A_WARN_UNUSED; /** * Returns the specified action. @@ -199,7 +200,8 @@ class SpriteDef final : public Resource * When there are no animations defined for the action "complete", its * animations become a copy of those of the action "with". */ - void substituteAction(std::string complete, std::string with); + void substituteAction(const std::string &complete, + const std::string &with); typedef std::map<std::string, ImageSet*> ImageSets; typedef ImageSets::iterator ImageSetIterator; |