Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void TileState::addTilesetMenu()
- {
- const sf::Vector2f tilesetImagePos = ImGui::GetCursorScreenPos();
- ImGui::Image(*currentTileset->texture);
- // draw grid
- auto draw_list = ImGui::GetWindowDrawList();
- const auto tileSize = static_cast<float>(Tile::Size);
- const auto xTiles = static_cast<int>(currentTileset->numberOfTiles.x);
- const auto yTiles = static_cast<int>(currentTileset->numberOfTiles.y);
- // draw horizontal lines
- for (int x = 0; x < xTiles + 1; ++x) {
- draw_list->AddLine(ImVec2(tilesetImagePos.x + x * tileSize, tilesetImagePos.y),
- ImVec2(tilesetImagePos.x + x * tileSize, tilesetImagePos.y + yTiles * tileSize),
- ImColor(255, 255, 255));
- }
- // draw vertical lines
- for (int y = 0; y < yTiles + 1; ++y) {
- draw_list->AddLine(ImVec2(tilesetImagePos.x, tilesetImagePos.y + y * tileSize),
- ImVec2(tilesetImagePos.x + xTiles * tileSize, tilesetImagePos.y + y * tileSize),
- ImColor(255, 255, 255));
- }
- // check input
- if (ImGui::IsItemHovered()) {
- if (ImGui::IsMouseClicked(0)) {
- const auto relMousePos = static_cast<sf::Vector2i>(sf::Vector2f(ImGui::GetMousePos()) - tilesetImagePos);
- const auto tileId = currentTileset->getId(relMousePos);
- if (currentTileset->isInBounds(tileId)) {
- setSelectedTile(tileId);
- }
- }
- }
- const auto tileRect = static_cast<sf::FloatRect>(currentTileset->getTileTextureRect(selectedTileInfo.id));
- // highlight selected tile on tileset
- sf::Vector2f selectedTileTL = mh::getTopLeftCorner(tileRect);
- sf::Vector2f selectedTileBR = mh::getBottomRightCorner(tileRect);
- selectedTileTL += tilesetImagePos;
- selectedTileBR += tilesetImagePos;
- draw_list->AddRect(selectedTileTL, selectedTileBR,
- ImColor(255, 0, 0));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement