Don't crash when going past the bottom/right border.

This commit is contained in:
King_DuckZ 2016-11-07 22:31:52 +01:00
parent 20f8e75937
commit 89ac57eee7
3 changed files with 22 additions and 2 deletions

View file

@ -46,10 +46,19 @@ namespace curry {
assert(pos.x() > -tile_size.x() and pos.x() < m_viewport->size().x());
assert(pos.y() > -tile_size.y() and pos.y() < m_viewport->size().y());
if (pos.x() + tile_size.x() < m_viewport->size().x()) {
const float right_border = std::min(
m_viewport->size().x(),
static_cast<float>(world_size_pixel(world).x()) - m_viewport->position().x()
);
const float bottom_border = std::min(
m_viewport->size().y(),
static_cast<float>(world_size_pixel(world).y()) - m_viewport->position().y()
);
if (static_cast<float>(pos.x() + tile_size.x()) < right_border) {
++m_index.x();
}
else if (pos.y() + tile_size.y() < m_viewport->size().y()) {
else if (static_cast<float>(pos.y() + tile_size.y()) < bottom_border) {
m_index.x() = 0;
++m_index.y();
m_pixel_pos.x() = first_tile_pos.x();

View file

@ -15,6 +15,10 @@ namespace curry {
return m_tile_size;
}
const vec2us& WorldGrid::world_size() const {
return m_world_size;
}
const TileIndex* WorldGrid::tile (const vec2us& parIndex) const {
const std::size_t index = parIndex.x() + parIndex.y() * m_world_size.x();
assert(m_layer_count);
@ -74,4 +78,8 @@ namespace curry {
m_layers.clear();
m_layer_count = 0;
}
vec2i world_size_pixel (const WorldGrid& parWorld) {
return parWorld.tile_size() * parWorld.world_size();
}
} //namespace curry

View file

@ -11,6 +11,7 @@ namespace curry {
explicit WorldGrid (vec2us parTileSize);
const vec2us& tile_size() const;
const vec2us& world_size() const;
uint16_t layer_count() const;
const TileIndex* tile (const vec2us& parIndex) const;
void add_layer (vec2us parWorldSize, const std::vector<TileIndex>& parLayer);
@ -25,4 +26,6 @@ namespace curry {
vec2us m_world_size;
uint16_t m_layer_count;
};
vec2i world_size_pixel (const WorldGrid& parWorld);
} //namespace curry