summaryrefslogtreecommitdiff
path: root/src/localplayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/localplayer.cpp')
-rw-r--r--src/localplayer.cpp43
1 files changed, 38 insertions, 5 deletions
diff --git a/src/localplayer.cpp b/src/localplayer.cpp
index fce9506a..fe3f1f45 100644
--- a/src/localplayer.cpp
+++ b/src/localplayer.cpp
@@ -66,8 +66,9 @@ LocalPlayer::LocalPlayer():
mTotalWeight(1), mMaxWeight(1),
mHP(1), mMaxHP(1),
mTarget(NULL), mPickUpTarget(NULL),
- mTrading(false),
- mLastAction(-1), mWalkingDir(0),
+ mTrading(false), mGoingToTarget(false),
+ mLastAction(-1),
+ mWalkingDir(0),
mDestX(0), mDestY(0),
mLocalWalkTime(-1),
mExpMessageTime(0)
@@ -122,6 +123,21 @@ void LocalPlayer::nextStep()
walk(mWalkingDir);
}
}
+
+ // TODO: Fix automatically walking within range of target, when wanted
+ if (mGoingToTarget && mTarget && withinAttackRange(mTarget))
+ {
+ mAction = Being::STAND;
+ //attack(mTarget, true);
+ mGoingToTarget = false;
+ mPath.clear();
+ return;
+ }
+ else if (mGoingToTarget && !mTarget)
+ {
+ mGoingToTarget = false;
+ mPath.clear();
+ }
}
bool LocalPlayer::checkInviteRights(const std::string &guildName)
@@ -541,12 +557,29 @@ std::pair<int, int> LocalPlayer::getExperience(int skill)
int LocalPlayer::getAttackRange()
{
Item *weapon = mEquipment->getEquipment(EQUIP_FIGHT1_SLOT);
- if(weapon)
+ if (weapon)
{
const ItemInfo info = weapon->getInfo();
return info.getAttackRange();
}
- return 32; //unarmed range
-
+ return 32; // unarmed range
}
+bool LocalPlayer::withinAttackRange(Being *target)
+{
+ const Vector &targetPos = target->getPosition();
+ const Vector &pos = getPosition();
+ const int dx = abs(targetPos.x - pos.x);
+ const int dy = abs(targetPos.y - pos.y);
+ const int range = getAttackRange();
+
+ return !(dx > range || dy > range);
+}
+
+void LocalPlayer::setGotoTarget(Being *target)
+{
+ mTarget = target;
+ mGoingToTarget = true;
+ const Vector &targetPos = target->getPosition();
+ setDestination(targetPos.x, targetPos.y);
+}