diff options
author | Fedja Beader <fedja@protonmail.ch> | 2024-03-11 18:26:36 +0000 |
---|---|---|
committer | Fedja Beader <fedja@protonmail.ch> | 2024-03-11 18:26:36 +0000 |
commit | 6f2eb19e8930010892252fa3a6e14b0bc6a2d19e (patch) | |
tree | efaacdf11f431d4f37c703f4415ea09a2339906c | |
parent | 5278bef1049758777c3a0d653edb5de2340a78b5 (diff) | |
download | mv-6f2eb19e8930010892252fa3a6e14b0bc6a2d19e.tar.gz mv-6f2eb19e8930010892252fa3a6e14b0bc6a2d19e.tar.bz2 mv-6f2eb19e8930010892252fa3a6e14b0bc6a2d19e.tar.xz mv-6f2eb19e8930010892252fa3a6e14b0bc6a2d19e.zip |
Make pickup code go to nearby tile, not on top of item.
Fixes most cases of walking through doors/warps on pickup.
****
-rw-r--r-- | src/being/localplayer.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/being/localplayer.cpp b/src/being/localplayer.cpp index 15d33d484..a8ffc6175 100644 --- a/src/being/localplayer.cpp +++ b/src/being/localplayer.cpp @@ -541,10 +541,24 @@ bool LocalPlayer::pickUp(FloorItem *const item) item->getTileY(), getBlockWalkMask(), 0); - if (!debugPath.empty()) - navigateTo(item->getTileX(), item->getTileY()); - else - setDestination(item->getTileX(), item->getTileY()); + + switch (debugPath.size()) + { + case 0: + setDestination(item->getTileX(), item->getTileY()); + break; + case 1:// should never happen due to above check for adjecent-tile + // pickup, but you never know. + navigateTo(item->getTileX(), item->getTileY()); + break; + default: + { + // at least two spots, move nearby. + const Position& nearby = *(++debugPath.rbegin()); + navigateTo(nearby.x, nearby.y); + break; + } + } mPickUpTarget = item; mPickUpTarget->addActorSpriteListener(this); |