diff options
Diffstat (limited to 'src/gui/gui.cpp')
-rw-r--r-- | src/gui/gui.cpp | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index cf98dde9..3babd746 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -50,7 +50,9 @@ gcn::ImageFont *speechFont; Gui::Gui(Graphics *graphics): mHostImageLoader(NULL), mMouseCursor(NULL), - mCustomCursor(false) + mCustomCursor(false), + mMouseWalk(false), + mMouseX(0), mMouseY(0) { // Set graphics guiGraphics = graphics; @@ -201,6 +203,19 @@ void Gui::logic() // Work around Guichan bug of only applying focus on mouse or keyboard // events. mFocusHandler->applyChanges(); + + if (mMouseWalk) { + Map *tiledMap = engine->getCurrentMap(); + int tilex = mMouseX / 32 + camera_x; + int tiley = mMouseY / 32 + camera_y; + + if (state == GAME && tiledMap->getWalk(tilex, tiley)) { + walk(tilex, tiley, 0); + player_node->setDestination(tilex, tiley); + + autoTarget = NULL; + } + } } void Gui::draw() @@ -225,21 +240,24 @@ void Gui::mousePress(int mx, int my, int button) { // Mouse pressed on window container (basically, the map) - // When conditions for walking are met, set new player destination + // When conditions for walking are met, start moving by mouse if (player_node && player_node->action != DEAD && current_npc == 0 && button == gcn::MouseInput::LEFT) { - Map *tiledMap = engine->getCurrentMap(); - int tilex = mx / 32 + camera_x; - int tiley = my / 32 + camera_y; + mMouseWalk = true; + } +} - if (state == GAME && tiledMap->getWalk(tilex, tiley)) { - walk(tilex, tiley, 0); - player_node->setDestination(tilex, tiley); +void Gui::mouseRelease(int x, int y, int button) +{ + gcn::MouseListener::mouseRelease(x, y, button); + mMouseWalk = false; +} - autoTarget = NULL; - } - } +void Gui::mouseMotion(int mx, int my) +{ + mMouseX = mx; + mMouseY = my; } gcn::ImageFont *Gui::getFont() |