summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer>2011-03-28 20:13:17 +0200
committerYohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer>2011-03-28 20:13:17 +0200
commit25bfbc30fb4958a3a754d74bbe971dec717f831c (patch)
treea5bfd7308daf89d7d4cd84a2e98db7db77616a65
parent3c8e99cdfeee6b4db1dc56941659b94445601618 (diff)
downloadmana-25bfbc30fb4958a3a754d74bbe971dec717f831c.tar.gz
mana-25bfbc30fb4958a3a754d74bbe971dec717f831c.tar.bz2
mana-25bfbc30fb4958a3a754d74bbe971dec717f831c.tar.xz
mana-25bfbc30fb4958a3a754d74bbe971dec717f831c.zip
Added some tolerance on the tA being position message.
Also made the destination equal to the desired position in that case since it's what the tA server expects. This fixes monsters going to strange destinations while fighting them, and makes it all much smoother.
-rw-r--r--src/net/tmwa/beinghandler.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/net/tmwa/beinghandler.cpp b/src/net/tmwa/beinghandler.cpp
index b7f702c0..5ae11423 100644
--- a/src/net/tmwa/beinghandler.cpp
+++ b/src/net/tmwa/beinghandler.cpp
@@ -133,7 +133,17 @@ void handlePosMessage(Uint16 x, Uint16 y, Being *dstBeing,
{
Vector pos(x * tileWidth + tileWidth / 2,
y * tileHeight + tileHeight / 2);
- dstBeing->setPosition(pos);
+ Vector beingPos = dstBeing->getPosition();
+ // Don't set the position as the movement algorithm
+ // can guess it and it would break the animation played,
+ // when we're close enough.
+ if (std::abs(beingPos.x - pos.x) > POS_DEST_DIFF_TOLERANCE
+ || std::abs(beingPos.y - pos.y) > POS_DEST_DIFF_TOLERANCE)
+ dstBeing->setPosition(pos);
+
+ // Set also the destination to the desired position.
+ dstBeing->setDestination(pos.x, pos.y);
+
if (dir)
dstBeing->setDirection(dir);
}