diff options
author | Ira Rice <irarice@gmail.com> | 2009-02-10 12:26:57 -0700 |
---|---|---|
committer | Ira Rice <irarice@gmail.com> | 2009-02-10 12:26:57 -0700 |
commit | 02e60b55b359002ae1f26f36b40f8fa78ea1a708 (patch) | |
tree | 0264392528cf174e2275bb79a84472b77c5245d2 /src/being.cpp | |
parent | a8a992ade40c9d68c9faec1cc3a54e7f064fb9d5 (diff) | |
download | mana-02e60b55b359002ae1f26f36b40f8fa78ea1a708.tar.gz mana-02e60b55b359002ae1f26f36b40f8fa78ea1a708.tar.bz2 mana-02e60b55b359002ae1f26f36b40f8fa78ea1a708.tar.xz mana-02e60b55b359002ae1f26f36b40f8fa78ea1a708.zip |
Simplified target drawing so that it actually uses the SimpleAnimation
that it creates when initializing the target cursors in the first place.
This behavior was carried over in the first place from the Viewport
class. Also moved target drawing responsibility from the map to the
being being targeted in the first place. This allows for assuring that
targets are always drawn below the sprite being targeted (which the
previous solution was designed to do, but didn't do correctly).
Signed-off-by: Ira Rice <irarice@gmail.com>
Diffstat (limited to 'src/being.cpp')
-rw-r--r-- | src/being.cpp | 62 |
1 files changed, 28 insertions, 34 deletions
diff --git a/src/being.cpp b/src/being.cpp index 0ac86d13..5676ec3f 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -28,20 +28,18 @@ #include "effectmanager.h" #include "game.h" #include "graphics.h" -#include "localplayer.h" #include "log.h" #include "map.h" #include "particle.h" +#include "simpleanimation.h" #include "sound.h" #include "text.h" #include "gui/speechbubble.h" #include "resources/colordb.h" - #include "resources/emotedb.h" #include "resources/image.h" -#include "resources/imageset.h" #include "resources/itemdb.h" #include "resources/iteminfo.h" #include "resources/resourcemanager.h" @@ -88,7 +86,8 @@ Being::Being(int id, int job, Map *map): mSpriteIDs(VECTOREND_SPRITE, 0), mSpriteColors(VECTOREND_SPRITE, ""), mStatusParticleEffects(&mStunParticleEffects, false), - mChildParticleEffects(&mStatusParticleEffects, false) + mChildParticleEffects(&mStatusParticleEffects, false), + mUsedTargetCursor(NULL) { setMap(map); @@ -106,7 +105,8 @@ Being::Being(int id, int job, Map *map): emotionSet.push_back(AnimatedSprite::load(file, variant)); } - // Hairstyles are encoded as negative numbers. Count how far negative we can go. + // Hairstyles are encoded as negative numbers. Count how far negative + // we can go. int hairstyles = 1; while (ItemDB::get(-hairstyles).getSprite(GENDER_MALE) != "error.xml") { @@ -123,6 +123,7 @@ Being::Being(int id, int job, Map *map): Being::~Being() { + mUsedTargetCursor = NULL; delete_all(mSprites); clearPath(); @@ -142,9 +143,7 @@ Being::~Being() void Being::setDestination(Uint16 destX, Uint16 destY) { if (mMap) - { setPath(mMap->findPath(mX, mY, destX, destY)); - } } void Being::clearPath() @@ -225,19 +224,13 @@ void Being::takeDamage(int amount) // Selecting the right color if (damage == "miss") - { font = hitYellowFont; - } else { if (getType() == MONSTER) - { font = hitBlueFont; - } else - { font = hitRedFont; - } } // Show damage number @@ -252,13 +245,9 @@ void Being::showCrit() // Selecting the right color if (getType() == MONSTER) - { font = hitBlueFont; - } else - { font = hitRedFont; - } // Show crit notice particleEngine->addTextSplashEffect(text, 255, 255, 255, font, @@ -276,17 +265,13 @@ void Being::setMap(Map *map) { // Remove sprite from potential previous map if (mMap) - { mMap->removeSprite(mSpriteIterator); - } mMap = map; // Add sprite to potential new map if (mMap) - { mSpriteIterator = mMap->addSprite(this); - } // Clear particle effect list because child particles became invalid mChildParticleEffects.clear(); @@ -321,9 +306,7 @@ void Being::setAction(Action action) for (int i = 0; i < VECTOREND_SPRITE; i++) { if (mSprites[i]) - { mSprites[i]->reset(); - } } break; case HURT: @@ -344,9 +327,7 @@ void Being::setAction(Action action) for (int i = 0; i < VECTOREND_SPRITE; i++) { if (mSprites[i]) - { mSprites[i]->play(currentAction); - } } mAction = action; } @@ -454,18 +435,18 @@ void Being::logic() if (mEmotion != 0) { mEmotionTime--; - if (mEmotionTime == 0) { + if (mEmotionTime == 0) mEmotion = 0; - } } // Update sprite animations + if (mUsedTargetCursor != NULL) + mUsedTargetCursor->update(tick_time * 10); + for (int i = 0; i < VECTOREND_SPRITE; i++) { if (mSprites[i] != NULL) - { mSprites[i]->update(tick_time * 10); - } } // Update particle effects @@ -479,6 +460,14 @@ void Being::draw(Graphics *graphics, int offsetX, int offsetY) const int px = mPx + offsetX; int py = mPy + offsetY; + if (mUsedTargetCursor != NULL) + { + const int width = mSprites[BASE_SPRITE]->getWidth(); + const int height = mSprites[BASE_SPRITE]->getHeight(); + + mUsedTargetCursor->draw(graphics, px, py); + } + for (int i = 0; i < VECTOREND_SPRITE; i++) { if (mSprites[i] != NULL) @@ -517,11 +506,12 @@ void Being::drawSpeech(int offsetX, int offsetY) mSpeechBubble->setCaption(mName, mNameColor); - // Not quite centered, but close enough. However, it's not too important to get - // it right right now, as it doesn't take bubble collision into account yet. + // Not quite centered, but close enough. However, it's not too important + // to get it right right now, as it doesn't take bubble collision into + // account yet. mSpeechBubble->setText(mSpeech); - mSpeechBubble->setPosition(px - (mSpeechBubble->getWidth() * 4 / 11), py - 70 - - (mSpeechBubble->getNumRows()*14)); + mSpeechBubble->setPosition(px - (mSpeechBubble->getWidth() * 4 / 11), + py - 70 - (mSpeechBubble->getNumRows() * 14)); mSpeechBubble->setVisible(true); } else if (mSpeechTime > 0 && !config.getValue("speechbubble", 1)) @@ -586,7 +576,6 @@ int Being::getWidth() const } } - int Being::getHeight() const { if (mSprites[BASE_SPRITE]) @@ -602,3 +591,8 @@ int Being::getHeight() const } } +void Being::setTargetAnimation(SimpleAnimation* animation) +{ + mUsedTargetCursor = animation; + mUsedTargetCursor->reset(); +} |