diff options
-rw-r--r-- | src/being.cpp | 42 | ||||
-rw-r--r-- | src/being.h | 4 | ||||
-rw-r--r-- | src/net/tmwa/beinghandler.cpp | 10 |
3 files changed, 36 insertions, 20 deletions
diff --git a/src/being.cpp b/src/being.cpp index e66f3284b..49bcfee90 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -987,6 +987,34 @@ void Being::setDirection(Uint8 direction) CompoundSprite::setDirection(dir); } +Uint8 Being::calcDirection() const +{ + int dir = 0; + if (mDest.x > mX) + dir |= RIGHT; + else if (mDest.x < mX) + dir |= LEFT; + if (mDest.y > mY) + dir |= DOWN; + else if (mDest.y < mY) + dir |= UP; + return dir; +} + +Uint8 Being::calcDirection(int dstX, int dstY) const +{ + int dir = 0; + if (dstX > mX) + dir |= RIGHT; + else if (dstX < mX) + dir |= LEFT; + if (dstY > mY) + dir |= DOWN; + else if (dstY < mY) + dir |= UP; + return dir; +} + /** TODO: Used by eAthena only */ void Being::nextTile() { @@ -999,17 +1027,9 @@ void Being::nextTile() Position pos = mPath.front(); mPath.pop_front(); - int dir = 0; - if (pos.x > mX) - dir |= RIGHT; - else if (pos.x < mX) - dir |= LEFT; - if (pos.y > mY) - dir |= DOWN; - else if (pos.y < mY) - dir |= UP; - - setDirection(static_cast<Uint8>(dir)); + Uint8 dir = calcDirection(pos.x, pos.y); + if (dir) + setDirection(static_cast<Uint8>(dir)); if (!mMap->getWalk(pos.x, pos.y, getWalkMask())) { diff --git a/src/being.h b/src/being.h index 1dc2fd8f8..7d4883ba6 100644 --- a/src/being.h +++ b/src/being.h @@ -652,6 +652,10 @@ class Being : public ActorSprite, public ConfigListener int getHP() { return mHP; } + Uint8 calcDirection(int dstX, int dstY) const; + + Uint8 calcDirection() const; + protected: /** * Sets the new path for this being. diff --git a/src/net/tmwa/beinghandler.cpp b/src/net/tmwa/beinghandler.cpp index fb3ac44be..74a620ce3 100644 --- a/src/net/tmwa/beinghandler.cpp +++ b/src/net/tmwa/beinghandler.cpp @@ -951,15 +951,7 @@ void BeingHandler::handleMessage(Net::MessageIn &msg) if (srcX != dstX || srcY != dstY) { - int dir = 0; - if (dstX > srcX) - dir |= Being::RIGHT; - else if (dstX < srcX) - dir |= Being::LEFT; - if (dstY > srcY) - dir |= Being::DOWN; - else if (dstY < srcY) - dir |= Being::UP; + int dir = dstBeing->calcDirection(dstX, dstY); if (dir && dstBeing->getDirection() != dir) { |