diff options
author | Chuck Miller <shadowmil@gmail.com> | 2010-11-03 23:50:35 -0400 |
---|---|---|
committer | Chuck Miller <shadowmil@gmail.com> | 2010-11-07 23:26:37 -0500 |
commit | c81b3c269e39700be94fd9e2629b0bdfb0d093f8 (patch) | |
tree | c4dbca3f9dbb288151fec3171089e12295d33e04 /src/resources | |
parent | 671a465fa2c9469bde36b78c49e84bd0325c4cf1 (diff) | |
download | mana-c81b3c269e39700be94fd9e2629b0bdfb0d093f8.tar.gz mana-c81b3c269e39700be94fd9e2629b0bdfb0d093f8.tar.bz2 mana-c81b3c269e39700be94fd9e2629b0bdfb0d093f8.tar.xz mana-c81b3c269e39700be94fd9e2629b0bdfb0d093f8.zip |
Convert the emote system to use particles
Reviewed-by: Jared Adams
Diffstat (limited to 'src/resources')
-rw-r--r-- | src/resources/emotedb.cpp | 111 | ||||
-rw-r--r-- | src/resources/emotedb.h | 21 |
2 files changed, 62 insertions, 70 deletions
diff --git a/src/resources/emotedb.cpp b/src/resources/emotedb.cpp index bd8a8e38..f48798b8 100644 --- a/src/resources/emotedb.cpp +++ b/src/resources/emotedb.cpp @@ -20,16 +20,20 @@ #include "resources/emotedb.h" -#include "animatedsprite.h" +#include "configuration.h" #include "log.h" +#include "imagesprite.h" + +#include "resources/resourcemanager.h" +#include "resources/image.h" +#include "resources/imageset.h" #include "utils/xml.h" -#include "configuration.h" namespace { - EmoteInfos mEmoteInfos; - EmoteInfo mUnknown; + Emotes mEmotes; + Emote mUnknown; bool mLoaded = false; int mLastEmote = 0; } @@ -39,13 +43,12 @@ void EmoteDB::load() if (mLoaded) unload(); - mLastEmote = 0; + mUnknown.name = "unknown"; + mUnknown.effect = 0; + mUnknown.sprite = new ImageSprite( + ResourceManager::getInstance()->getImage("graphics/sprites/error.png")); - EmoteSprite *unknownSprite = new EmoteSprite; - unknownSprite->sprite = AnimatedSprite::load( - paths.getStringValue("spriteErrorFile")); - unknownSprite->name = "unknown"; - mUnknown.sprites.push_back(unknownSprite); + mLastEmote = 0; logger->log("Initializing emote database..."); @@ -71,27 +74,46 @@ void EmoteDB::load() continue; } - EmoteInfo *currentInfo = new EmoteInfo; + Emote *currentEmote = new Emote; + + currentEmote->name = XML::getProperty(emoteNode, "name", "unknown"); + currentEmote->effect = XML::getProperty(emoteNode, "effectid", -1); - for_each_xml_child_node(spriteNode, emoteNode) + if (currentEmote->effect == -1) { - if (xmlStrEqual(spriteNode->name, BAD_CAST "sprite")) - { - EmoteSprite *currentSprite = new EmoteSprite; - std::string file = paths.getStringValue("sprites") - + (std::string) (const char*) - spriteNode->xmlChildrenNode->content; - currentSprite->sprite = AnimatedSprite::load(file, - XML::getProperty(spriteNode, "variant", 0)); - currentInfo->sprites.push_back(currentSprite); - } - else if (xmlStrEqual(spriteNode->name, BAD_CAST "particlefx")) - { - std::string particlefx = (const char*) spriteNode->xmlChildrenNode->content; - currentInfo->particles.push_back(particlefx); - } + logger->log("Emote Database: Warning: Emote with no attached effect!"); + delete currentEmote; + continue; } - mEmoteInfos[id] = currentInfo; + + const std::string imageName = XML::getProperty(emoteNode, "image", ""); + const int width = XML::getProperty(emoteNode, "width", 0); + const int height = XML::getProperty(emoteNode, "height", 0); + + if (imageName.empty() || !(width > 0) || !(height > 0)) + { + logger->log("Emote Database: Warning: Emote with bad imageset values"); + delete currentEmote; + continue; + } + + ImageSet *is = ResourceManager::getInstance()->getImageSet(imageName, + width, + height); + if (!is || !(is->size() > 0)) + { + logger->log("Emote Database: Error loading imageset"); + delete is; + delete currentEmote; + continue; + } + else + { + // For now we just use the first image in the animation + currentEmote->sprite = new ImageSprite(is->get(0)); + } + + mEmotes[id] = currentEmote; if (id > mLastEmote) mLastEmote = id; } @@ -101,36 +123,19 @@ void EmoteDB::load() void EmoteDB::unload() { - for (EmoteInfos::const_iterator i = mEmoteInfos.begin(); - i != mEmoteInfos.end(); - i++) + Emotes::iterator i; + for (i = mEmotes.begin(); i != mEmotes.end(); i++) { - while (!i->second->sprites.empty()) - { - delete i->second->sprites.front()->sprite; - delete i->second->sprites.front(); - i->second->sprites.pop_front(); - } delete i->second; } - - mEmoteInfos.clear(); - - while (!mUnknown.sprites.empty()) - { - delete mUnknown.sprites.front()->sprite; - delete mUnknown.sprites.front(); - mUnknown.sprites.pop_front(); - } - mLoaded = false; } -const EmoteInfo *EmoteDB::get(int id) +const Emote *EmoteDB::get(int id) { - EmoteInfos::const_iterator i = mEmoteInfos.find(id); + Emotes::const_iterator i = mEmotes.find(id); - if (i == mEmoteInfos.end()) + if (i == mEmotes.end()) { logger->log("EmoteDB: Warning, unknown emote ID %d requested", id); return &mUnknown; @@ -141,12 +146,6 @@ const EmoteInfo *EmoteDB::get(int id) } } -const AnimatedSprite *EmoteDB::getAnimation(int id) -{ - const EmoteInfo *info = get(id); - return info->sprites.front()->sprite; -} - const int &EmoteDB::getLast() { return mLastEmote; diff --git a/src/resources/emotedb.h b/src/resources/emotedb.h index 3d80ce8f..a2887a74 100644 --- a/src/resources/emotedb.h +++ b/src/resources/emotedb.h @@ -25,21 +25,16 @@ #include <map> #include <string> -class AnimatedSprite; +class ImageSprite; -struct EmoteSprite +struct Emote { - const AnimatedSprite *sprite; std::string name; + ImageSprite *sprite; + int effect; }; -struct EmoteInfo -{ - std::list<EmoteSprite*> sprites; - std::list<std::string> particles; -}; - -typedef std::map<int, EmoteInfo*> EmoteInfos; +typedef std::map<int, Emote*> Emotes; /** * Emote information database. @@ -50,13 +45,11 @@ namespace EmoteDB void unload(); - const EmoteInfo *get(int id); - - const AnimatedSprite *getAnimation(int id); + const Emote *get(int id); const int &getLast(); - typedef EmoteInfos::iterator EmoteInfosIterator; + typedef Emotes::iterator EmotesIterator; } #endif |