diff options
author | Bertram <bertram@cegetel.net> | 2009-10-22 01:18:41 +0200 |
---|---|---|
committer | Bertram <bertram@cegetel.net> | 2009-10-22 01:18:41 +0200 |
commit | 4720134d58cd5fe0846ed911b360ed75641cb874 (patch) | |
tree | 3ac3292f26a30971f424bdbd794f4daf3159adfe /src | |
parent | c36ab53b35e336e21fce5943d7d609ea02f8cea9 (diff) | |
download | mana-4720134d58cd5fe0846ed911b360ed75641cb874.tar.gz mana-4720134d58cd5fe0846ed911b360ed75641cb874.tar.bz2 mana-4720134d58cd5fe0846ed911b360ed75641cb874.tar.xz mana-4720134d58cd5fe0846ed911b360ed75641cb874.zip |
Fix flipping player's direction when using keyboard to walk diagonally.
Diffstat (limited to 'src')
-rw-r--r-- | src/being.cpp | 8 | ||||
-rw-r--r-- | src/localplayer.cpp | 4 | ||||
-rw-r--r-- | src/localplayer.h | 6 |
3 files changed, 14 insertions, 4 deletions
diff --git a/src/being.cpp b/src/being.cpp index d133225f..69e01dba 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -575,7 +575,13 @@ void Being::logic() // Update the player sprite direction int direction = 0; const float dx = std::abs(dir.x); - const float dy = std::abs(dir.y); + float dy = std::abs(dir.y); + + // When not using mouse for the player, we slightly prefer + // UP and DOWN position, especially when walking diagonally. + if (this == player_node && !player_node->isPathSetByMouse()) + dy = dy + 2; + if (dx > dy) direction |= (dir.x > 0) ? RIGHT : LEFT; else diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 78988aa1..42da1bf9 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -302,7 +302,7 @@ void LocalPlayer::nextStep(unsigned char dir = 0) const Vector &pos = getPosition(); - // Compute where the next step will set. + // Compute where the next step will be set. int dx = 0, dy = 0; if (dir & UP) @@ -342,7 +342,7 @@ void LocalPlayer::nextStep(unsigned char dir = 0) } } - if (dScaler >= 0) + if (dScaler > 0) { //effectManager->trigger(15, (int) pos.x + (dx * dScaler), (int) pos.y + (dy * dScaler)); setDestination((int) pos.x + (dx * dScaler), (int) pos.y + (dy * dScaler)); diff --git a/src/localplayer.h b/src/localplayer.h index 9229c583..57e1bb35 100644 --- a/src/localplayer.h +++ b/src/localplayer.h @@ -367,10 +367,14 @@ class LocalPlayer : public Player std::pair<int, int> getExperience(int skill); - /** Tells the path has been set by mouse */ + /** Tells that the path has been set by mouse. */ void pathSetByMouse() { mPathSetByMouse = true; } + /** Tells if the path has been set by mouse. */ + bool isPathSetByMouse() const + { return mPathSetByMouse; } + bool mUpdateName; /** Whether or not the name settings have changed */ bool mMapInitialized; /** Whether or not the map is available yet */ |