From 970b31227bde94f92af392870fc91844f063f167 Mon Sep 17 00:00:00 2001 From: David Athay Date: Fri, 29 Aug 2008 09:32:39 +0000 Subject: #406 by jaxad0127 --- ChangeLog | 6 ++++++ src/monster.cpp | 29 ++++++++++++++++++++++------- src/resources/monsterdb.cpp | 4 ++-- src/resources/monsterinfo.cpp | 3 +-- src/resources/monsterinfo.h | 8 ++++---- 5 files changed, 35 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 559467e9..ea50972a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-08-29 David Athay + + * src/monster.cpp, src/resources/monsterinfo.h, + src/resources/monsterdb.cpp, src/resources/monsterinfo.cpp: Mantis #406 + by jaxad0127 to implement layered sprites. + 2008-08-28 Douglas Boffey * src/localplayer.cpp, src/text.h, src/gui/viewport.cpp, src/npc.cpp, diff --git a/src/monster.cpp b/src/monster.cpp index bea37b3f..d7a2add1 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -45,15 +45,24 @@ Monster::Monster(Uint32 id, Uint16 job, Map *map): { const MonsterInfo& info = MonsterDB::get(job - 1002); - std::string filename = info.getSprite(); - if (filename != "") + // Setup Monster sprites + int c = BASE_SPRITE; + const std::list &sprites = info.getSprites(); + for (std::list::const_iterator i = sprites.begin(); + i != sprites.end(); + i++) { - mSprites[BASE_SPRITE] = AnimatedSprite::load( - "graphics/sprites/" + filename); + if (c == VECTOREND_SPRITE) break; + + std::string file = "graphics/sprites/" + *i; + mSprites[c] = AnimatedSprite::load(file); + c++; } - else + + // Ensure that something is shown + if (c == BASE_SPRITE) { - mSprites[BASE_SPRITE] = AnimatedSprite::load("graphics/sprites/error.xml"); + mSprites[c] = AnimatedSprite::load("graphics/sprites/error.xml"); } const std::list &particleEffects = info.getParticleEffects(); @@ -124,7 +133,13 @@ Monster::setAction(Uint8 action) if (currentAction != ACTION_INVALID) { - mSprites[BASE_SPRITE]->play(currentAction); + for (int i = 0; i < VECTOREND_SPRITE; i++) + { + if (mSprites[i]) + { + mSprites[i]->play(currentAction); + } + } mAction = action; } } diff --git a/src/resources/monsterdb.cpp b/src/resources/monsterdb.cpp index 0a98762f..bf2878bc 100644 --- a/src/resources/monsterdb.cpp +++ b/src/resources/monsterdb.cpp @@ -45,7 +45,7 @@ MonsterDB::load() if (mLoaded) return; - mUnknown.setSprite("error.xml"); + mUnknown.addSprite("error.xml"); mUnknown.setName("unnamed"); logger->log("Initializing monster database..."); @@ -96,7 +96,7 @@ MonsterDB::load() { if (xmlStrEqual(spriteNode->name, BAD_CAST "sprite")) { - currentInfo->setSprite((const char*) spriteNode->xmlChildrenNode->content); + currentInfo->addSprite((const char*) spriteNode->xmlChildrenNode->content); } if (xmlStrEqual(spriteNode->name, BAD_CAST "sound")) diff --git a/src/resources/monsterinfo.cpp b/src/resources/monsterinfo.cpp index 8238dc3e..e492ccd3 100644 --- a/src/resources/monsterinfo.cpp +++ b/src/resources/monsterinfo.cpp @@ -27,8 +27,7 @@ #include "../utils/dtor.h" -MonsterInfo::MonsterInfo(): - mSprite("error.xml") +MonsterInfo::MonsterInfo() { } diff --git a/src/resources/monsterinfo.h b/src/resources/monsterinfo.h index d9d17510..2f690756 100644 --- a/src/resources/monsterinfo.h +++ b/src/resources/monsterinfo.h @@ -63,7 +63,7 @@ class MonsterInfo setName(std::string name) { mName = name; } void - setSprite(std::string filename) { mSprite = filename; } + addSprite(std::string filename) { mSprites.push_back(filename); } void setTargetCursorSize(Being::TargetCursorSize targetCursorSize) @@ -78,8 +78,8 @@ class MonsterInfo const std::string& getName() const { return mName; } - const std::string& - getSprite() const { return mSprite; } + const std::list& + getSprites() const { return mSprites; } Being::TargetCursorSize getTargetCursorSize() const { return mTargetCursorSize; } @@ -92,7 +92,7 @@ class MonsterInfo private: std::string mName; - std::string mSprite; + std::list mSprites; Being::TargetCursorSize mTargetCursorSize; std::map* > mSounds; std::list mParticleEffects; -- cgit v1.2.3-70-g09d2