X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmap%2FMap.cpp;h=fc664c1d7d4e26c0060176bf0283002abfbbe5a6;hb=616330670a0c3d9d4554c145e997129747d05979;hp=d7c0b32e49c77c6fa1aa08927a7cbe74ff317243;hpb=7fb774ec1df3d550cd8a6805bdc69c11ad36e498;p=l2e.git diff --git a/src/map/Map.cpp b/src/map/Map.cpp index d7c0b32..fc664c1 100644 --- a/src/map/Map.cpp +++ b/src/map/Map.cpp @@ -30,22 +30,26 @@ Map::Map() } -const Area &Map::AreaAt(const Vector &offset) const { +const Area *Map::AreaAt(const Vector &offset) const { if (numAreas > 0) { Vector coords(TileCoordinates(offset)); Vector 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 &offset) const { - const Area &area(AreaAt(offset)); - Vector tileOffset(TileCoordinates(offset) % area.Size()); - return area.TileAt(tileOffset); +const Tile *Map::TileAt(const Vector &offset) const { + const Area *area(AreaAt(offset)); + if (area) { + Vector tileOffset(TileCoordinates(offset) % area->Size()); + return area->TileAt(tileOffset); + } else { + return 0; + } } Trigger *Map::TriggerAt(const geometry::Vector &offset) {