| 273 | } |
| 274 | |
| 275 | void WorldClient::forEachCollisionBlock(RectI const& region, function<void(CollisionBlock const&)> const& iterator) const { |
| 276 | if (!inWorld()) |
| 277 | return; |
| 278 | |
| 279 | const_cast<WorldClient*>(this)->freshenCollision(region); |
| 280 | m_tileArray->tileEach(region, [iterator](Vec2I const& pos, ClientTile const& tile) { |
| 281 | if (tile.getCollision() == CollisionKind::Null) { |
| 282 | iterator(CollisionBlock::nullBlock(pos)); |
| 283 | } else { |
| 284 | starAssert(!tile.collisionCacheDirty); |
| 285 | for (auto const& block : tile.collisionCache) |
| 286 | iterator(block); |
| 287 | } |
| 288 | }); |
| 289 | } |
| 290 | |
| 291 | bool WorldClient::isTileConnectable(Vec2I const& pos, TileLayer layer, bool tilesOnly) const { |
| 292 | if (!inWorld()) |
no test coverage detected