diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2008-10-31 23:01:23 +0000 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2008-10-31 23:01:23 +0000 |
commit | 052cdbd8fce689b64371da82409bfd4e0f189f45 (patch) | |
tree | 316c8a69defc2a9ca69d9e3a4840de44db8d2382 /src/localplayer.cpp | |
parent | 6d928722369bc1db7f17d3fb0d0cb69ce304d39b (diff) | |
download | mana-client-052cdbd8fce689b64371da82409bfd4e0f189f45.tar.gz mana-client-052cdbd8fce689b64371da82409bfd4e0f189f45.tar.bz2 mana-client-052cdbd8fce689b64371da82409bfd4e0f189f45.tar.xz mana-client-052cdbd8fce689b64371da82409bfd4e0f189f45.zip |
Merged revisions 4071,4093,4100,4363 via svnmerge from
https://themanaworld.svn.sourceforge.net/svnroot/themanaworld/tmw/branches/0.0
........
r4071 | the_enemy | 2008-04-11 16:12:30 +0200 (Fri, 11 Apr 2008) | 3 lines
Players now need to
click on the monster sprites rather than the tile. Players will now
move to the target before attacking it.
........
r4093 | the_enemy | 2008-04-15 18:10:32 +0200 (Tue, 15 Apr 2008) | 1 line
Fixed clicking near player.
........
r4100 | peaveydk | 2008-04-16 13:59:36 +0200 (Wed, 16 Apr 2008) | 1 line
Cancel walking to a clicked monster if the target is lost while getting to it (killed or otherwise removed).
........
r4363 | crush_tmw | 2008-06-24 14:42:04 +0200 (Tue, 24 Jun 2008) | 1 line
corrected date in changelog
........
Diffstat (limited to 'src/localplayer.cpp')
-rw-r--r-- | src/localplayer.cpp | 43 |
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); +} |