summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/actorsprite.cpp30
-rw-r--r--src/actorsprite.h2
-rw-r--r--src/map.cpp2
3 files changed, 22 insertions, 12 deletions
diff --git a/src/actorsprite.cpp b/src/actorsprite.cpp
index c71c183d..3b3a83ef 100644
--- a/src/actorsprite.cpp
+++ b/src/actorsprite.cpp
@@ -23,7 +23,6 @@
#include "client.h"
#include "configuration.h"
#include "event.h"
-#include "game.h"
#include "imagesprite.h"
#include "localplayer.h"
#include "log.h"
@@ -67,6 +66,17 @@ ActorSprite::~ActorSprite()
event.trigger(Event::ActorSpriteChannel);
}
+int ActorSprite::getDrawOrder() const
+{
+ int drawOrder = Actor::getDrawOrder();
+
+ // See note at ActorSprite::draw
+ if (mMap)
+ drawOrder += mMap->getTileHeight() / 2;
+
+ return drawOrder;
+}
+
bool ActorSprite::draw(Graphics *graphics, int offsetX, int offsetY) const
{
int px = getPixelX() + offsetX;
@@ -79,11 +89,11 @@ bool ActorSprite::draw(Graphics *graphics, int offsetX, int offsetY) const
mUsedTargetCursor->draw(graphics, px, py);
}
- Map *map = Game::instance() ? Game::instance()->getCurrentMap() : 0;
- if (map)
- {
- py += map->getTileHeight() / 2;
- }
+ // This is makes sure that actors positioned on the center of a tile have
+ // their sprite aligned to the bottom of that tile, mainly to maintain
+ // compatibility with older clients.
+ if (mMap)
+ py += mMap->getTileHeight() / 2;
return drawSpriteAt(graphics, px, py);
}
@@ -111,12 +121,10 @@ void ActorSprite::logic()
}
}
- Map *map = Game::instance() ? Game::instance()->getCurrentMap() : 0;
+ // See note at ActorSprite::draw
float py = mPos.y;
- if (map)
- {
- py += (float)map->getTileHeight() / 2;
- }
+ if (mMap)
+ py += mMap->getTileHeight() / 2;
// Update particle effects
mChildParticleEffects.moveTo(mPos.x, py);
diff --git a/src/actorsprite.h b/src/actorsprite.h
index cb9ea851..ab327e16 100644
--- a/src/actorsprite.h
+++ b/src/actorsprite.h
@@ -75,6 +75,8 @@ public:
*/
virtual Type getType() const { return UNKNOWN; }
+ virtual int getDrawOrder() const;
+
virtual bool draw(Graphics *graphics, int offsetX, int offsetY) const;
virtual bool drawSpriteAt(Graphics *graphics, int x, int y) const;
diff --git a/src/map.cpp b/src/map.cpp
index 89bcf061..8c748bbc 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -150,7 +150,7 @@ void MapLayer::draw(Graphics *graphics,
// tiles have been drawn
if (mIsFringeLayer)
{
- while (ai != actors.end() && (*ai)->getPixelY()
+ while (ai != actors.end() && (*ai)->getDrawOrder()
<= y * mMap->getTileHeight())
{
(*ai)->draw(graphics, -scrollX, -scrollY);