summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/being/being.cpp43
-rw-r--r--src/being/being.h2
2 files changed, 45 insertions, 0 deletions
diff --git a/src/being/being.cpp b/src/being/being.cpp
index ba2108402..0b7010789 100644
--- a/src/being/being.cpp
+++ b/src/being/being.cpp
@@ -1592,6 +1592,9 @@ void Being::logic()
actorManager->destroy(this);
}
+ if (mPet)
+ mPet->petLogic();
+
const SoundInfo *const sound = mNextSound.sound;
if (sound)
{
@@ -1608,6 +1611,46 @@ void Being::logic()
BLOCK_END("Being::logic")
}
+void Being::petLogic()
+{
+ if (!mOwner || !mMap || !mInfo)
+ return;
+ int dstX = mOwner->getTileX();
+ int dstY = mOwner->getTileY();
+ const int followDist = 3;
+ const int dist = 1;
+ const int divX = abs(dstX - mX);
+ const int divY = abs(dstY - mY);
+ if (divX > followDist || divY > followDist)
+ {
+ if (divX > followDist)
+ {
+ if (dstX > mX + dist)
+ dstX -= dist;
+ else if (dstX + dist <= mX)
+ dstX += dist;
+ }
+ else
+ {
+ dstX = mX;
+ }
+
+ if (divY > followDist)
+ {
+ if (dstY > mY + dist)
+ dstY -= dist;
+ else if (dstX + dist <= mX)
+ dstY += dist;
+ }
+ else
+ {
+ dstY = mY;
+ }
+
+ setPath(mMap->findPath(mX, mY, dstX, dstY, getWalkMask()));
+ }
+}
+
void Being::drawEmotion(Graphics *const graphics, const int offsetX,
const int offsetY) const
{
diff --git a/src/being/being.h b/src/being/being.h
index 08ac81e9e..e20db69f4 100644
--- a/src/being/being.h
+++ b/src/being/being.h
@@ -412,6 +412,8 @@ class Being : public ActorSprite, public ConfigListener
*/
virtual void logic() override;
+ void petLogic();
+
/**
* Draws the speech text above the being.
*/