diff --git a/data/room/06.room b/data/room/06.room index 4e17578..d087291 100644 --- a/data/room/06.room +++ b/data/room/06.room @@ -1,5 +1,5 @@ name=the test room -bgColor=blue +bgColor=black border=blue tileset=standard.png roomUp=0 diff --git a/data/room/06.tmx b/data/room/06.tmx index 923d1ca..a163514 100644 --- a/data/room/06.tmx +++ b/data/room/06.tmx @@ -3,7 +3,7 @@ -26,26,0,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,0,26,0,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, 26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,183,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26, 26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,183,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26, 26,0,0,0,0,0,86,0,0,0,0,0,0,0,0,0,0,183,0,0,0,0,0,0,0,0,0,0,0,0,0,26, @@ -13,12 +13,12 @@ 26,0,0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26, 26,0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26, 26,0,0,0,0,0,0,0,0,161,212,212,212,212,212,212,212,0,212,212,181,0,0,0,0,0,0,0,0,0,0,26, -26,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,0,0,181,0,0,0,0,0,0,0,0,0,26, -26,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,269,0,0,0,0,181,0,0,0,0,0,0,0,0,26, +26,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,0,0,181,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,269,0,0,0,0,181,0,0,0,0,0,0,0,0,26, 26,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,269,0,0,0,0,0,181,0,0,0,0,0,0,0,0, -26,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,0,289,0,0,0,0,0,0,181,0,0,0,0,0,0,0, -26,0,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, -26,0,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26 +0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,0,289,0,0,0,0,0,0,181,0,0,0,0,0,0,0, +26,0,26,0,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,0,26,0,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26 diff --git a/source/game.cpp b/source/game.cpp index a2ebed0..7bf6067 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -17,6 +17,7 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, D this->screen = screen; this->input = input; this->debug = debug; + debug->setEnabled(true); // Crea los objetos scoreboard = new ScoreBoard(renderer, asset, &playerLives, &itemsPicked, &clock); @@ -33,7 +34,6 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, D playerLives = 9; itemsPicked = 0; - debug->setEnabled(true); player->setInvincible(debug->getEnabled()); musicEnabled = !debug->getEnabled(); @@ -211,7 +211,7 @@ void Game::renderDebugInfo() SDL_RenderFillRect(renderer, &rect); // Pinta la rejilla - SDL_SetRenderDrawColor(renderer, 255, 255, 255, 64); + /*SDL_SetRenderDrawColor(renderer, 255, 255, 255, 48); for (int i = 0; i < PLAY_AREA_BOTTOM; i += 8) { // Lineas horizontales SDL_RenderDrawLine(renderer, 0, i, PLAY_AREA_RIGHT, i); @@ -219,7 +219,7 @@ void Game::renderDebugInfo() for (int i = 0; i < PLAY_AREA_RIGHT; i += 8) { // Lineas verticales SDL_RenderDrawLine(renderer, i, 0, i, PLAY_AREA_BOTTOM - 1); - } + }*/ // Pinta mascaras de sprite SDL_SetRenderDrawColor(renderer, 0, 255, 0, 192); diff --git a/source/room.cpp b/source/room.cpp index 9f46c30..27590c5 100644 --- a/source/room.cpp +++ b/source/room.cpp @@ -437,38 +437,51 @@ void Room::fillMapTexture() { clip.x = ((tilemap[(y * 32) + x] - 1) % 20) * 8; clip.y = ((tilemap[(y * 32) + x] - 1) / 20) * 8; - texture->render(renderer, x * 8, y * 8, &clip); + // texture->render(renderer, x * 8, y * 8, &clip); + if (debug->getEnabled()) + { + if (clip.x != -8) + { + clip.x = x * 8; + clip.y = y * 8; + SDL_SetRenderDrawColor(renderer, 32, 32, 32, 0xFF); + SDL_RenderFillRect(renderer, &clip); + } + } } // **** if (debug->getEnabled()) { - SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF); for (auto l : bottomSurfaces) { + SDL_SetRenderDrawColor(renderer, (rand() % 128) + 80, (rand() % 128) + 80, (rand() % 128) + 80, 0xFF); SDL_RenderDrawLine(renderer, l.x1, l.y, l.x2, l.y); } SDL_SetRenderDrawColor(renderer, 0xFF, 0x00, 0x00, 0xFF); for (auto l : topSurfaces) { + SDL_SetRenderDrawColor(renderer, (rand() % 128) + 80, (rand() % 128) + 80, (rand() % 128) + 80, 0xFF); SDL_RenderDrawLine(renderer, l.x1, l.y, l.x2, l.y); } SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF); for (auto l : leftSurfaces) { + SDL_SetRenderDrawColor(renderer, (rand() % 128) + 80, (rand() % 128) + 80, (rand() % 128) + 80, 0xFF); SDL_RenderDrawLine(renderer, l.x, l.y1, l.x, l.y2); } SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); for (auto l : rightSurfaces) { + SDL_SetRenderDrawColor(renderer, (rand() % 128)+80, (rand() % 128)+80, (rand() % 128)+80, 0xFF); SDL_RenderDrawLine(renderer, l.x, l.y1, l.x, l.y2); } } // **** - + SDL_SetRenderTarget(renderer, nullptr); } @@ -703,8 +716,8 @@ void Room::setBottomSurfaces() { std::vector tile; - // Busca todos los tiles de tipo wall (excepto los de la última fila) que debajo - // tienen un tile de tipo vacio + // Busca todos los tiles de tipo muro que no tengan debajo otro muro + // Hay que recorrer la habitación por filas (excepto los de la última fila) for (int i = 0; i < tilemap.size() - mapWidth; i++) { if (getTile(i) == t_wall && getTile(i + mapWidth) != t_wall) @@ -730,10 +743,6 @@ void Room::setBottomSurfaces() while (tile[i] + 1 == tile[i + 1]) { i++; - if (i % mapWidth == mapWidth - 1) - { - break; - } } line.x2 = ((tile[i] % mapWidth) * tileSize) + tileSize - 1; bottomSurfaces.push_back(line); @@ -746,8 +755,8 @@ void Room::setTopSurfaces() { std::vector tile; - // Busca todos los tiles de tipo wall (excepto los de la primera fila) que encima - // tienen un tile de tipo vacio + // Busca todos los tiles de tipo muro o pasable que no tengan encima un muro + // Hay que recorrer la habitación por filas (excepto los de la primera fila) for (int i = mapWidth; i < tilemap.size(); i++) { if ((getTile(i) == t_wall || getTile(i) == t_passable) && getTile(i - mapWidth) != t_wall) @@ -772,10 +781,6 @@ void Room::setTopSurfaces() while (tile[i] + 1 == tile[i + 1]) { i++; - if (i % mapWidth == mapWidth - 1) - { - break; - } } line.x2 = ((tile[i] % mapWidth) * tileSize) + tileSize - 1; topSurfaces.push_back(line); @@ -788,20 +793,23 @@ void Room::setLeftSurfaces() { std::vector tile; - // Busca todos los tiles de tipo wall (excepto los de la primera columna) que a su izquierda - // tienen un tile de tipo vacio - for (int i = 0; i < tilemap.size(); i++) + // Busca todos los tiles de tipo muro que no tienen a su izquierda un tile de tipo muro + // Hay que recorrer la habitación por columnas (excepto los de la primera columna) + for (int i = 1; i < mapWidth; ++i) { - if (i % mapWidth != 0) + for (int j = 0; j < mapHeight; ++j) { - if (getTile(i) == t_wall && getTile(i - 1) != t_wall) + const int pos = (j * mapWidth + i); + if (getTile(pos) == t_wall && getTile(pos - 1) != t_wall) { - tile.push_back(i); + tile.push_back(pos); } } } - // Recorre el vector de tiles buscando tiles consecutivos para localizar las superficies + // Recorre el vector de tiles buscando tiles consecutivos + // (Los tiles de la misma columna, la diferencia entre ellos es de mapWidth) + // para localizar las superficies int i = 0; while (i < tile.size()) { @@ -823,20 +831,23 @@ void Room::setRightSurfaces() { std::vector tile; - // Busca todos los tiles de tipo wall (excepto los de la ultima columna) que a su derecha - // tienen un tile de tipo vacio - for (int i = 0; i < tilemap.size(); i++) + // Busca todos los tiles de tipo muro que no tienen a su derecha un tile de tipo muro + // Hay que recorrer la habitación por columnas (excepto los de la última columna) + for (int i = 0; i < mapWidth - 1; ++i) { - if (i % mapWidth != mapWidth - 1) + for (int j = 0; j < mapHeight; ++j) { - if (getTile(i) == t_wall && getTile(i + 1) != t_wall) + const int pos = (j * mapWidth + i); + if (getTile(pos) == t_wall && getTile(pos + 1) != t_wall) { - tile.push_back(i); + tile.push_back(pos); } } } - // Recorre el vector de tiles buscando tiles consecutivos para localizar las superficies + // Recorre el vector de tiles buscando tiles consecutivos + // (Los tiles de la misma columna, la diferencia entre ellos es de mapWidth) + // para localizar las superficies int i = 0; while (i < tile.size()) {