}
-const Area &Map::AreaAt(const Vector<int> &offset) const {
+const Area *Map::AreaAt(const Vector<int> &offset) const {
if (numAreas > 0) {
Vector<int> coords(TileCoordinates(offset));
Vector<int> areaOffset(coords / areas[0].Size());
int areaIndex(areaOffset.Index(width));
if (areaIndex < numAreas) {
- return areas[areaIndex];
+ return areas + areaIndex;
}
}
- throw std::out_of_range("area offset out of bounds");
+ return 0;
}
-const Tile &Map::TileAt(const Vector<int> &offset) const {
- const Area &area(AreaAt(offset));
- Vector<int> tileOffset(TileCoordinates(offset) % area.Size());
- return area.TileAt(tileOffset);
+const Tile *Map::TileAt(const Vector<int> &offset) const {
+ const Area *area(AreaAt(offset));
+ if (area) {
+ Vector<int> tileOffset(TileCoordinates(offset) % area->Size());
+ return area->TileAt(tileOffset);
+ } else {
+ return 0;
+ }
}
Trigger *Map::TriggerAt(const geometry::Vector<int> &offset) {