From 66840ebf118709864232571954b18e94b97705f0 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Sun, 25 Sep 2022 08:05:07 +0200 Subject: [PATCH] Tiles animados completados --- data/tilesets/standard.png | Bin 5021 -> 5071 bytes source/room.cpp | 53 +++++++++++++++++++------------------ source/room.h | 8 +++++- 3 files changed, 34 insertions(+), 27 deletions(-) diff --git a/data/tilesets/standard.png b/data/tilesets/standard.png index 6e7b7cd52a10784b3b785e3aee67743db80fecaf..f35bfbda28a48ead1ea864e691d4d95018af882a 100644 GIT binary patch delta 4946 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 Q00000NkvWtM6N<$f{p}!H~;_u delta 4895 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 diff --git a/source/room.cpp b/source/room.cpp index 7138a32..750a687 100644 --- a/source/room.cpp +++ b/source/room.cpp @@ -75,9 +75,9 @@ Room::~Room() delete item; } - for (auto a: animatedTiles) + for (auto a : aTile) { - delete a; + delete a.sprite; } } @@ -525,8 +525,12 @@ void Room::fillMapTexture() { // Tiled pone los tiles vacios del mapa como cero y empieza a contar de 1 a n. // Al cargar el mapa en memoria, se resta uno, por tanto los tiles vacios son -1 + // Tampoco hay que dibujar los tiles animados que estan en la fila 19 (indices) const int index = (y * mapWidth) + x; - if (index > -1) + const bool a = (tilemap[index] >= 18 * tilesetWidth) && (tilemap[index] < 19 * tilesetWidth); + const bool b = tilemap[index] > -1; + + if (b && !a) { clip.x = (tilemap[index] % tilesetWidth) * tileSize; clip.y = (tilemap[index] / tilesetWidth) * tileSize; @@ -624,10 +628,7 @@ void Room::renderMap() SDL_RenderCopy(renderer, mapTexture, nullptr, nullptr); // Dibuja los tiles animados - for (auto a:animatedTiles) - { - a->render(); - } + renderAnimatedTiles(); } // Dibuja los enemigos en pantalla @@ -739,7 +740,7 @@ tile_e Room::getTile(int index) } // La fila 18 es de tiles t_animated - if ((tilemap[index] >= 18 * tilesetWidth) && (tilemap[index] < 29 * tilesetWidth)) + if ((tilemap[index] >= 18 * tilesetWidth) && (tilemap[index] < 19 * tilesetWidth)) { return t_animated; } @@ -1095,16 +1096,18 @@ void Room::setAnimatedTiles() if (getTile(i) == t_animated) { // la i me da la ubicación - int x = (i % mapWidth) * tileSize; - int y = (i / mapWidth) * tileSize; + const int x = (i % mapWidth) * tileSize; + const int y = (i / mapWidth) * tileSize; // tilemap[i] me da el tile a poner - int xc = (tilemap[i] % tilesetWidth) * tileSize; - int yc = (tilemap[i] / tilesetWidth) * tileSize; + const int xc = (tilemap[i] % tilesetWidth) * tileSize; + const int yc = (tilemap[i] / tilesetWidth) * tileSize; - Sprite *sp = new Sprite(x, y, 8, 8, texture, renderer); - sp->setSpriteClip(xc, yc, 8, 8); - animatedTiles.push_back(sp); + aTile_t at; + at.sprite = new Sprite(x, y, 8, 8, texture, renderer); + at.sprite->setSpriteClip(xc, yc, 8, 8); + at.xcOrig = xc; + aTile.push_back(at); } } } @@ -1112,24 +1115,22 @@ void Room::setAnimatedTiles() // Actualiza los tiles animados void Room::updateAnimatedTiles() { - const int frame = (counter / 8) % 4; - for (auto &a : animatedTiles) - { // Frame vale 0, 1, 2 o 3. La x se aumenta de 8 en 8, salvo cuando frame vale 0 que ha de volver 3*8 - SDL_Rect rect = a->getSpriteClip(); - if (frame == 0) - rect.x -= 24; - else - rect.x += 8; - a->setSpriteClip(rect); + const int numFrames = 4; + const int offset = ((counter / 3) % numFrames * tileSize); + for (auto &a : aTile) + { + SDL_Rect rect = a.sprite->getSpriteClip(); + rect.x = a.xcOrig + offset; + a.sprite->setSpriteClip(rect); } } // Pinta los tiles animados en pantalla void Room::renderAnimatedTiles() { - for (auto a : animatedTiles) + for (auto a : aTile) { - a->render(); + a.sprite->render(); } } diff --git a/source/room.h b/source/room.h index 64efef7..2d52294 100644 --- a/source/room.h +++ b/source/room.h @@ -41,6 +41,12 @@ enum tile_e t_animated }; +struct aTile_t +{ + Sprite *sprite; // Sprite para dibujar el tile + int xcOrig; // Poicion X donde se encuentra el primer tile de la animacion en la tilesheet +}; + // Clase Room class Room { @@ -76,7 +82,7 @@ private: std::vector leftSlopes; // Lista con todas las rampas que suben hacia la izquierda std::vector rightSlopes; // Lista con todas las rampas que suben hacia la derecha int counter; // Contador para lo que haga falta - std::vector animatedTiles; // Vector con los indices de tiles animados + std::vector aTile; // Vector con los indices de tiles animados int tileSize; // Ancho del tile en pixels int mapWidth; // Ancho del mapa en tiles