X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmap%2FMap.cpp;h=20f2fa575585eebd8cc0fe070d4fafb50f2b1a00;hb=0fc36d261ef8129debbd4aa15594bc46cb82eb27;hp=7712a024838ca5a7e1719300db70af327bc8164e;hpb=c055b357c50dd871b49c38191a9d867ff42ea420;p=l2e.git diff --git a/src/map/Map.cpp b/src/map/Map.cpp index 7712a02..20f2fa5 100644 --- a/src/map/Map.cpp +++ b/src/map/Map.cpp @@ -30,9 +30,9 @@ Map::Map() const Area &Map::AreaAt(const Vector &offset) const { if (numAreas > 0) { - Vector tileOffset(offset.X() / tileset->Width(), offset.Y() / tileset->Height()); - Vector areaOffset(tileOffset.X() / areas[0].Width(), tileOffset.Y() / areas[0].Height()); - int areaIndex(areaOffset.Y() * width + areaOffset.X()); + Vector coords(TileCoordinates(offset)); + Vector areaOffset(coords / areas[0].Size()); + int areaIndex(areaOffset.Index(width)); if (areaIndex < numAreas) { return areas[areaIndex]; } @@ -42,29 +42,31 @@ const Area &Map::AreaAt(const Vector &offset) const { const Tile &Map::TileAt(const Vector &offset) const { const Area &area(AreaAt(offset)); - Vector tileOffset((offset.X() / tileset->Width()) % area.Width(), (offset.Y() / tileset->Height()) % area.Height()); + Vector tileOffset(TileCoordinates(offset) % area.Size()); return area.TileAt(tileOffset); } Trigger *Map::TriggerAt(const geometry::Vector &offset) { // TODO: add support for multiple triggers on a tile? - Vector tilePosition(offset.X() / tileset->Width(), offset.Y() / tileset->Height()); + Vector coords(TileCoordinates(offset)); for (Trigger *i(triggers); i != triggers + numTriggers; ++i) { - if (i->TilePosition() == tilePosition) { + if (i->TilePosition() == coords) { return i; } } return 0; } +Vector Map::TileCoordinates(const Vector &position) const { + return position / tileset->Size(); +} + void Map::Render(SDL_Surface *dest, const Vector &inOffset) const { // TODO: skip invisible areas for (int i(0); i < numAreas; ++i) { const Area &area(areas[i]); - Vector offset( - inOffset.X() + (i % width) * area.Width() * tileset->Width(), - inOffset.Y() + (i / width) * area.Height() * tileset->Height()); + Vector offset(inOffset + Vector::FromIndex(i, width) * area.Size() * tileset->Size()); area.Render(dest, tileset, offset); } }