Расположения тайла на экране считается по следующей формуле:
inline sf::Vector2f tile2screen_pos(uint32_t x, uint32_t y) {
return sf::Vector2f((m_tile_size / 2 * static_cast<float>(x)) + (m_tile_size / 2 * static_cast<float>(y)),
(m_tile_size / 4 * static_cast<float>(y)) - (m_tile_size / 4 * static_cast<float>(x)));
}
Прим.: Размер тайла (m_tile_size
) равен 40px. Из них по высоте сам тайл занимает нижние 20px. Поэтому деления на 4.
Пытался считать следующим образом:
inline sf::Vector2u screen2tile_pos(int32_t x, int32_t y) {
return sf::Vector2u(
(x / m_tile_size / 2 + y / m_tile_size / 2),
(x / m_tile_size / 4 + y / m_tile_size / 4)
);
}
Однако, тайл выбирается далеко сверху-слева.
PS код вызова
screen2tile_pos
:
m_selection = this->screen2tile_pos(event.mouseButton.x + m_camera.getViewport().left, event.mouseButton.y + m_camera.getViewport().top);