diff options
-rw-r--r-- | src/actor.h | 9 | ||||
-rw-r--r-- | src/actorsprite.cpp | 2 | ||||
-rw-r--r-- | src/animatedsprite.h | 3 | ||||
-rw-r--r-- | src/being.cpp | 14 | ||||
-rw-r--r-- | src/being.h | 3 | ||||
-rw-r--r-- | src/compoundsprite.cpp | 6 | ||||
-rw-r--r-- | src/compoundsprite.h | 2 | ||||
-rw-r--r-- | src/localplayer.cpp | 2 | ||||
-rw-r--r-- | src/map.cpp | 4 | ||||
-rw-r--r-- | src/particle.cpp | 5 | ||||
-rw-r--r-- | src/particle.h | 9 | ||||
-rw-r--r-- | src/textparticle.h | 11 |
12 files changed, 54 insertions, 16 deletions
diff --git a/src/actor.h b/src/actor.h index 240b5097..e2c32a94 100644 --- a/src/actor.h +++ b/src/actor.h @@ -89,10 +89,17 @@ public: /** * Returns the pixel Y coordinate that the actor should be drawn at. */ - virtual int getDrawPixelY() const + virtual int getDrawOrder() const { return getPixelY(); } /** + * Determines wether the actor should be drawn translucent when behind + * another object + */ + virtual bool drawnWhenBehind() const + { return false; } + + /** * Returns the x coordinate in tiles of the actor. */ virtual int getTileX() const; diff --git a/src/actorsprite.cpp b/src/actorsprite.cpp index e89ba3c8..8dc873da 100644 --- a/src/actorsprite.cpp +++ b/src/actorsprite.cpp @@ -69,7 +69,7 @@ ActorSprite::~ActorSprite() bool ActorSprite::draw(Graphics *graphics, int offsetX, int offsetY) const { int px = getPixelX() + offsetX; - int py = getDrawPixelY() + offsetY; + int py = getPixelY() + offsetY; if (mUsedTargetCursor) { diff --git a/src/animatedsprite.h b/src/animatedsprite.h index a5d91095..5a19ee0d 100644 --- a/src/animatedsprite.h +++ b/src/animatedsprite.h @@ -77,6 +77,9 @@ class AnimatedSprite : public Sprite int getNumberOfLayers() { return 1; } + virtual bool drawnWhenBehind() const + { return true; } + size_t getCurrentFrame() const; size_t getFrameCount() const; diff --git a/src/being.cpp b/src/being.cpp index 4f546f6d..f65afbd3 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -301,7 +301,7 @@ void Being::setSpeech(const std::string &text, int time) delete mText; mText = new Text(mSpeech, - getPixelX(), getDrawPixelY() - getHeight(), + getPixelX(), getPixelY() - getHeight(), gcn::Graphics::CENTER, &userPalette->getColor(UserPalette::PARTICLE), true); @@ -364,7 +364,7 @@ void Being::takeDamage(Being *attacker, int amount, // Show damage number particleEngine->addTextSplashEffect(damage, - getPixelX(), getDrawPixelY() - 16, + getPixelX(), getPixelY() - getHeight(), color, font, true); if (amount > 0) @@ -907,7 +907,7 @@ void Being::logic() void Being::drawSpeech(int offsetX, int offsetY) { const int px = getPixelX() - offsetX; - const int py = getDrawPixelY() - offsetY; + const int py = getPixelY() - offsetY; const int speech = config.getIntValue("speech"); // Draw speech above this being @@ -941,7 +941,7 @@ void Being::drawSpeech(int offsetX, int offsetY) if (! mText) { mText = new Text(mSpeech, - getPixelX(), getDrawPixelY() - getHeight(), + getPixelX(), getPixelY() - getHeight(), gcn::Graphics::CENTER, &userPalette->getColor(UserPalette::PARTICLE), true); @@ -965,9 +965,9 @@ void Being::updateCoords() // Monster names show above the sprite instead of below it if (getType() == MONSTER) - mDispName->adviseXY(getPixelX(), getDrawPixelY() - getHeight()); + mDispName->adviseXY(getPixelX(), getPixelY() - getHeight()); else - mDispName->adviseXY(getPixelX(), getDrawPixelY() + mDispName->getHeight()); + mDispName->adviseXY(getPixelX(), getPixelY() + mDispName->getHeight()); } void Being::flashName(int time) @@ -1016,7 +1016,7 @@ void Being::showName() font = boldFont; } - mDispName = new FlashText(mDisplayName, getPixelX(), getDrawPixelY(), + mDispName = new FlashText(mDisplayName, getPixelX(), getPixelY(), gcn::Graphics::CENTER, mNameColor, font); updateCoords(); diff --git a/src/being.h b/src/being.h index a2a78bfd..1cf713fa 100644 --- a/src/being.h +++ b/src/being.h @@ -279,6 +279,9 @@ class Being : public ActorSprite, public EventListener */ int getNumberOfLayers() const; + virtual bool drawnWhenBehind() const + { return CompoundSprite::drawnWhenBehind(); } + /** * Performs being logic. */ diff --git a/src/compoundsprite.cpp b/src/compoundsprite.cpp index 5214890c..6e8af72e 100644 --- a/src/compoundsprite.cpp +++ b/src/compoundsprite.cpp @@ -158,6 +158,12 @@ int CompoundSprite::getNumberOfLayers() const return size(); } +bool CompoundSprite::drawnWhenBehind() const +{ + // For now, just draw actors with only one layer when obscured + return (getNumberOfLayers() == 1); +} + size_t CompoundSprite::getCurrentFrame() const { SpriteConstIterator it, it_end; diff --git a/src/compoundsprite.h b/src/compoundsprite.h index 17fdfd18..d91193b3 100644 --- a/src/compoundsprite.h +++ b/src/compoundsprite.h @@ -66,6 +66,8 @@ public: int getNumberOfLayers() const; + virtual bool drawnWhenBehind() const; + size_t getCurrentFrame() const; size_t getFrameCount() const; diff --git a/src/localplayer.cpp b/src/localplayer.cpp index f941dd5f..1a7f20e1 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -119,7 +119,7 @@ void LocalPlayer::logic() particleEngine->addTextRiseFadeOutEffect( info.first, getPixelX(), - getDrawPixelY() - 48, + getPixelY() - 32 - 16, &userPalette->getColor(info.second), gui->getInfoParticleFont(), true); diff --git a/src/map.cpp b/src/map.cpp index f95284b4..ac287be4 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -325,7 +325,7 @@ void Map::addTileset(Tileset *tileset) bool actorCompare(const Actor *a, const Actor *b) { - return a->getPixelY() < b->getPixelY(); + return a->getDrawOrder() < b->getDrawOrder(); } void Map::update(int ticks) @@ -403,7 +403,7 @@ void Map::draw(Graphics *graphics, int scrollX, int scrollY) if (Actor *actor = *ai) { // For now, just draw actors with only one layer. - if (actor->getNumberOfLayers() == 1) + if (actor->drawnWhenBehind()) { actor->setAlpha(0.3f); actor->draw(graphics, -scrollX, -scrollY); diff --git a/src/particle.cpp b/src/particle.cpp index 4d6882be..4b8833eb 100644 --- a/src/particle.cpp +++ b/src/particle.cpp @@ -453,6 +453,11 @@ float Particle::getCurrentAlpha() const return alpha; } +int Particle::getDrawOrder() const +{ + return (int)(mPos.y) - 16; +} + void Particle::clear() { delete_all(mChildEmitters); diff --git a/src/particle.h b/src/particle.h index a09648ee..7ba80a3c 100644 --- a/src/particle.h +++ b/src/particle.h @@ -95,8 +95,13 @@ class Particle : public Actor /** * Necessary for sorting with the other sprites. */ - virtual int getDrawPixelY() const - { return (int) (mPos.y + mPos.z) - 64; } + virtual int getDrawOrder() const; + + /** + * Do not draw particles when beind other objects + */ + virtual bool drawnWhenBehind() const + { return false; } /** * Creates a blank particle as a child of the current particle diff --git a/src/textparticle.h b/src/textparticle.h index 2791cb03..61241308 100644 --- a/src/textparticle.h +++ b/src/textparticle.h @@ -37,8 +37,15 @@ class TextParticle : public Particle virtual bool draw(Graphics *graphics, int offsetX, int offsetY) const; // hack to improve text visibility - virtual int getPixelY() const - { return (int) (mPos.y + mPos.z); } + virtual int getDrawOrder() const + { return (int) (mPos.y) + 32; } + + /** In contrary to other particles, text particles should not be + * obscured by objects, because their information is too + * important. + */ + virtual bool drawnWhenBehind() const + { return true; } private: std::string mText; /**< Text of the particle. */ |