summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/actor.h9
-rw-r--r--src/actorsprite.cpp2
-rw-r--r--src/animatedsprite.h3
-rw-r--r--src/being.cpp14
-rw-r--r--src/being.h3
-rw-r--r--src/compoundsprite.cpp6
-rw-r--r--src/compoundsprite.h2
-rw-r--r--src/localplayer.cpp2
-rw-r--r--src/map.cpp4
-rw-r--r--src/particle.cpp5
-rw-r--r--src/particle.h9
-rw-r--r--src/textparticle.h11
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. */