diff options
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/viewport.cpp | 101 |
1 files changed, 65 insertions, 36 deletions
diff --git a/src/gui/viewport.cpp b/src/gui/viewport.cpp index 478059f53..ba40adfc5 100644 --- a/src/gui/viewport.cpp +++ b/src/gui/viewport.cpp @@ -289,49 +289,78 @@ void Viewport::_drawDebugPath(Graphics *graphics) // Get the current mouse position SDL_GetMouseState(&mMouseX, &mMouseY); - Path debugPath; + // Prepare the walkmask corresponding to the protocol + unsigned char walkMask = 0; + switch (Net::getNetworkType()) + { + case ServerInfo::TMWATHENA: + walkMask = Map::BLOCKMASK_WALL | Map::BLOCKMASK_CHARACTER; + break; + case ServerInfo::MANASERV: + default: + walkMask = Map::BLOCKMASK_WALL; + break; + } + static Path debugPath; + static Vector lastMouseDestination = Vector(0.0f, 0.0f); + Vector mouseDestination(mMouseX + (int) mPixelViewX, + mMouseY + (int) mPixelViewY); - if (Net::getNetworkType() == ServerInfo::TMWATHENA) + if (mouseDestination.x != lastMouseDestination.x + || mouseDestination.y != lastMouseDestination.y) { - const int mouseTileX = (mMouseX + static_cast<int>(mPixelViewX)) / 32; - const int mouseTileY = (mMouseY + static_cast<int>(mPixelViewY)) / 32; const Vector &playerPos = player_node->getPosition(); - debugPath = mMap->findPath( - static_cast<int>(playerPos.x - 16) / 32, - static_cast<int>(playerPos.y - 32) / 32, - mouseTileX, mouseTileY, 0, 500); + debugPath = mMap->findPath((int) playerPos.x, + (int) playerPos.y, + mouseDestination.x, + mouseDestination.y, + walkMask); - _drawPath(graphics, debugPath); + lastMouseDestination = mouseDestination; } -#ifdef MANASERV_SUPPORT - else if (Net::getNetworkType() == ServerInfo::MANASERV) + + // We draw the path proposed by mouse + _drawPath(graphics, debugPath, gcn::Color(128, 0, 128, 150)); + + // Draw the path debug information for every beings. + ActorSpritesConstIterator it, it_end; + const ActorSprites &actors = actorSpriteManager->getAll(); + for (it = actors.begin(), it_end = actors.end() ; it != it_end; it++) { - const Vector &playerPos = player_node->getPosition(); - const int playerRadius = player_node->getCollisionRadius(); - // Draw player collision rectangle - graphics->setColor(gcn::Color(128, 128, 0, 120)); - graphics->fillRectangle( - gcn::Rectangle(static_cast<int>(playerPos.x) - - static_cast<int>(mPixelViewX) - playerRadius, - static_cast<int>(playerPos.y) - - static_cast<int>(mPixelViewY) - playerRadius, - playerRadius * 2, playerRadius * 2)); - - debugPath = mMap->findPixelPath( - static_cast<int>(playerPos.x), - static_cast<int>(playerPos.y), - mMouseX + static_cast<int>(mPixelViewX), - mMouseY + static_cast<int>(mPixelViewY), - playerRadius, 0xFF); - - // We draw the path proposed by mouse - _drawPath(graphics, debugPath, gcn::Color(128, 0, 128)); - - // But also the one currently walked on. - _drawPath(graphics, player_node->getPath(), gcn::Color(0, 0, 255)); + Being *being = dynamic_cast<Being*>(*it); + if (being) + { + const Vector &beingPos = being->getPosition(); + int radius = being->getCollisionRadius(); + Path beingPath = being->getPath(); + + // Draw being collision rectangle + graphics->setColor(gcn::Color(128, 128, 0, 150)); + graphics->fillRectangle(gcn::Rectangle( + (int) beingPos.x + - (int) mPixelViewX - radius, + (int) beingPos.y - (int) mPixelViewY + - radius, + radius * 2, radius * 2)); + + _drawPath(graphics, + beingPath, + gcn::Color(0, 0, 255, 150)); + + // Draw also the absolute x, y position using a cross. + graphics->setColor(gcn::Color(0, 0, 255, 255)); + graphics->drawLine((int) beingPos.x - (int) mPixelViewX - 4, + (int) beingPos.y - (int) mPixelViewY - 4, + (int) beingPos.x - (int) mPixelViewX + 4, + (int) beingPos.y - (int) mPixelViewY + 4); + graphics->drawLine((int) beingPos.x - (int) mPixelViewX + 4, + (int) beingPos.y - (int) mPixelViewY - 4, + (int) beingPos.x - (int) mPixelViewX - 4, + (int) beingPos.y - (int) mPixelViewY + 4); + + } } -#endif } void Viewport::_drawPath(Graphics *graphics, const Path &path, @@ -788,4 +817,4 @@ void Viewport::moveCamera(int dx, int dy) { mCameraRelativeX += dx; mCameraRelativeY += dy; -}
\ No newline at end of file +} |