diff options
Diffstat (limited to 'src/game.cpp')
-rw-r--r-- | src/game.cpp | 61 |
1 files changed, 35 insertions, 26 deletions
diff --git a/src/game.cpp b/src/game.cpp index 8c8fb205..bcfd9ac2 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -390,6 +390,40 @@ void Game::logic() } /** + * handle item pick up case. + */ +static void handleItemPickUp() +{ + int x = player_node->getTileX(); + int y = player_node->getTileY(); + + // Let's look for items around until you find one. + bool found = false; + for (int xX = x - 1; xX < x + 2; ++xX) + { + for (int yY = y - 1; yY < y + 2; ++yY) + { + FloorItem *item = actorSpriteManager->findItem(xX, yY); + if (item) + { + found = true; + player_node->pickUp(item); + + // We found it, so set the player + // direction accordingly, + player_node->lookAt( + player_node->getMap()->getTileCenter(xX, yY)); + + // Get out of the loops + break; + } + } + if (found) + break; + } +} + +/** * The huge input handling method. */ void Game::handleInput() @@ -621,32 +655,7 @@ void Game::handleInput() { case KeyboardConfig::KEY_PICKUP: { - int x = player_node->getTileX(); - int y = player_node->getTileY(); - - FloorItem *item = - actorSpriteManager->findItem(x, y); - - // If none below the player, try the tile in front - // of the player - if (!item) - { - // Temporary until tile-based picking is - // removed. - switch (player_node->getSpriteDirection()) - { - case DIRECTION_UP : --y; break; - case DIRECTION_DOWN : ++y; break; - case DIRECTION_LEFT : --x; break; - case DIRECTION_RIGHT: ++x; break; - default: break; - } - - item = actorSpriteManager->findItem(x, y); - } - - if (item) - player_node->pickUp(item); + handleItemPickUp(); used = true; } |