Advertisement
eliasdaler

ImGui-SFML tileset

Jul 15th, 2018
1,902
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.88 KB | None | 0 0
  1. void TileState::addTilesetMenu()
  2. {
  3.     const sf::Vector2f tilesetImagePos = ImGui::GetCursorScreenPos();
  4.  
  5.     ImGui::Image(*currentTileset->texture);
  6.  
  7.     // draw grid
  8.     auto draw_list = ImGui::GetWindowDrawList();
  9.  
  10.     const auto tileSize = static_cast<float>(Tile::Size);
  11.     const auto xTiles = static_cast<int>(currentTileset->numberOfTiles.x);
  12.     const auto yTiles = static_cast<int>(currentTileset->numberOfTiles.y);
  13.  
  14.     // draw horizontal lines
  15.     for (int x = 0; x < xTiles + 1; ++x) {
  16.         draw_list->AddLine(ImVec2(tilesetImagePos.x + x * tileSize, tilesetImagePos.y),
  17.             ImVec2(tilesetImagePos.x + x * tileSize, tilesetImagePos.y + yTiles * tileSize),
  18.             ImColor(255, 255, 255));
  19.     }
  20.  
  21.     // draw vertical lines
  22.     for (int y = 0; y < yTiles + 1; ++y) {
  23.         draw_list->AddLine(ImVec2(tilesetImagePos.x, tilesetImagePos.y + y * tileSize),
  24.             ImVec2(tilesetImagePos.x + xTiles * tileSize, tilesetImagePos.y + y * tileSize),
  25.             ImColor(255, 255, 255));
  26.     }
  27.  
  28.     // check input
  29.     if (ImGui::IsItemHovered()) {
  30.         if (ImGui::IsMouseClicked(0)) {
  31.             const auto relMousePos = static_cast<sf::Vector2i>(sf::Vector2f(ImGui::GetMousePos()) - tilesetImagePos);
  32.             const auto tileId = currentTileset->getId(relMousePos);
  33.             if (currentTileset->isInBounds(tileId)) {
  34.                 setSelectedTile(tileId);
  35.             }
  36.         }
  37.     }
  38.  
  39.     const auto tileRect = static_cast<sf::FloatRect>(currentTileset->getTileTextureRect(selectedTileInfo.id));
  40.  
  41.     // highlight selected tile on tileset
  42.     sf::Vector2f selectedTileTL = mh::getTopLeftCorner(tileRect);
  43.     sf::Vector2f selectedTileBR = mh::getBottomRightCorner(tileRect);
  44.  
  45.     selectedTileTL += tilesetImagePos;
  46.     selectedTileBR += tilesetImagePos;
  47.  
  48.     draw_list->AddRect(selectedTileTL, selectedTileBR,
  49.         ImColor(255, 0, 0));
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement