diff options
author | Jared Adams <jaxad0127@gmail.com> | 2009-08-13 17:30:59 -0600 |
---|---|---|
committer | Jared Adams <jaxad0127@gmail.com> | 2009-08-13 17:33:08 -0600 |
commit | f46cfb91278b27f4943f5512778129fe985c678e (patch) | |
tree | 0be219d66e723bcca8de2d584d66bc65d040fb26 /src/being.cpp | |
parent | be85ca9d91ff867faf140328d0bcbb2062b58cdf (diff) | |
download | mana-f46cfb91278b27f4943f5512778129fe985c678e.tar.gz mana-f46cfb91278b27f4943f5512778129fe985c678e.tar.bz2 mana-f46cfb91278b27f4943f5512778129fe985c678e.tar.xz mana-f46cfb91278b27f4943f5512778129fe985c678e.zip |
Clean up Being and it's derivatives
Move stuff only needed for Players into Player (like slots and sprite
limits). Move name handling into Being (no need for three copies of
this code). Clean up terminology (including Map terminology). Remove
hair-related variables.
Diffstat (limited to 'src/being.cpp')
-rw-r--r-- | src/being.cpp | 147 |
1 files changed, 83 insertions, 64 deletions
diff --git a/src/being.cpp b/src/being.cpp index 23b87e6c..37ae2200 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -77,18 +77,11 @@ Being::Being(int id, int job, Map *map): mSpriteDirection(DIRECTION_DOWN), mMap(NULL), mParticleEffects(config.getValue("particleeffects", 1)), + mDispName(0), + mShowName(false), mEquippedWeapon(NULL), -#ifdef TMWSERV_SUPPORT - mHairStyle(0), -#else - mHairStyle(1), -#endif - mHairColor(0), - mGender(GENDER_UNSPECIFIED), + mText(0), mStunMode(0), - mSprites(VECTOREND_SPRITE, NULL), - mSpriteIDs(VECTOREND_SPRITE, 0), - mSpriteColors(VECTOREND_SPRITE, ""), mStatusParticleEffects(&mStunParticleEffects, false), mChildParticleEffects(&mStatusParticleEffects, false), mMustResetParticles(false), @@ -105,8 +98,8 @@ Being::Being(int id, int job, Map *map): mSpeechBubble = new SpeechBubble; - mNameColor = &guiPalette->getColor(Palette::CHAT); - mText = 0; + mNameColor = &guiPalette->getColor(Palette::NPC); + mTextColor = &guiPalette->getColor(Palette::CHAT); } Being::~Being() @@ -120,6 +113,7 @@ Being::~Being() setMap(NULL); delete mSpeechBubble; + delete mDispName; delete mText; } @@ -218,19 +212,6 @@ void Being::setPath(const Path &path) #endif } -void Being::setHairStyle(int style, int color) -{ - mHairStyle = style < 0 ? mHairStyle : style % mNumberOfHairstyles; - mHairColor = color < 0 ? mHairColor : color % ColorDB::size(); -} - -void Being::setSprite(int slot, int id, const std::string &color) -{ - assert(slot >= BASE_SPRITE && slot < VECTOREND_SPRITE); - mSpriteIDs[slot] = id; - mSpriteColors[slot] = color; -} - void Being::setSpeech(const std::string &text, int time) { mSpeech = text; @@ -368,17 +349,42 @@ void Being::handleAttack(Being *victim, int damage, AttackType type) #endif } +void Being::setName(const std::string &name) +{ + mName = name; + + if (getShowName()) + showName(); +} + +void Being::setShowName(bool doShowName) +{ + bool oldShow = mShowName; + mShowName = doShowName; + + if (doShowName != oldShow) + { + if (doShowName) + showName(); + else + { + delete mDispName; + mDispName = 0; + } + } +} + void Being::setMap(Map *map) { // Remove sprite from potential previous map if (mMap) - mMap->removeSprite(mSpriteIterator); + mMap->removeSprite(mMapSprite); mMap = map; // Add sprite to potential new map if (mMap) - mSpriteIterator = mMap->addSprite(this); + mMapSprite = mMap->addSprite(this); // Clear particle effect list because child particles became invalid mChildParticleEffects.clear(); @@ -408,11 +414,9 @@ void Being::setAction(Action action, int attackType) else currentAction = ACTION_ATTACK; - for (int i = 0; i < VECTOREND_SPRITE; i++) - { - if (mSprites[i]) - mSprites[i]->reset(); - } + for (SpriteIterator it = mSprites.begin(); it != mSprites.end(); it++) + if (*it) + (*it)->reset(); break; case HURT: //currentAction = ACTION_HURT; // Buggy: makes the player stop @@ -429,11 +433,9 @@ void Being::setAction(Action action, int attackType) if (currentAction != ACTION_INVALID) { - for (int i = 0; i < VECTOREND_SPRITE; i++) - { - if (mSprites[i]) - mSprites[i]->play(currentAction); - } + for (SpriteIterator it = mSprites.begin(); it != mSprites.end(); it++) + if (*it) + (*it)->play(currentAction); mAction = action; } } @@ -461,11 +463,9 @@ void Being::setDirection(Uint8 direction) dir = DIRECTION_LEFT; mSpriteDirection = dir; - for (int i = 0; i < VECTOREND_SPRITE; i++) - { - if (mSprites[i]) - mSprites[i]->setDirection(dir); - } + for (SpriteIterator it = mSprites.begin(); it != mSprites.end(); it++) + if (*it) + (*it)->setDirection(dir); } #ifdef EATHENA_SUPPORT @@ -573,11 +573,9 @@ void Being::logic() if (mUsedTargetCursor) mUsedTargetCursor->update(tick_time * 10); - for (int i = 0; i < VECTOREND_SPRITE; i++) - { - if (mSprites[i]) - mSprites[i]->update(tick_time * 10); - } + for (SpriteIterator it = mSprites.begin(); it != mSprites.end(); it++) + if (*it) + (*it)->update(tick_time * 10); // Restart status/particle effects, if needed if (mMustResetParticles) { @@ -605,13 +603,9 @@ void Being::draw(Graphics *graphics, int offsetX, int offsetY) const if (mUsedTargetCursor) mUsedTargetCursor->draw(graphics, px, py); - for (int i = 0; i < VECTOREND_SPRITE; i++) - { - if (mSprites[i]) - { - mSprites[i]->draw(graphics, px, py); - } - } + for (SpriteConstIterator it = mSprites.begin(); it != mSprites.end(); it++) + if (*it) + (*it)->draw(graphics, px, py); } void Being::drawEmotion(Graphics *graphics, int offsetX, int offsetY) @@ -650,7 +644,7 @@ void Being::drawSpeech(int offsetX, int offsetY) mText = NULL; } - mSpeechBubble->setCaption(showName ? mName : "", mNameColor); + mSpeechBubble->setCaption(showName ? mName : "", mTextColor); mSpeechBubble->setText(mSpeech, showName); mSpeechBubble->setPosition(px - (mSpeechBubble->getWidth() / 2), @@ -680,11 +674,6 @@ void Being::drawSpeech(int offsetX, int offsetY) } } -Being::Type Being::getType() const -{ - return UNKNOWN; -} - void Being::setStatusEffectBlock(int offset, Uint16 newEffects) { for (int i = 0; i < STATUS_EFFECTS; i++) { @@ -765,7 +754,13 @@ int Being::getOffset(char pos, char neg) const int Being::getWidth() const { - if (AnimatedSprite *base = mSprites[BASE_SPRITE]) + AnimatedSprite *base = NULL; + + for (SpriteConstIterator it = mSprites.begin(); it != mSprites.end(); it++) + if ((base = (*it))) + break; + + if (base) return std::max(base->getWidth(), DEFAULT_WIDTH); else return DEFAULT_WIDTH; @@ -773,7 +768,13 @@ int Being::getWidth() const int Being::getHeight() const { - if (AnimatedSprite *base = mSprites[BASE_SPRITE]) + AnimatedSprite *base = NULL; + + for (SpriteConstIterator it = mSprites.begin(); it != mSprites.end(); it++) + if ((base = (*it))) + break; + + if (base) return std::max(base->getHeight(), DEFAULT_HEIGHT); else return DEFAULT_HEIGHT; @@ -875,9 +876,27 @@ void Being::internalTriggerEffect(int effectId, bool sfx, bool gfx) } } -int Being::getHairStyleCount() +void Being::updateCoords() { - return mNumberOfHairstyles; + if (mDispName) + { + mDispName->adviseXY(getPixelX(), getPixelY()); + } +} + +void Being::flashName(int time) +{ + if (mDispName) + mDispName->flash(time); +} + +void Being::showName() +{ + delete mDispName; + mDispName = 0; + + mDispName = new FlashText(mName, getPixelX(), getPixelY(), + gcn::Graphics::CENTER, mNameColor); } void Being::load() |