X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmap%2FMap.cpp;h=d7c0b32e49c77c6fa1aa08927a7cbe74ff317243;hb=7fb774ec1df3d550cd8a6805bdc69c11ad36e498;hp=10b74d079a01d43b422fa7719bb1a84298aa8d8d;hpb=b27f427bbb6a1a1ee1230bacb4fce0eb3a8af240;p=l2e.git diff --git a/src/map/Map.cpp b/src/map/Map.cpp index 10b74d0..d7c0b32 100644 --- a/src/map/Map.cpp +++ b/src/map/Map.cpp @@ -23,6 +23,8 @@ Map::Map() , numAreas(0) , triggers(0) , numTriggers(0) +, entities(0) +, numEntities(0) , width(0) { } @@ -31,8 +33,8 @@ Map::Map() const Area &Map::AreaAt(const Vector &offset) const { if (numAreas > 0) { Vector coords(TileCoordinates(offset)); - Vector areaOffset(coords.X() / areas[0].Width(), coords.Y() / areas[0].Height()); - int areaIndex(areaOffset.Y() * width + areaOffset.X()); + Vector areaOffset(coords / areas[0].Size()); + int areaIndex(areaOffset.Index(width)); if (areaIndex < numAreas) { return areas[areaIndex]; } @@ -42,7 +44,7 @@ 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); } @@ -58,7 +60,7 @@ Trigger *Map::TriggerAt(const geometry::Vector &offset) { } Vector Map::TileCoordinates(const Vector &position) const { - return Vector(position.X() / tileset->Width(), position.Y() / tileset->Height()); + return position / tileset->Size(); } @@ -66,11 +68,27 @@ 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); } } +void Map::RenderDebug(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 + Vector::FromIndex(i, width) * area.Size() * tileset->Size()); + area.RenderDebug(dest, tileset, offset); + } + for (int i(0); i < numTriggers; ++i) { + Vector offset((triggers[i].TilePosition() * tileset->Size()) + inOffset); + SDL_Rect destRect; + destRect.x = offset.X() + (tileset->Width() / 4); + destRect.y = offset.Y() + (tileset->Height() / 4); + destRect.w = tileset->Width() / 2; + destRect.h = tileset->Height() / 2; + SDL_FillRect(dest, &destRect, SDL_MapRGB(dest->format, 0x00, 0xFF, 0xFF)); + } +} + }