From daa73fee2b89f16c42a05a7ab081699e024fab23 Mon Sep 17 00:00:00 2001 From: Björn Steinbrink Date: Wed, 8 Mar 2006 01:46:03 +0000 Subject: Let the LocalPlayer decide whether it can walk to a destination. --- ChangeLog | 7 ++++++- src/gui/gui.cpp | 6 +++--- src/localplayer.cpp | 9 ++++++--- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2e861d97..221c7c4e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-03-08 Björn Steinbrink + + * src/localplayer.cpp, src/gui/gui.cpp: Let the LocalPlayer decide + whether it can walk to a destination. + 2006-03-07 Yohann Ferreira * trunk/debian/rules, trunk/debian/changelog, @@ -8,7 +13,7 @@ * data/graphics/tiles/Makefile.am, data/graphics/tiles/Woodland.png: Removed unused tileset. - + 2006-03-06 Björn Steinbrink * configure.ac: Version changed to 0.0.19. diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index b52ff8e8..af9a1281 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -48,7 +48,6 @@ #include "../localplayer.h" #include "../log.h" #include "../main.h" -#include "../map.h" #include "../npc.h" #include "../resources/image.h" @@ -257,7 +256,8 @@ Gui::mousePress(int mx, int my, int button) Being *being; FloorItem *floorItem; - if ((being = beingManager->findBeing(tilex, tiley)) && being->getType() != Being::LOCALPLAYER) + if ((being = beingManager->findBeing(tilex, tiley)) + && being->getType() != Being::LOCALPLAYER) { showPopup(mx, my, being); return; @@ -310,7 +310,7 @@ Gui::mousePress(int mx, int my, int button) player_node->pickUp(item); } // Just walk around - else if (engine->getCurrentMap()->getWalk(tilex, tiley)) + else { // XXX XXX XXX REALLY UGLY! Uint8 *keys = SDL_GetKeyState(NULL); diff --git a/src/localplayer.cpp b/src/localplayer.cpp index e10fd3d6..29a2a54b 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -178,7 +178,7 @@ void LocalPlayer::walk(unsigned char dir) if (action == WALK) { - // Avoid sending the coordinates to the server + // Just finish the current action, otherwise we get out of sync Being::setDestination(x, y); return; } @@ -203,8 +203,7 @@ void LocalPlayer::walk(unsigned char dir) if (dx && dy && !mMap->getWalk(x + dx, y + dy)) dx = 0; - // Walk to where the player can actually go - if ((dx || dy) && mMap->getWalk(x + dx, y + dy)) + if (dx || dy) { setDestination(x + dx, y + dy); } @@ -218,6 +217,10 @@ void LocalPlayer::walk(unsigned char dir) void LocalPlayer::setDestination(Uint16 x, Uint16 y) { + // Check if we can walk there + if (!mMap->getWalk(x, y)) + return; + char temp[3]; MessageOut outMsg(mNetwork); set_coordinates(temp, x, y, direction); -- cgit v1.2.3-70-g09d2