diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2009-02-15 18:29:15 +0100 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2009-02-15 18:29:15 +0100 |
commit | 83bbc5cc3afeea0f0b248cd755e1011f4760a298 (patch) | |
tree | 1207131c234ad7c5ae6a5849d1d5d53de45b1b0b /src/being.cpp | |
parent | 7b3b60f86c545e0c5b6b8cb1ab7b1cbbf22d5e02 (diff) | |
parent | 38708de52f00689088eda29f9b6ee257ce7038ad (diff) | |
download | mana-83bbc5cc3afeea0f0b248cd755e1011f4760a298.tar.gz mana-83bbc5cc3afeea0f0b248cd755e1011f4760a298.tar.bz2 mana-83bbc5cc3afeea0f0b248cd755e1011f4760a298.tar.xz mana-83bbc5cc3afeea0f0b248cd755e1011f4760a298.zip |
Merge commit 'aethyra/master'
Conflicts:
CMakeLists.txt
configure.ac
data/help/header.txt
packaging/windows/setup.nsi
po/POTFILES.in
src/being.cpp
src/being.h
src/game.cpp
src/gui/color.cpp
src/gui/color.h
src/gui/equipmentwindow.h
src/gui/popupmenu.cpp
src/gui/recorder.cpp
src/gui/setup_colors.h
src/gui/setup_keyboard.cpp
src/gui/setup_keyboard.h
src/gui/skill.cpp
src/gui/speechbubble.cpp
src/gui/speechbubble.h
src/gui/table.cpp
src/keyboardconfig.cpp
src/keyboardconfig.h
src/localplayer.cpp
src/main.cpp
src/main.h
src/map.cpp
src/resources/colordb.cpp
src/resources/colordb.h
src/resources/emotedb.cpp
src/resources/emotedb.h
src/text.cpp
src/text.h
src/tmw.rc
src/winver.h
Diffstat (limited to 'src/being.cpp')
-rw-r--r-- | src/being.cpp | 77 |
1 files changed, 42 insertions, 35 deletions
diff --git a/src/being.cpp b/src/being.cpp index dcb45a9d..86811e33 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -30,6 +30,7 @@ #include "log.h" #include "map.h" #include "particle.h" +#include "simpleanimation.h" #include "sound.h" #include "text.h" #include "statuseffect.h" @@ -37,10 +38,8 @@ #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" @@ -95,7 +94,8 @@ Being::Being(int id, int job, Map *map): mSpriteColors(VECTOREND_SPRITE, ""), mStatusParticleEffects(&mStunParticleEffects, false), mChildParticleEffects(&mStatusParticleEffects, false), - mMustResetParticles(false) + mMustResetParticles(false), + mUsedTargetCursor(NULL) { setMap(map); @@ -113,7 +113,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") { @@ -130,6 +131,7 @@ Being::Being(int id, int job, Map *map): Being::~Being() { + mUsedTargetCursor = NULL; delete_all(mSprites); clearPath(); @@ -149,9 +151,7 @@ Being::~Being() void Being::setDestination(Uint16 destX, Uint16 destY) { if (mMap) - { setPath(mMap->findPath(mX, mY, destX, destY)); - } } void Being::clearPath() @@ -232,19 +232,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 @@ -270,17 +264,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(); @@ -316,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: @@ -339,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; } @@ -449,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]) - { mSprites[i]->update(tick_time * 10); - } } // Restart status/particle effects, if needed @@ -485,6 +471,11 @@ void Being::draw(Graphics *graphics, int offsetX, int offsetY) const int px = mPx + offsetX; int py = mPy + offsetY; + if (mUsedTargetCursor != NULL) + { + mUsedTargetCursor->draw(graphics, px, py); + } + for (int i = 0; i < VECTOREND_SPRITE; i++) { if (mSprites[i]) @@ -509,28 +500,33 @@ void Being::drawEmotion(Graphics *graphics, int offsetX, int offsetY) void Being::drawSpeech(int offsetX, int offsetY) { - int px = mPx + offsetX; - int py = mPy + offsetY; + const int px = mPx + offsetX; + const int py = mPy + offsetY; + const int speech = (int) config.getValue("speech", NAME_IN_BUBBLE); // Draw speech above this being - if (mSpeechTime > 0 && config.getValue("speechbubble", 1)) + if (mSpeechTime > 0 && (speech == NAME_IN_BUBBLE || + speech == NO_NAME_IN_BUBBLE)) { + const bool showName = (speech == NAME_IN_BUBBLE); + if (mText) { delete mText; mText = 0; } - mSpeechBubble->setCaption(mName, mNameColor); + mSpeechBubble->setCaption(showName ? 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. - mSpeechBubble->setText(mSpeech); - mSpeechBubble->setPosition(px - (mSpeechBubble->getWidth() * 4 / 11), py - 70 - - (mSpeechBubble->getNumRows()*14)); + // 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, showName); + mSpeechBubble->setPosition(px - (mSpeechBubble->getWidth() * 4 / 11), + py - 40 - (mSpeechBubble->getHeight())); mSpeechBubble->setVisible(true); } - else if (mSpeechTime > 0 && !config.getValue("speechbubble", 1)) + else if (mSpeechTime > 0 && speech == TEXT_OVERHEAD) { mSpeechBubble->setVisible(false); // don't introduce a memory leak @@ -540,6 +536,13 @@ void Being::drawSpeech(int offsetX, int offsetY) mText = new Text(mSpeech, mPx + X_SPEECH_OFFSET, mPy - Y_SPEECH_OFFSET, gcn::Graphics::CENTER, gcn::Color(255, 255, 255)); } + else if (speech == NO_SPEECH) + { + mSpeechBubble->setVisible(false); + if (mText) + delete mText; + mText = NULL; + } else if (mSpeechTime == 0) { mSpeechBubble->setVisible(false); @@ -648,7 +651,6 @@ int Being::getWidth() const } } - int Being::getHeight() const { if (mSprites[BASE_SPRITE]) @@ -664,6 +666,11 @@ int Being::getHeight() const } } +void Being::setTargetAnimation(SimpleAnimation* animation) +{ + mUsedTargetCursor = animation; + mUsedTargetCursor->reset(); +} struct EffectDescription { std::string mGFXEffect; |